Interactive CLI for scaffolding full-stack projects with composable ML services
TypeScript
1
698 commits
updated Oct 19, 2026
Interactive CLI for scaffolding full-stack projects with composable ML services — from
npx hatchkitto a deployed app on your own infrastructure in minutes.
Hatchkit turns the messy 2-week ritual of "start a new product" into a single guided command. It:
No vendor lock-in. Everything it spins up — your server, your Coolify, your GitHub repo, your DNS — stays yours.
# One-time: wire up credentials (GitHub, Coolify, Hetzner, DNS, …)
npx hatchkit setup
# See what's configured and what's next
npx hatchkit status
# Scaffold + deploy a new project
npx hatchkit create
That's it. You'll be walked through name → domain → features → ML → deploy target, then hatchkit will scaffold, commit, create the GitHub repo, provision DNS + server, and push the app to Coolify.
Every one of those questions also has a flag. Pass the answers you already know and only the rest get prompted, or add --yes to skip prompting entirely:
hatchkit create --yes --name blog --domain blog.example.com \
--surfaces fullstack --deployment-mode coolify --features analytics --public
Run hatchkit create --help for the full flag list, or see the commands reference.
New to the CLI? Run hatchkit explain for a one-page mental model covering every concept, command, and the canonical workflow.
| Command | What it does |
|---|---|
hatchkit setup | One-time onboarding — stores tokens in the OS keychain. Alias: init. |
hatchkit status | Show which providers are configured and what's the next best step. |
hatchkit doctor | Health-check every configured provider with a read-only API call + contextual fix hints on failures. |
hatchkit explain | Print the one-page mental model (concepts, commands, workflow). |
hatchkit create | Scaffold a new project and optionally deploy it end-to-end. Interactive by default; every prompt has a matching flag, and --yes makes it fully non-interactive. |
hatchkit update | Add features (workspaces, desktop, mobile, …) to a project already scaffolded. |
hatchkit add <project> [services] | Provision GlitchTip / Plausible / Listmonk + SES / email / search clients for an existing project. |
hatchkit signing org-init | One-time per dev machine — collect Apple Distribution .p12 / App Store Connect API key, Google Play service account JSON, Azure Trusted Signing service principal. |
hatchkit signing apply [project-dir] | Wire signed installers + store uploads: writes build-{windows,ios,android}.yml, rewrites bundle ID in package.json (electron-builder build) / capacitor.config.ts / android/app/build.gradle / strings.xml / MainActivity.java / project.pbxproj, mints the Apple Bundle ID + App record + provisioning profile via the ASC API, generates an Android upload keystore, pushes ~20 GitHub Actions secrets. Idempotent. Same flow runs via hatchkit add <project> signing. |
hatchkit mac-runner on|off|serve|run|status | Run a private repo's macOS and iOS jobs on this Mac, on demand, instead of GitHub's macOS runners. on sets the repo variable APPLE_RUNNER; serve hosts the queued jobs with a just-in-time runner and deregisters it after the runs finish. Artifacts, store uploads and draft releases stay in the same workflow. |
hatchkit gh-pages | Wire GitHub Pages for the current repo (static / Vite / Jekyll) with optional custom domain + DNS. |
hatchkit cloudflare | Wire Cloudflare Workers Static Assets for the current repo — free, unmetered asset requests. |
hatchkit keys show/push <project> | Read or push the dotenvx private key to Coolify. |
hatchkit config [add/reset] | Inspect or modify stored provider credentials. |
hatchkit completion <shell> | Print a zsh / bash / fish completion script. |
Full reference: Commands, or hatchkit help <command>.
┌──────────────────────────────────────────────┐
│ hatchkit create │
└──────────────────────────────────────────────┘
│
┌───────────────────────┼────────────────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Scaffold │ │ Infra │ │ ML │
│ │ │ │ │ │
│ starter → │ │ Terraform → │ │ Modal / │
│ your repo │ │ DNS + VPS │ │ RunPod / │
│ + GitHub │ │ + Coolify │ │ HF / … │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└───────────────────────┼────────────────────────┘
▼
https://your-domain.example
See Architecture for the deeper tour.
Agents (Claude Code, Cursor, Claude Desktop) can drive hatchkit without scraping CLI output:
hatchkit status --json → StatusSnapshot (providers, nextStep, suggested commands).hatchkit doctor --json → per-provider health with a hint[] array on failing checks (credential rotation URL, required scopes, the exact hatchkit config add <x> to re-run).hatchkit explain --json → full mental model (concepts, commands, workflows, state locations).hatchkit keys show <project> --json → { project, found, key }.SKILL.md at the repo root (plus .agents/skills/hatchkit/SKILL.md and .claude/skills/hatchkit/SKILL.md) tells agents when and how to reach for hatchkit.
The optional @hatchkit/mcp package exposes local CLI status and doctor tools. The mcp project feature generates a separate server for one app's public API. See the MCP guide and operator server README.
hatchkit completion zsh > ~/.zsh/completions/_hatchkit
hatchkit completion bash > /usr/local/etc/bash_completion.d/hatchkit
hatchkit completion fish > ~/.config/fish/completions/hatchkit.fish
| What | Where |
|---|---|
| Provider metadata (no secrets) | ~/<conf-dir>/config.json |
| Secrets (tokens, keys) | OS keychain, service hatchkit |
| Provisioned env blocks | ~/<conf-dir>/provisioned/<project>.{dev,prod}.env |
| Project manifest | <project>/.hatchkit.json |
HATCHKIT_CONF_DIR overrides the config directory.
Full docs live under docs/ and are published at https://hatchkit.trebeljahr.com/.
hatchkit gh-pages for static sites, SPAs, Jekyll docs, and Docusaurus docshatchkit cloudflare for static sites on CloudflareSource for those pages lives in docs/content/docs/.
hatchkit/
├─ cli/ # the npm package (published as `hatchkit`)
├─ mcp/ # @hatchkit/mcp — MCP server for agents
├─ starter/ # full-stack starter template (subtree-merged)
├─ infra/ # Terraform + Coolify automation (subtree-merged)
├─ services/ml/ # pre-built ML service templates
│ ├─ image-recognition/
│ ├─ subtitles/
│ ├─ 3d-extraction/
│ └─ background-removal/
├─ docs/ # Next.js/Fumadocs docs site — deployed to GitHub Pages
└─ .github/workflows/
├─ ci.yml # typecheck + lint + scaffold matrix
├─ gitleaks.yml # secret scanning
└─ deploy.yml # container build + deploy
# Install deps (monorepo)
pnpm install
# Run the CLI against the local source (tsx)
pnpm --filter hatchkit dev
# Typecheck + lint + scaffold test matrix
pnpm --filter hatchkit check
# Install locally as a global command
pnpm --filter hatchkit install-local
Clone the repo and you're set — starter/ and infra/ are in-tree
(previously git submodules; merged via git subtree).
git clone https://github.com/trebeljahr/hatchkit.git
Hatchkit handles scaffolding, providers, infrastructure, and deployment. These sibling tools cover asset and naming work that often happens before or beside a Hatchkit project.
conv3d — converts FBX, OBJ, and glTF assets to GLB and can emit typed React Three Fiber components for 3D, game, or asset-heavy starters.sprite-tools — builds game-ready 2D sprite assets with collision polygons, pivots, animation tags, palettes, atlases, and exports.name-checker — checks candidate names across trademarks, domains, socials, app stores, package registries, and code hosts before launch setup.gamedev-asset-library — catalogs free, permissively licensed game assets for Hatchkit games, prototypes, R3F scenes, and ML-backed asset workflows.MIT — see LICENSE.
Interactive CLI for scaffolding full-stack projects with composable ML services
TypeScript
1
698 commits
updated Oct 19, 2026
Interactive CLI for scaffolding full-stack projects with composable ML services — from
npx hatchkitto a deployed app on your own infrastructure in minutes.
Hatchkit turns the messy 2-week ritual of "start a new product" into a single guided command. It:
No vendor lock-in. Everything it spins up — your server, your Coolify, your GitHub repo, your DNS — stays yours.
# One-time: wire up credentials (GitHub, Coolify, Hetzner, DNS, …)
npx hatchkit setup
# See what's configured and what's next
npx hatchkit status
# Scaffold + deploy a new project
npx hatchkit create
That's it. You'll be walked through name → domain → features → ML → deploy target, then hatchkit will scaffold, commit, create the GitHub repo, provision DNS + server, and push the app to Coolify.
Every one of those questions also has a flag. Pass the answers you already know and only the rest get prompted, or add --yes to skip prompting entirely:
hatchkit create --yes --name blog --domain blog.example.com \
--surfaces fullstack --deployment-mode coolify --features analytics --public
Run hatchkit create --help for the full flag list, or see the commands reference.
New to the CLI? Run hatchkit explain for a one-page mental model covering every concept, command, and the canonical workflow.
| Command | What it does |
|---|---|
hatchkit setup | One-time onboarding — stores tokens in the OS keychain. Alias: init. |
hatchkit status | Show which providers are configured and what's the next best step. |
hatchkit doctor | Health-check every configured provider with a read-only API call + contextual fix hints on failures. |
hatchkit explain | Print the one-page mental model (concepts, commands, workflow). |
hatchkit create | Scaffold a new project and optionally deploy it end-to-end. Interactive by default; every prompt has a matching flag, and --yes makes it fully non-interactive. |
hatchkit update | Add features (workspaces, desktop, mobile, …) to a project already scaffolded. |
hatchkit add <project> [services] | Provision GlitchTip / Plausible / Listmonk + SES / email / search clients for an existing project. |
hatchkit signing org-init | One-time per dev machine — collect Apple Distribution .p12 / App Store Connect API key, Google Play service account JSON, Azure Trusted Signing service principal. |
hatchkit signing apply [project-dir] | Wire signed installers + store uploads: writes build-{windows,ios,android}.yml, rewrites bundle ID in package.json (electron-builder build) / capacitor.config.ts / android/app/build.gradle / strings.xml / MainActivity.java / project.pbxproj, mints the Apple Bundle ID + App record + provisioning profile via the ASC API, generates an Android upload keystore, pushes ~20 GitHub Actions secrets. Idempotent. Same flow runs via hatchkit add <project> signing. |
hatchkit mac-runner on|off|serve|run|status | Run a private repo's macOS and iOS jobs on this Mac, on demand, instead of GitHub's macOS runners. on sets the repo variable APPLE_RUNNER; serve hosts the queued jobs with a just-in-time runner and deregisters it after the runs finish. Artifacts, store uploads and draft releases stay in the same workflow. |
hatchkit gh-pages | Wire GitHub Pages for the current repo (static / Vite / Jekyll) with optional custom domain + DNS. |
hatchkit cloudflare | Wire Cloudflare Workers Static Assets for the current repo — free, unmetered asset requests. |
hatchkit keys show/push <project> | Read or push the dotenvx private key to Coolify. |
hatchkit config [add/reset] | Inspect or modify stored provider credentials. |
hatchkit completion <shell> | Print a zsh / bash / fish completion script. |
Full reference: Commands, or hatchkit help <command>.
┌──────────────────────────────────────────────┐
│ hatchkit create │
└──────────────────────────────────────────────┘
│
┌───────────────────────┼────────────────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Scaffold │ │ Infra │ │ ML │
│ │ │ │ │ │
│ starter → │ │ Terraform → │ │ Modal / │
│ your repo │ │ DNS + VPS │ │ RunPod / │
│ + GitHub │ │ + Coolify │ │ HF / … │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└───────────────────────┼────────────────────────┘
▼
https://your-domain.example
See Architecture for the deeper tour.
Agents (Claude Code, Cursor, Claude Desktop) can drive hatchkit without scraping CLI output:
hatchkit status --json → StatusSnapshot (providers, nextStep, suggested commands).hatchkit doctor --json → per-provider health with a hint[] array on failing checks (credential rotation URL, required scopes, the exact hatchkit config add <x> to re-run).hatchkit explain --json → full mental model (concepts, commands, workflows, state locations).hatchkit keys show <project> --json → { project, found, key }.SKILL.md at the repo root (plus .agents/skills/hatchkit/SKILL.md and .claude/skills/hatchkit/SKILL.md) tells agents when and how to reach for hatchkit.
The optional @hatchkit/mcp package exposes local CLI status and doctor tools. The mcp project feature generates a separate server for one app's public API. See the MCP guide and operator server README.
hatchkit completion zsh > ~/.zsh/completions/_hatchkit
hatchkit completion bash > /usr/local/etc/bash_completion.d/hatchkit
hatchkit completion fish > ~/.config/fish/completions/hatchkit.fish
| What | Where |
|---|---|
| Provider metadata (no secrets) | ~/<conf-dir>/config.json |
| Secrets (tokens, keys) | OS keychain, service hatchkit |
| Provisioned env blocks | ~/<conf-dir>/provisioned/<project>.{dev,prod}.env |
| Project manifest | <project>/.hatchkit.json |
HATCHKIT_CONF_DIR overrides the config directory.
Full docs live under docs/ and are published at https://hatchkit.trebeljahr.com/.
hatchkit gh-pages for static sites, SPAs, Jekyll docs, and Docusaurus docshatchkit cloudflare for static sites on CloudflareSource for those pages lives in docs/content/docs/.
hatchkit/
├─ cli/ # the npm package (published as `hatchkit`)
├─ mcp/ # @hatchkit/mcp — MCP server for agents
├─ starter/ # full-stack starter template (subtree-merged)
├─ infra/ # Terraform + Coolify automation (subtree-merged)
├─ services/ml/ # pre-built ML service templates
│ ├─ image-recognition/
│ ├─ subtitles/
│ ├─ 3d-extraction/
│ └─ background-removal/
├─ docs/ # Next.js/Fumadocs docs site — deployed to GitHub Pages
└─ .github/workflows/
├─ ci.yml # typecheck + lint + scaffold matrix
├─ gitleaks.yml # secret scanning
└─ deploy.yml # container build + deploy
# Install deps (monorepo)
pnpm install
# Run the CLI against the local source (tsx)
pnpm --filter hatchkit dev
# Typecheck + lint + scaffold test matrix
pnpm --filter hatchkit check
# Install locally as a global command
pnpm --filter hatchkit install-local
Clone the repo and you're set — starter/ and infra/ are in-tree
(previously git submodules; merged via git subtree).
git clone https://github.com/trebeljahr/hatchkit.git
Hatchkit handles scaffolding, providers, infrastructure, and deployment. These sibling tools cover asset and naming work that often happens before or beside a Hatchkit project.
conv3d — converts FBX, OBJ, and glTF assets to GLB and can emit typed React Three Fiber components for 3D, game, or asset-heavy starters.sprite-tools — builds game-ready 2D sprite assets with collision polygons, pivots, animation tags, palettes, atlases, and exports.name-checker — checks candidate names across trademarks, domains, socials, app stores, package registries, and code hosts before launch setup.gamedev-asset-library — catalogs free, permissively licensed game assets for Hatchkit games, prototypes, R3F scenes, and ML-backed asset workflows.MIT — see LICENSE.