create-commonpub
Rust CLI for scaffolding new CommonPub instances.
Overview
Generates a ready-to-deploy CommonPub project with all configuration files, Docker setup, and package dependencies. Supports both interactive prompts and headless defaults.
Installation
Usage
Interactive Setup
Prompts for:
- Instance name and domain
- Description
- Feature flags (which modules to enable)
- Auth providers (GitHub, Google, email/password)
- Database connection details
Non-Interactive
Generates a project with sensible defaults (all core features enabled, email/password auth, local Docker Postgres).
Initialize in Existing Directory
Generated Project Structure
my-community/
.env # Environment variables
commonpub.config.ts # Instance configuration
docker-compose.yml # Local Postgres + Redis + Meilisearch
package.json # Dependencies and scripts
tsconfig.json # TypeScript config
nuxt.config.ts # Nuxt 3 config
pages/ # File-based routing
server/
api/ # Nitro API routes
middleware/ # Auth + security middleware
app.vue # Root component
Development
# Build
# Run tests
# Lint
Architecture
| Module | File | Purpose |
|---|---|---|
| CLI | main.rs |
Clap argument parser, subcommands |
| Library | lib.rs |
Public API for programmatic use |
| Prompts | prompts.rs |
Interactive prompts via dialoguer |
| Scaffold | scaffold.rs |
Directory creation and file writing |
| Template | template.rs |
Template rendering for config files |
Dependencies
clap: CLI argument parsingdialoguer: Interactive terminal promptsconsole: Terminal stylingindicatif: Progress barstoml: Config file parsing
Test Dependencies
tempfile: Temporary directories for integration testsassert_cmd: CLI assertion testingpredicates: Output matching