@antelopejs/dms-saas
Sign-up, plans, Stripe billing and a back office for a multi-tenant AntelopeJS DMS.

What it does
- Adds public pricing and registration screens, legal pages, and a completion screen for OAuth sign-ins.
- Defines plans whose permissions cap what each workspace can do, with features, limits, trials and seat pricing.
- Bills through Stripe: checkout, subscriptions, invoices, credit notes, refunds and Stripe Tax, with plans kept in sync.
- Gives workspace owners their settings: general, members, billing and data export.
- Gives the platform owner a back office: workspaces, users, segments, plan migrations, billing rules and legal documents.
Install
Run the AntelopeJS CLI from the root of a project that loads @antelopejs/dms in multi-tenant mode, with a database module, an e-mail module and a file storage:
ajs project modules add @antelopejs/dms-saas
Quick start
Give the module its Stripe keys from the environment:
// antelope.config.ts
import { defineConfig } from "@antelopejs/interface-core/config";
export default defineConfig({
name: "my-saas",
envOverrides: {
STRIPE_SECRET_KEY: "modules.dms-saas.config.stripe.secretKey",
STRIPE_PUBLISHABLE_KEY: "modules.dms-saas.config.stripe.publishableKey",
STRIPE_WEBHOOK_SECRET: "modules.dms-saas.config.stripe.webhookSecret",
},
modules: {
"dms-saas": {
source: { type: "package", package: "@antelopejs/dms-saas", version: "^0.9.0" },
config: {
stripe: {
secretKey: "sk_test_placeholder",
publishableKey: "pk_test_placeholder",
webhookSecret: "whsec_placeholder",
},
},
},
// dms, api, mongodb, auth-jwt, nodemailer, file-storage-local, ...
},
});
Then point a Stripe webhook at https://<api>/api/saas/webhooks/stripe, and publish a free plan in Modules › SaaS › Plans. Registration opens every workspace on that plan. With placeholder keys, the module still runs, and the blocks that need Stripe say so. For a deployment without Stripe, also set registration.paymentMethod to none, or the registration screen keeps its card step.
Compatibility
| Package | Supported | Tested with |
|---|---|---|
@antelopejs/interface-api | >=0.3.0 <1.0.0 | 0.3.0 |
@antelopejs/interface-api-util | >=0.3.0 <1.0.0 | 0.3.0 |
@antelopejs/interface-core | >=0.4.0 <1.0.0 | 0.4.0 |
@antelopejs/interface-data-api | >=0.6.1 <1.0.0 | 0.6.1 |
@antelopejs/interface-database | >=0.3.0 <1.0.0 | 0.3.0 |
@antelopejs/interface-database-decorators | >=0.2.0 <1.0.0 | 0.2.0 |
@antelopejs/interface-dms | >=0.12.0 <1.0.0 | 0.12.0 |
@antelopejs/interface-dms-automation | >=0.6.0 <1.0.0 | 0.6.0 |
@antelopejs/interface-dms-saas | workspace:^ | 0.6.1 |
The module also needs a DMS backend in a release that implements the @antelopejs/interface-dms range in the table above, and the @antelopejs/dms-frontend renderer in the range its frontend module declares in engines["@antelopejs/dms-frontend"] of frontend-vue/package.json. The ajs dms CLI refuses to build it with a renderer outside that range.
The module calls Stripe with the API version 2026-08-26.dahlia. Before upgrading an existing database, read Upgrading.
Documentation
The guide's sources live in packages/dms-saas/docs. The module ships the dms-saas Claude Code skill in packages/dms-saas/skills, declared under antelopeJs.skills.
Contributing
This package lives in the AntelopeJS/dms-saas pnpm workspace, next to @antelopejs/interface-dms-saas. Read CONTRIBUTING.md and the repository README for the development commands.