Ante (the initial stake in a poker game) is Cratis's SaaS invitation system: signed invitations, a lobby where invitees register, and event-based coordination with the host product.
Getting people into a SaaS product starts before they have an account. Someone has to be invited, the invitation has to be trustworthy, and the moment an invitee actually registers has to connect back to the invitation that brought them in. Doing this ad hoc in every product means re-solving the same questions each time: how invitations are issued, how they are verified, and how the rest of the system learns that an invitee arrived.
Ante's scope is exactly that slice — nothing more: signed invitations, a lobby where invitees register, and event-based coordination so the surrounding system can react to what happens.
- Signed invitations. A host product appends an invitation event to its own Chronicle outbox; an inbox reactor in Ante picks it up, mints an RSA-signed JWT, and hands it back as
InvitationTokenIssued— the host builds the link and emails it. Ante is the one place the signing key lives; no host reimplements the scheme. - The lobby. A React SPA with three wizards — join an existing tenant, set up a new organization, self-service registration — driving Ante's generated command/query proxies directly, with an optional pluggable terms-and-conditions step.
- Event coordination. Everything crossing the boundary is a Chronicle event: invitations in, acceptances and registrations out. The host reacts to what Ante produces; Ante never calls back into the host directly.
Ante v1 is implemented and buildable — a working .NET/Chronicle backend, a React lobby SPA, and specs for every slice (60 in-process backend specs, plus Vitest specs for the frontend's pure logic and the legal-acceptance component). It is not yet wired up as a deployed instance for any product — see Deployment for what that would take.
Extracted from the lobby inside Cratis Studio and generalized into a standalone, reusable product — Studio-specific naming is gone, and Studio's own document-authoring/provisioning-confirmation machinery was not carried over. See Boundaries for what Ante deliberately does not do.
CI builds, tests, lints, and type-checks on every push and pull request (.github/workflows/build.yml). Every pull request must carry a major/minor/patch/no-release label (.github/workflows/verify-semver-label.yml); merging a version-labelled one releases ghcr.io/cratis/ante and Cratis.Ante.Contracts on NuGet.org under a real semantic version, via cratis/release-action (.github/workflows/publish.yml). See Deployment for details.
Full documentation — configuration reference, the invitation lifecycle, the host integration contract, the lobby wizards, deployment, and what Ante deliberately does not do — lives in Documentation/. Start with Getting Started to run it locally, or Host Integration to wire a product up to it.
Ante is a Cratis project, built on event sourcing with Chronicle and CQRS with Arc for ASP.NET Core, following the Cratis AI conventions (see .cratis/PROJECT.md and the Cratis AI guide). The lobby SPA is built with @cratis/components on PrimeReact. Everything Cratis publishes today is MIT licensed and free to use — join the community on Discord.
Ante is licensed under the MIT License and free to use.