Initex is a simple, interactive CLI tool to scaffold an opinionated Express-based backend project using either guided prompts or reusable preset files.
It exists because backend setup is a boring loop of the same decisions every time. Runtime. Database. Auth. Cache. Tooling. Initex standardizes those choices, makes them explicit, and lets you reuse them without copy-pasting your soul between projects.
Setting up backend projects repeatedly involves answering the same questions:
- Which runtime?
- Which database and ORM?
- Rate limiting?
- Linting and formatting?
- Logging?
- Security headers?
- Auth or no auth?
- Cache?
- SMTP?
- Sockets?
- Tooling?
Initex solves this by:
- Making those decisions explicit
- Allowing them to be saved and reused
- Cutting setup time without hiding configuration behind magic
Minimal defaults. Everything else is opt-in.
- Interactive and preset-based project generation
- First-class preset file support
- Database, cache, auth, SMTP, and socket configuration
- Supports modern runtimes and package managers
- Explicit configuration, no hidden behavior
Initex does not:
- Hide infrastructure decisions
- Generate frontend code
- Abstract away your business logic
- See Generated Project Structure for details.
-
Node.js
-
A supported runtime:
- Node.js
- Bun
- Deno
-
A package manager:
- npm
- pnpm
- yarn
- bun
- deno
(Your config decides which one actually matters.)
npm install -g initexnpx initexinitex my-appIf no options are provided, Initex runs in interactive mode.
initex --preset ./initex.preset.jsonInitex supports preset files to fully automate project generation.
Presets let you:
- Reuse backend decisions across projects
- Avoid interactive prompts
- Make infrastructure choices explicit and versionable
- Presets are supported in JSON and YAML formats
{
"name": "myawesomeapp",
"runtime": "bun",
"packageManager": "bun",
"db": {
"enable": true,
"provider": "postgresql",
"connectionString": "postgres://postgres:password@localhost:5432/myawesomeapp",
"orm": "drizzle",
"name": "myawesomeapp"
},
"cache": {
"enable": true,
"service": "multi"
},
"auth": {
"enable": true
},
"smtp": {
"enable": true,
"service": "gmail"
},
"git": true,
"socket": true
}See Preset File Schema for the full list of supported options and validation rules.
Generate a preset from an interactive run:
initex --generatePreset./<project-name>/.initex
initex --generatePreset ./initex.preset.jsoninitex [project-name] [options]If no options are provided, Initex runs in interactive mode.
| Flag | Alias | Description |
|---|---|---|
--mode |
-m |
Execution mode (start, test, test:bin) |
--name |
-n |
Project name |
--preset |
-p |
Use a preset file |
--generatePreset |
-g |
Generate a preset file |
--debug |
-d |
Print resolved CLI configuration |
Add screenshots, CLI output snippets, or links to example repositories here.
demo.mp4
- Fork the repository
- Create a focused branch
- Make changes with clear commits
- Add tests where applicable
- Open a pull request
2.1
- Improved OpenAPI documentation
2.2
- Idempotency support for critical APIs
- SQLite database support
2.3
- Admin authentication
- Updated RBAC model
2.4
- Valkey support for caching
Later versions
- BetterAuth integration
- AuthJS integration
- Clerk integration
Q: Can presets be reused across projects? A: Yes. Presets are designed to be portable and reusable.
Q: Does Initex require Bun if runtime is set to bun?
A: Yes. The selected runtime must be installed locally.