Getting Started with MADORI
Get a new MADORI project running in under two minutes.
Prerequisites
- Node.js 22+
- pnpm 11.22.0 — enable with
corepack enable pnpm curlandtar— required by the scaffolder
Create a new project
pnpm dlx create-madori-app@latest my-site
This scaffolds a complete MADORI project into ./my-site.
Install and run
cd my-site
pnpm install
pnpm dev
Your site is now running at http://localhost:3000.
Log in to the Control Panel
Visit http://localhost:3000/cp and sign in with:
- Email:
[email protected] - Password: randomly generated and printed once during setup
⚠️ Store the generated password securely and change it after your first login.
What's in your project
my-site/
├── content/ # Your content (Markdown + YAML)
│ └── collections/ # Collection entries
├── resources/ # Schema definitions
│ ├── blueprints/ # Field schemas
│ ├── fieldsets/ # Reusable field groups
│ └── roles/ # Permission roles
├── public/assets/ # Uploaded files
├── users/ # User accounts
├── src/ # Application source
└── madori.config.ts # Project configuration
Create your first collection
- Go to Control Panel → Blueprints → Create
- Choose "Collection" type, give it a handle (e.g.
blog) - Add fields: title (text), slug (slug), content (tiptap)
- Go to Collections → Create, link it to your blueprint
- Start creating entries
Create your first entry
- Navigate to your collection in the Control Panel
- Click Create Entry
- Fill in the fields and save
- Your content is stored as a Markdown file in
content/collections/
Query content with GraphQL
MADORI auto-generates a GraphQL schema from your blueprints. Visit http://localhost:3000/api/graphql to explore it.
Example query:
{
blogs {
title
slug
content
}
}
Deploy
MADORI requires one writable Node.js process with persistent storage. No database is required; ephemeral serverless filesystems do not support the writable CMS.
- Read-only frontend — bundle published content or integrate a remote content API; disable the local CP and write-dependent features
- VPS —
pnpm build && pnpm startbehind nginx (full CP support) - Managed Node.js service — configure a persistent volume and one writable instance
For CP functionality (content editing, asset uploads), preserve all writable data paths across deploys. Follow the deployment guide for configuration and storage requirements.
Next steps
- Explore the source on GitHub
- Create custom blueprints with the visual editor
- Add taxonomies to categorize content
- Build page templates with replicator fields and fieldsets