Skip to content

Projections

The Projections view monitors all async projections and event subscriptions registered in your Marten-based services. Each projection is tracked by its shard — a specific named partition of the projection's work.

Projections Grid

The grid shows all known projection shards across all monitored services:

ColumnDescription
Shard NameProjection and shard identifier (e.g., TripSummary:All)
ServiceWhich monitored service owns this projection
StatusRunning / Paused / Stopped / Rebuilding
Current SequenceLast event sequence number this projection has processed
High Water MarkThe latest event sequence in the event store
LagThe gap between current sequence and high water mark
Lag TrendWhether lag is increasing (↑), decreasing (↓), or stable (→)
Last UpdatedTime of the last sequence advance

Status Colors

  • Green — Running, lag within acceptable thresholds
  • Yellow — Warning: lag exceeds the warning threshold or projection restarted recently
  • Red — Critical: lag exceeds the critical threshold, or projection appears stalled
  • Gray — Paused or Stopped by operator action

Stall Detection

A projection is considered stalled if its sequence number has not advanced within a configurable time window (default: 5 minutes). Stalled projections receive a warning badge and can trigger alerts.

CritterWatch can be configured to automatically attempt projection restart on stall detection. See Alert System for configuration.

Projection Detail

Click a projection row to open the detail panel:

Sequence Chart

A time-series chart showing the projection's sequence number and the event store high water mark over the past hour. The gap between the lines represents lag. A widening gap indicates the projection is falling behind; converging lines indicate it is catching up.

Alert History

A timeline of all alerts raised for this projection:

  • Stall detected / resolved
  • Lag threshold exceeded / recovered
  • Restart triggered (automatic or manual)
  • Operator pause / restart / rebuild / rewind

Controls

Pause — stop the projection shard. Messages continue to be written to the event store, but this shard will not advance. Use when you need to investigate shard state or before making schema changes. Requires confirmation.

Restart — resume a paused projection shard from where it stopped. Use after resolving the issue that caused you to pause.

Rebuild — reset the projection to sequence 0 and rebuild the entire read model from scratch. This is destructive and can take a long time for large event stores. Requires explicit confirmation. A progress indicator shows estimated completion during the rebuild.

Rewind — reset the projection to a specific point:

  • Rewind to beginning — equivalent to rebuild without clearing the read model first
  • Rewind to sequence — enter a specific event sequence number
  • Rewind to timestamp — enter a date/time to find the nearest sequence and rewind to it

Rebuild vs. Rewind

Rebuild clears the read model and rebuilds from scratch — suitable when the read model is corrupted or the projection logic has changed.

Rewind moves the projection's position marker back without clearing the read model — suitable when you need to reprocess events after a bug fix but the existing data is not invalid.

Multi-Tenant Projections

For multi-tenant services, each tenant has independent projection shards. The grid shows all tenant-specific shards with the tenant ID displayed alongside the shard name. Rebuild and rewind operations target a specific tenant's event store.

Released under the MIT License.