# Marten Composite Projection

> Create a Marten Composite Projection to chain multiple projections or group them for performance. Use this when you need to use the output of one projection as the input for another, or to optimize daemon throughput.

- Skill: `majiayu000/marten-composite-projection` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/marten-composite-projection`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/marten-composite-projection/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/marten-composite-projection

---


Follow this guide to create a **Composite Projection** in Marten (v8.18+).

1.  **Define the Projection Class**
    -   Create a `class` in `src/BookStore.ApiService/Projections/`
    -   **Naming**: `{Summary}Projection` (typically a View Projection)
    -   **Base Class**: `MultiStreamProjection<T, TId>` (usually) or custom.
    -   **Template**: `templates/Projection.cs`

2.  **Configure in Marten**
    -   Open `src/BookStore.ApiService/Infrastructure/Extensions/MartenConfigurationExtensions.cs`
    -   Register using `CompositeProjectionFor`:
        ```csharp
        options.Projections.CompositeProjectionFor("GroupDetails", projection =>
        {
            // Stage 1: Basic Projections
            projection.Add<UserProjection>();
            projection.Add<OrderProjection>();

            // Stage 2: Dependent Projections (inputs from Stage 1)
            projection.Add<UserDashboardProjection>(2);
        });
        ```

3.  **Indexing**
    -   Configure indexes as usual in `ConfigureIndexes`.

## Related Skills
- `/marten__multi_stream_projection`: For standard multi-stream aggregates.
- `/marten__single_stream_projection`: For standard single-stream aggregates.

