The decisions are already made.
And written down.
Prumo starts a TypeScript project with the framework, the module layout, the database rules, the auth wiring and the test boundaries already chosen. Each one was decided once, written into the project that receives it, and turned into something that runs.
From the terminal
One command asks what to build and writes the project.
npx @stjoseph/prumo new my-appNode 22.23.4 or later and pnpm 10.26 or later, on macOS, Linux or Windows. Read the documents
With Prumo Desktop
The same CLI in an app that creates, lists and runs your projects, on macOS, Linux and Windows.
macOS · Apple silicon and Intel
Apple siliconIntelUnsigned: confirm it once with Open Anyway.
Unsigned: install it with apt or dnf.
Windows · x64
Setup.exeUnsigned: More info, then Run anyway. Blocked where Smart App Control is on.
Unsigned previews of version 0.0.9. Every build needs Node 22.23.4 or later and pnpm 10.26 or later. How to install
A new project arrives with two things
- Code that already works
- Installed, wired together, and proven by starting rather than by compiling. Every template is committed in full and none of them calls somebody else’s scaffolder at install time.
- The conventions it follows
- A .prumo/ folder holding the rules that code obeys. Any AI assistant working in the repository reads it and knows them without anyone explaining. The conventions live in the project, not in someone’s head.
Three types, and what each one is made of
api
The server
- Fastify with a domain/infra structure
- tsyringe and Zod
- MikroORM on PostgreSQL
- Its own JWT authentication
- Swagger UI
- Vitest with Testcontainers
web
The browser app
- Vite, Next or Astro, with React
- The same sign-in on each
- Tailwind and shadcn/ui
- Forms validated with Zod
mobile
The phone app
- Expo with Expo Router
- NativeWind and MMKV
- Tokens kept in expo-secure-store
- Run in a development build
One type produces that project alone. Several produce a pnpm workspace, with the wire contract shared so a change on one side breaks the other at typecheck.
Nothing important is decided by silence
Every question the CLI asks also has a flag, which is how it runs in CI without a terminal. Outside an interactive terminal a missing answer is an error rather than a default.
npx @stjoseph/prumo new my-app --types api,web --single-tenant --single-language --languages en --no-mcp --sign-in password --email --no-socialThe stack is locked, and says so
One document names every package, every version floor and the nineteen entries that were deliberately dropped. It is written to be treated as given: a generated project inherits it whole, and nothing is left to be settled again per project.
Open the locked stackPrumo Desktop
A desktop application that creates Prumo projects, lists them, reads their conventions and runs their apps. Version 0.0.9, an unsigned preview for macOS, Linux and Windows, can be downloaded.