Skip to content
Prumo
    Searches every heading in the documentation.

    Get started

    Generating a project takes one command. This page covers what the machine needs first, what the CLI asks, and what arrives.

    1. Check the machine

      Prumo needs Node 22.23.4 or later and pnpm 10.26 or later, on macOS, Linux or Windows. On Windows it runs natively: the project lives in a Windows folder and the Windows Node and pnpm run it. Inside a WSL distribution, with its own Node, pnpm and Docker, Prumo is on Linux, which is supported though not tested on WSL specifically; Windows tools working on a project inside the WSL filesystem are not supported. Anything with an API also needs Docker, because the development database runs there: on Windows, Docker Desktop with its WSL2 backend, set to Linux containers. This command checks all of it and names whatever is missing.

      npx @stjoseph/prumo doctor
    2. Generate the project

      It asks what to build, writes the project into my-app/, runs git init and installs. Nothing is committed, so the first commit is yours and its diff shows everything Prumo wrote.

      npx @stjoseph/prumo new my-app
    3. Answer without a terminal

      Every question has a flag, and without a terminal every question the answers raise needs one: a missing flag is an error. More than one type makes a workspace; a single type needs --alone or --monorepo to say how it is laid out.

      npx @stjoseph/prumo new my-app --types api,web --single-tenant --single-language --languages en --no-mcp --sign-in password --email --no-social
    4. Create the database

      Inside a project with an API, this creates the development database in Docker, writes its URL into .env, and runs the migrations unless --skip-migrate is passed. Once the database exists, prumo clean removes the setup the project needed only once.

      npx @stjoseph/prumo db

    The flags

    FlagWhat it answers
    --types api,web,mobileWhat the project contains. More than one type makes a workspace; web:vite, web:next or web:astro chooses the web framework, Vite by default
    --alone --monorepoHow a single type is laid out
    --multi-tenant --single-tenantWith an api, web or mobile: whether the application serves several tenants. Multi-tenant ships the multi-tenancy conventions; the generated code itself is not tenant-aware yet
    --single-language --multi-languageWhether the project speaks one language, its words written where they are shown, or several, from messages: one file per language, checked against a base, so another is a file and its translation
    --languages en,pt-BR,es-419The languages: exactly one with --single-language, or with --multi-language one or more, the base first. Prumo translates its templates into these three
    --mcp --no-mcpWith an api and a web: whether AI assistants reach the API through MCP, signed in as the user
    --sign-in password,email-code,phone-codeWith an api: how people sign in, one or more: a password, or a 6-digit code sent by email or by text, the first of which creates the account
    --email --no-emailWith an api and password: email verification and password reset, by a 6-digit code sent through the Mailer port, which writes to the log until you give it a provider
    --social google,apple --no-socialWith an api and a web or mobile: sign-in with Google, Apple, or both
    --skip-installStops after writing the files

    What landed

    FileWhat it is
    .prumo/The conventions, in seventeen areas. Only the areas the answers call for are copied
    .prumo/INDEX.mdOne line per document. Generated by the tool, and safe to regenerate
    .context/INDEX.mdThe project's own rules, which win over .prumo/. Written empty; the assistant adds a rule when the developer states one
    AGENTS.mdThe pointer into .context/ and .prumo/, read by Codex, Cursor, Copilot, Gemini CLI and others
    CLAUDE.mdAn @AGENTS.md import, for Claude Code