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:
| Column | Description |
|---|---|
| Shard Name | Projection and shard identifier (e.g., TripSummary:All) |
| Service | Which monitored service owns this projection |
| Status | Running / Paused / Stopped / Rebuilding |
| Current Sequence | Last event sequence number this projection has processed |
| High Water Mark | The latest event sequence in the event store |
| Lag | The gap between current sequence and high water mark |
| Lag Trend | Whether lag is increasing (↑), decreasing (↓), or stable (→) |
| Last Updated | Time 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.
