From 0d52dccfe69e71de677f1744848e5ffc3f02463b Mon Sep 17 00:00:00 2001 From: Antony Rizzitelli Date: Fri, 16 Oct 2026 20:02:49 +0000 Subject: [PATCH 1/3] feat: register DMS interfaces and starter templates --- README.md | 76 +++++++++++++++++++++++ interfaces/database-catalog/manifest.json | 5 ++ interfaces/dms-automation/manifest.json | 14 +++++ interfaces/dms-builder/manifest.json | 14 +++++ interfaces/dms-mailing/manifest.json | 14 +++++ interfaces/dms-marketing/manifest.json | 14 +++++ interfaces/dms-media/manifest.json | 14 +++++ interfaces/dms-saas/manifest.json | 14 +++++ interfaces/dms/manifest.json | 14 +++++ interfaces/email/manifest.json | 22 +++++++ interfaces/file-storage/manifest.json | 22 +++++++ manifest.json | 67 ++++++++++++++++++++ 12 files changed, 290 insertions(+) create mode 100644 interfaces/database-catalog/manifest.json create mode 100644 interfaces/dms-automation/manifest.json create mode 100644 interfaces/dms-builder/manifest.json create mode 100644 interfaces/dms-mailing/manifest.json create mode 100644 interfaces/dms-marketing/manifest.json create mode 100644 interfaces/dms-media/manifest.json create mode 100644 interfaces/dms-saas/manifest.json create mode 100644 interfaces/dms/manifest.json create mode 100644 interfaces/email/manifest.json create mode 100644 interfaces/file-storage/manifest.json diff --git a/README.md b/README.md index 7346552..98fcaca 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ The catalog the `ajs` CLI reads to find which modules implement an interface. It - `ajs project modules install` finds the interfaces a project imports without an implementation, and offers the modules this registry lists for them. - `ajs module init` offers the starred interfaces of this registry when it scaffolds a module, and the templates listed here. +- `ajs project init` also offers complete project templates, including **DMS Demo**. - Each interface has a folder under `interfaces/` with a `manifest.json`: a description, the interface package and the modules that implement it. - The root `manifest.json` maps each interface package to its folder and lists the starred interfaces and the project templates. @@ -33,6 +34,21 @@ The catalog the `ajs` CLI reads to find which modules implement an interface. It | [RethinkDB](https://interfaces.antelopejs.com/docs/rethinkdb) | `@antelopejs/interface-rethinkdb` | `@antelopejs/rethinkdb` | | [Stripe](https://interfaces.antelopejs.com/docs/stripe) | `@antelopejs/interface-stripe` | `@antelopejs/stripe` | +The catalog also includes these contracts: + +| Interface | Package | Modules listed | +| --- | --- | --- | +| Database Catalog | `@antelopejs/interface-database-catalog` | none published in this catalog yet | +| DMS | `@antelopejs/interface-dms` | `@antelopejs/dms` | +| DMS Automation | `@antelopejs/interface-dms-automation` | `@antelopejs/dms-automation` | +| DMS Builder | `@antelopejs/interface-dms-builder` | `@antelopejs/dms-builder` | +| DMS Mailing | `@antelopejs/interface-dms-mailing` | `@antelopejs/dms-mailing` | +| DMS Marketing | `@antelopejs/interface-dms-marketing` | `@antelopejs/dms-marketing` | +| DMS Media | `@antelopejs/interface-dms-media` | `@antelopejs/dms-media` | +| DMS SaaS | `@antelopejs/interface-dms-saas` | `@antelopejs/dms-saas` | +| Email | `@antelopejs/interface-email` | `@antelopejs/nodemailer`, `@antelopejs/brevo` | +| File Storage | `@antelopejs/interface-file-storage` | `@antelopejs/file-storage-local`, `@antelopejs/file-storage-s3` | + ## Use it The CLI reads this repository by default. Resolve the missing implementations of a project from its folder: @@ -41,6 +57,66 @@ The CLI reads this repository by default. Resolve the missing implementations of ajs project modules install ``` +### Start a DMS project + +Use a CLI release with project-template support to select **DMS Demo** in +`ajs project init`, or pass the template explicitly: + +```bash +ajs project init my-app --template "DMS Demo" --yes +cd my-app +pnpm run setup +pnpm dev +``` + +The demo requires Node.js 24, pnpm and a running MongoDB instance. Run +`pnpm frontend:dev` in a second terminal, then open the printed dashboard URL +to create the first administrator. See the [template README](https://github.com/AntelopeJS/template-dms-demo#readme) +for configuration and direct-clone instructions for older CLIs. + +`modules install` resolves missing contracts; it is not a menu of every DMS +feature. Modules such as `dms-ai`, `dms-api`, `dms-database` and `dms-lang` +do not declare an interface implementation. The demo already configures them. +Installing an interface package alone does not configure a working dashboard. + +### Start a reusable DMS module + +Select **DMS Module Typescript** in `ajs module init`, or pass it explicitly: + +```bash +ajs module init my-module --template "DMS Module Typescript" --pm pnpm --yes +cd my-module +pnpm run setup +pnpm services:up +pnpm dev +``` + +Run `pnpm frontend:dev` in a second terminal. This template contains a reusable +module, one Vue component and a `playground/` project. Docker Compose supplies +MongoDB and Mailpit; existing local services also work. See the +[module template README](https://github.com/AntelopeJS/template-module-dms#readme). +It belongs in `templates`, not `projectTemplates`: it is a module with a +development host, not a complete application. + +### Project template metadata + +The root `projectTemplates` array holds complete projects. The CLI offers +them only in `project init`, alongside the module templates in `templates`. +Older CLIs ignore `projectTemplates`, so they cannot offer a project they +would incorrectly overwrite. Keep complete projects out of `templates`. + +Both arrays use the required `name`, `repository` and `branch` fields and +these optional fields: + +- `description`: a hint in the template selector, including prerequisites. +- `packageManager`: require this package manager and skip its prompt. +- `nextSteps`: commands and optional descriptions displayed after creation; + the CLI does not execute these commands automatically. + +Publish CLI support and the template's setup script before enabling a complete +project template in the registry. CLI releases through 1.15.2 do not list +complete project templates; use the direct-clone instructions with those releases. + ## Add an interface or an implementation Create `interfaces//manifest.json`, or add your module to the `modules` array of an existing one: diff --git a/interfaces/database-catalog/manifest.json b/interfaces/database-catalog/manifest.json new file mode 100644 index 0000000..fa62fca --- /dev/null +++ b/interfaces/database-catalog/manifest.json @@ -0,0 +1,5 @@ +{ + "description": "Development-only introspection of external database schemas and relations. No public implementation is listed yet.", + "package": "@antelopejs/interface-database-catalog", + "modules": [] +} diff --git a/interfaces/dms-automation/manifest.json b/interfaces/dms-automation/manifest.json new file mode 100644 index 0000000..90da14c --- /dev/null +++ b/interfaces/dms-automation/manifest.json @@ -0,0 +1,14 @@ +{ + "description": "DMS automation workflows, triggers and actions.", + "package": "@antelopejs/interface-dms-automation", + "modules": [ + { + "name": "dms-automation", + "source": { + "type": "package", + "package": "@antelopejs/dms-automation", + "version": "latest" + } + } + ] +} diff --git a/interfaces/dms-builder/manifest.json b/interfaces/dms-builder/manifest.json new file mode 100644 index 0000000..f9da9c9 --- /dev/null +++ b/interfaces/dms-builder/manifest.json @@ -0,0 +1,14 @@ +{ + "description": "DMS visual page builder and reusable blocks.", + "package": "@antelopejs/interface-dms-builder", + "modules": [ + { + "name": "dms-builder", + "source": { + "type": "package", + "package": "@antelopejs/dms-builder", + "version": "latest" + } + } + ] +} diff --git a/interfaces/dms-mailing/manifest.json b/interfaces/dms-mailing/manifest.json new file mode 100644 index 0000000..d0c4d16 --- /dev/null +++ b/interfaces/dms-mailing/manifest.json @@ -0,0 +1,14 @@ +{ + "description": "DMS email templates, campaigns and mailing delivery.", + "package": "@antelopejs/interface-dms-mailing", + "modules": [ + { + "name": "dms-mailing", + "source": { + "type": "package", + "package": "@antelopejs/dms-mailing", + "version": "latest" + } + } + ] +} diff --git a/interfaces/dms-marketing/manifest.json b/interfaces/dms-marketing/manifest.json new file mode 100644 index 0000000..fcd7bd3 --- /dev/null +++ b/interfaces/dms-marketing/manifest.json @@ -0,0 +1,14 @@ +{ + "description": "DMS marketing audiences, segments and campaigns.", + "package": "@antelopejs/interface-dms-marketing", + "modules": [ + { + "name": "dms-marketing", + "source": { + "type": "package", + "package": "@antelopejs/dms-marketing", + "version": "latest" + } + } + ] +} diff --git a/interfaces/dms-media/manifest.json b/interfaces/dms-media/manifest.json new file mode 100644 index 0000000..acd7d2a --- /dev/null +++ b/interfaces/dms-media/manifest.json @@ -0,0 +1,14 @@ +{ + "description": "DMS media library, asset uploads, folders and permissions.", + "package": "@antelopejs/interface-dms-media", + "modules": [ + { + "name": "dms-media", + "source": { + "type": "package", + "package": "@antelopejs/dms-media", + "version": "latest" + } + } + ] +} diff --git a/interfaces/dms-saas/manifest.json b/interfaces/dms-saas/manifest.json new file mode 100644 index 0000000..0de9a11 --- /dev/null +++ b/interfaces/dms-saas/manifest.json @@ -0,0 +1,14 @@ +{ + "description": "DMS SaaS plans, subscriptions and billing.", + "package": "@antelopejs/interface-dms-saas", + "modules": [ + { + "name": "dms-saas", + "source": { + "type": "package", + "package": "@antelopejs/dms-saas", + "version": "latest" + } + } + ] +} diff --git a/interfaces/dms/manifest.json b/interfaces/dms/manifest.json new file mode 100644 index 0000000..1fab015 --- /dev/null +++ b/interfaces/dms/manifest.json @@ -0,0 +1,14 @@ +{ + "description": "DMS dashboard, pages, authentication and data controllers.", + "package": "@antelopejs/interface-dms", + "modules": [ + { + "name": "dms", + "source": { + "type": "package", + "package": "@antelopejs/dms", + "version": "latest" + } + } + ] +} diff --git a/interfaces/email/manifest.json b/interfaces/email/manifest.json new file mode 100644 index 0000000..d6679b6 --- /dev/null +++ b/interfaces/email/manifest.json @@ -0,0 +1,22 @@ +{ + "description": "Transactional email delivery through SMTP or an email provider.", + "package": "@antelopejs/interface-email", + "modules": [ + { + "name": "nodemailer", + "source": { + "type": "package", + "package": "@antelopejs/nodemailer", + "version": "latest" + } + }, + { + "name": "brevo", + "source": { + "type": "package", + "package": "@antelopejs/brevo", + "version": "latest" + } + } + ] +} diff --git a/interfaces/file-storage/manifest.json b/interfaces/file-storage/manifest.json new file mode 100644 index 0000000..047eb7f --- /dev/null +++ b/interfaces/file-storage/manifest.json @@ -0,0 +1,22 @@ +{ + "description": "File uploads and storage on the local filesystem or S3-compatible services.", + "package": "@antelopejs/interface-file-storage", + "modules": [ + { + "name": "file-storage-local", + "source": { + "type": "package", + "package": "@antelopejs/file-storage-local", + "version": "latest" + } + }, + { + "name": "file-storage-s3", + "source": { + "type": "package", + "package": "@antelopejs/file-storage-s3", + "version": "latest" + } + } + ] +} diff --git a/manifest.json b/manifest.json index f3b0d88..faa42c0 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,17 @@ "@antelopejs/interface-core": "core", "@antelopejs/interface-data-api": "data-api", "@antelopejs/interface-database": "database", + "@antelopejs/interface-database-catalog": "database-catalog", "@antelopejs/interface-database-decorators": "database-decorators", + "@antelopejs/interface-dms": "dms", + "@antelopejs/interface-dms-automation": "dms-automation", + "@antelopejs/interface-dms-builder": "dms-builder", + "@antelopejs/interface-dms-mailing": "dms-mailing", + "@antelopejs/interface-dms-marketing": "dms-marketing", + "@antelopejs/interface-dms-media": "dms-media", + "@antelopejs/interface-dms-saas": "dms-saas", + "@antelopejs/interface-email": "email", + "@antelopejs/interface-file-storage": "file-storage", "@antelopejs/interface-mongodb": "mongodb", "@antelopejs/interface-redis": "redis", "@antelopejs/interface-redis-scheduler": "redis_scheduler", @@ -20,6 +30,15 @@ "data-api", "database", "database-decorators", + "dms", + "dms-automation", + "dms-builder", + "dms-mailing", + "dms-marketing", + "dms-media", + "dms-saas", + "email", + "file-storage", "logging", "mongodb", "redis", @@ -38,10 +57,58 @@ "repository": "https://github.com/AntelopeJS/template-module-typescript.git", "branch": "main" }, + { + "name": "DMS Module Typescript", + "description": "Reusable DMS module with a Vue component and a local playground. Requires Node.js 24, pnpm and MongoDB.", + "repository": "https://github.com/AntelopeJS/template-module-dms.git", + "branch": "main", + "packageManager": "pnpm", + "nextSteps": [ + { + "command": "pnpm run setup", + "description": "Install the frontend and generate playground/.env without overwriting an existing one." + }, + { + "command": "pnpm services:up", + "description": "Start MongoDB and Mailpit with Docker Compose, or configure your local services in playground/.env." + }, + { + "command": "pnpm dev", + "description": "Start the playground backend in watch mode." + }, + { + "command": "pnpm frontend:dev", + "description": "In a second terminal, start the dashboard and create the first administrator." + } + ] + }, { "name": "Todo App Typescript", "repository": "https://github.com/AntelopeJS/template-todo-typescript.git", "branch": "main" } + ], + "projectTemplates": [ + { + "name": "DMS Demo", + "description": "Complete dashboard with all DMS features and a Vue frontend. Requires Node.js 24, pnpm and MongoDB.", + "repository": "https://github.com/AntelopeJS/template-dms-demo.git", + "branch": "main", + "packageManager": "pnpm", + "nextSteps": [ + { + "command": "pnpm run setup", + "description": "Install the frontend and create .env without overwriting an existing one. Start MongoDB and adjust MONGODB_URL if needed." + }, + { + "command": "pnpm dev", + "description": "Install the configured modules and start the DMS backend." + }, + { + "command": "pnpm frontend:dev", + "description": "In a second terminal in this directory, start the dashboard and open the printed URL to create the first administrator." + } + ] + } ] } From 28db386421402b06ae9bdcde6be69c79eb36c1e9 Mon Sep 17 00:00:00 2001 From: Antony Rizzitelli Date: Fri, 16 Oct 2026 20:34:32 +0000 Subject: [PATCH 2/3] fix: remove obsolete DMS setup instructions --- manifest.json | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/manifest.json b/manifest.json index faa42c0..887285f 100644 --- a/manifest.json +++ b/manifest.json @@ -64,10 +64,6 @@ "branch": "main", "packageManager": "pnpm", "nextSteps": [ - { - "command": "pnpm run setup", - "description": "Install the frontend and generate playground/.env without overwriting an existing one." - }, { "command": "pnpm services:up", "description": "Start MongoDB and Mailpit with Docker Compose, or configure your local services in playground/.env." @@ -96,13 +92,9 @@ "branch": "main", "packageManager": "pnpm", "nextSteps": [ - { - "command": "pnpm run setup", - "description": "Install the frontend and create .env without overwriting an existing one. Start MongoDB and adjust MONGODB_URL if needed." - }, { "command": "pnpm dev", - "description": "Install the configured modules and start the DMS backend." + "description": "Start MongoDB first, then install the configured modules and start the DMS backend. No .env is required with the development defaults." }, { "command": "pnpm frontend:dev", From 47a12277c0a37f699ab5347753c8d4cf44078090 Mon Sep 17 00:00:00 2001 From: Antony Rizzitelli Date: Fri, 16 Oct 2026 20:52:00 +0000 Subject: [PATCH 3/3] docs: align registry instructions with workspace templates --- README.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index cbd3542..67ea3a6 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ The catalog the `ajs` CLI reads to find which modules implement an interface. It | [Database](https://interfaces.antelopejs.com/docs/database) | `@antelopejs/interface-database` | `@antelopejs/mongodb`, `@antelopejs/rethinkdb` | | [Database Catalog](https://github.com/AntelopeJS/interface-database-catalog/tree/main/docs) | `@antelopejs/interface-database-catalog` | none: no public implementation yet | | [Database Decorators](https://interfaces.antelopejs.com/docs/database-decorators) | `@antelopejs/interface-database-decorators` | `@antelopejs/database-decorators` | -| [Email](https://github.com/AntelopeJS/interface-email/tree/main/docs) | `@antelopejs/interface-email` | `@antelopejs/nodemailer` | +| [Email](https://github.com/AntelopeJS/interface-email/tree/main/docs) | `@antelopejs/interface-email` | `@antelopejs/nodemailer`, `@antelopejs/brevo` | | [File Storage](https://github.com/AntelopeJS/interface-file-storage/tree/main/docs) | `@antelopejs/interface-file-storage` | `@antelopejs/file-storage-s3`, `@antelopejs/file-storage-local` | | [Logging](https://interfaces.antelopejs.com/docs/core/logging) | `@antelopejs/interface-core` | none: `@antelopejs/core` provides it | | [MongoDB](https://interfaces.antelopejs.com/docs/mongodb) | `@antelopejs/interface-mongodb` | `@antelopejs/mongodb` | @@ -53,7 +53,6 @@ The catalog also includes these contracts: | Interface | Package | Modules listed | | --- | --- | --- | -| Database Catalog | `@antelopejs/interface-database-catalog` | none published in this catalog yet | | DMS | `@antelopejs/interface-dms` | `@antelopejs/dms` | | DMS Automation | `@antelopejs/interface-dms-automation` | `@antelopejs/dms-automation` | | DMS Builder | `@antelopejs/interface-dms-builder` | `@antelopejs/dms-builder` | @@ -61,8 +60,6 @@ The catalog also includes these contracts: | DMS Marketing | `@antelopejs/interface-dms-marketing` | `@antelopejs/dms-marketing` | | DMS Media | `@antelopejs/interface-dms-media` | `@antelopejs/dms-media` | | DMS SaaS | `@antelopejs/interface-dms-saas` | `@antelopejs/dms-saas` | -| Email | `@antelopejs/interface-email` | `@antelopejs/nodemailer`, `@antelopejs/brevo` | -| File Storage | `@antelopejs/interface-file-storage` | `@antelopejs/file-storage-local`, `@antelopejs/file-storage-s3` | ## Use it @@ -80,7 +77,6 @@ Use a CLI release with project-template support to select **DMS Demo** in ```bash ajs project init my-app --template "DMS Demo" --yes cd my-app -pnpm run setup pnpm dev ``` @@ -101,7 +97,6 @@ Select **DMS Module Typescript** in `ajs module init`, or pass it explicitly: ```bash ajs module init my-module --template "DMS Module Typescript" --pm pnpm --yes cd my-module -pnpm run setup pnpm services:up pnpm dev ``` @@ -128,8 +123,8 @@ these optional fields: - `nextSteps`: commands and optional descriptions displayed after creation; the CLI does not execute these commands automatically. -Publish CLI support and the template's setup script before enabling a complete -project template in the registry. CLI releases through 1.15.2 do not list +Project creation requires the CLI release with project-template support. +CLI releases through 1.15.2 do not list complete project templates; use the direct-clone instructions with those releases. ## Add an interface or an implementation