Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 72 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand All @@ -27,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` |
Expand All @@ -48,6 +49,18 @@ monorepos this is `packages/interface-dms-*/docs/`; the
contracts separately from the runtime guides. This registry is not an inventory
of every package that can participate in AntelopeJS.

The catalog also includes these contracts:

| Interface | Package | Modules listed |
| --- | --- | --- |
| 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` |

## Use it

The CLI reads this repository by default. Resolve the missing implementations of a project from its folder:
Expand All @@ -56,6 +69,64 @@ 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 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 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.

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

Create `interfaces/<name>/manifest.json`, or add your module to the `modules` array of an existing one:
Expand Down
14 changes: 14 additions & 0 deletions interfaces/dms-automation/manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
]
}
14 changes: 14 additions & 0 deletions interfaces/dms-builder/manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
]
}
14 changes: 14 additions & 0 deletions interfaces/dms-mailing/manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
]
}
14 changes: 14 additions & 0 deletions interfaces/dms-marketing/manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
]
}
14 changes: 14 additions & 0 deletions interfaces/dms-media/manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
]
}
14 changes: 14 additions & 0 deletions interfaces/dms-saas/manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
]
}
14 changes: 14 additions & 0 deletions interfaces/dms/manifest.json
Original file line number Diff line number Diff line change
@@ -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"
}
}
]
}
8 changes: 8 additions & 0 deletions interfaces/email/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@
"package": "@antelopejs/nodemailer",
"version": "latest"
}
},
{
"name": "brevo",
"source": {
"type": "package",
"package": "@antelopejs/brevo",
"version": "latest"
}
}
]
}
56 changes: 56 additions & 0 deletions manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@
"@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",
Expand All @@ -23,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",
Expand All @@ -41,10 +57,50 @@
"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 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 dev",
"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",
"description": "In a second terminal in this directory, start the dashboard and open the printed URL to create the first administrator."
}
]
}
]
}
Loading