Trusted by
Teams that run flisk up on their own code, listed with their consent. See all adopters or add yours.
Try it
With your AI agent
Install Flisk, then paste a prompt into your coding agent. Claude Code, Codex, Cursor, GitHub Copilot, and any other agent that can run commands will work. Every block below has a copy button.
npm install -g @flisk-sh/flisk
The prompt from the demo:
Build me a small online shop with a storefront and an orders API, and run it on my laptop with Flisk.
Your agent creates the project, adds each part, and starts it. If something is missing on your computer, flisk doctor tells it what to fix.
More prompts to copy
Add a service to a project you already have
Use Flisk to add a backend service called payments-api to my shop stack, then start the stack and give me the URLs.
Build an AI agent with tools and a database
Use Flisk to scaffold an AI agent, an MCP tools server, and a database in one stack called shop, then start it and tell me how to talk to the agent.
Something is not working
Run flisk doctor, explain every problem in plain words, and fix what you can. Then start my stack with flisk up.
See what is running
Use flisk status to tell me which services are running, which are unhealthy, and what URL each one has.
Stop everything
Stop my Flisk stack with flisk down and confirm nothing is left running.
Connect your agent to Flisk as an MCP server
Install the CLI, then add the Flisk MCP server to your agent's settings:
npm install -g @flisk-sh/flisk
{
"mcpServers": {
"flisk": { "command": "flisk", "args": ["mcp"] }
}
}
The agent can then start the stack, check status, restart a service, and read agent sessions through Flisk tools instead of shell commands. See use Flisk with your AI agent.
In your terminal
npm install -g @flisk-sh/flisk
mkdir my-shop && cd my-shop
flisk project --yes
flisk resource orders-api --type backend --stack shop --yes
flisk resource shop-web --type frontend --stack shop --yes
flisk up shop
You get an orders API and a storefront behind one local gateway, with Postgres and live reload. You need Docker, Tilt, Node.js 22.12+, and Bun 1.2+; flisk doctor checks your machine. Prefer to answer questions instead? npm init create-microservices my-project asks what to create. See the quick start for every option.
Stop letting AI hallucinate your local infrastructure.
LLMs are brilliant at writing application logic, but notoriously terrible at maintaining local infrastructure. Every time your AI rewrites a Dockerfile, misconfigures a Tiltfile, or breaks an nginx.conf, it wastes your developer focus and burns thousands of unnecessary API tokens.
Flisk CLI Core bridges the gap. You write the clean web application logic, and Flisk instantly autodetects your stack to generate, link, and orchestrate the local environment for you.
Build your app in one click
Fastest way (recommended): open the Flisk starter in a ready-to-use environment.
More build tools (6)
Deploy
More clouds and hosts (18)
Build app with your AI agent
More agents (7)
⚡ A one-backend stack is healthy in about 14 seconds
On a one-backend quickstart with warm image layers, flisk up reaches a healthy API in 12.8 to 13.8 seconds (timing notes). An 8-service stack settles in 32 to 42 seconds warm and about 4.5 minutes on its first cold build (benchmark). No vendor lock-in and no hand-written plumbing.
🤖 Run your AI agents next to your services
Flisk is the local runtime for agent systems: the agent, its MCP tools, its database, its queue, behind one gateway, one command.
flisk resource bot --type agent --stack shop --yes
flisk resource tools-mcp --type mcp --stack shop --yes
flisk up shop
Agents get durable checkpoint volumes that survive flisk down, sticky session routing via x-session-id, graceful SIGTERM drain during hot reloads, a Docker health check on /health, and application-level readiness checks on /ready. See the AI agents guide and honest comparison with agent frameworks.
What Flisk is: a local development runtime. Define each service in service.json and run flisk up. Docker runs the containers, Tilt live-updates them while you code, and Flisk writes the configuration both use. No local Kubernetes is needed.
What Flisk is not: a deploy tool or a Compose file. Production deployment stays with Helm, Argo CD, or Kustomize.
Stability: 1.x. The core CLI is MIT and needs no key; Premium is optional. See what Flisk writes and how to check for drift.
[!IMPORTANT]
Get Flisk from the flisk-sh/flisk repository, the
@flisk-sh/flisk npm package, or the
official website. Follow the installation links from these official sources.
A similar repository name or copied README does not establish that a download is official.
Why Flisk CLI?
- One
service.json per service. Flisk generates the Dockerfile, Traefik routing, and Tiltfile from it. You do not hand-write a docker-compose.yml or nginx.conf.
- Local stack without Kubernetes. Services run on Docker and Tilt on your machine. You do not need a local cluster such as kind or minikube.
- Hot reload while you code. Tilt live-updates the containers when files change.
- Generated files you can check.
flisk records the generated files and reports drift, so local config stays in sync. See generated files and drift checks.
| Scaffold a new service in one command | No | No | No | Yes (flisk resource) |
| Hot reload on file change | Partial (compose watch) | Partial (extra tooling) | Yes | Yes |
| Health-checked startup order | Yes (depends_on: condition: service_healthy) | Yes | Manual configuration | Yes |
| Ingress routing and Postgres included | No | No | No | Yes (Traefik + Postgres) |
| Start only one stack of a large system | Partial (profiles) | Manual | Manual | Yes (flisk up <stack>) |
See the detailed tool comparison for architectural tradeoffs, when each tool is the better choice, and migration workflows.
How Flisk works
- Describe each service in a
service.json next to its code.
- Run
flisk up <stack>. Flisk generates the local runtime files from those manifests: Dockerfiles, Traefik routing, and the Tiltfile.
- Docker runs the containers and Tilt watches them. Edit code and the containers live-update. Use
flisk ui to inspect running services, and flisk doctor or flisk config verify to check the environment and generated files.
Production deployment stays with your own tools (Helm, Argo CD, or Kustomize).
Everything is wired together, and stays in sync
You do not connect services by hand. Flisk derives each connection from the same service.json files and regenerates it when they change.
Add a service with flisk resource | It is discovered automatically and its stack is enabled on the next flisk up. It gets an image build, a Compose entry, gateway routes, a health check, and its own .autogenerated/ files. |
Edit a service.json (port, dependsOn, features) | The Dockerfile, Compose entry, Traefik labels, and nginx config are regenerated on the next flisk up. A hand edit to a generated file is caught as drift before anything starts. |
| Edit your code | Tilt live-updates the running container. No rebuild step. |
| Add a backend route | Frontends already point at the API through generated VITE_API_URL, env.ts, and api-client.ts, built from the same hostnames the gateway routes. |
| Add a database or a second backend | DATABASE_URL and the other connection settings are injected into each service's environment. No copying of passwords or hostnames. |
Run on a project with an older or missing .env | Missing secrets such as JWT_SECRET are generated without overwriting your values. |
Declare dependsOn | Services start in health-checked order. |
See how flisk up works for the full startup sequence.
What you can do with Flisk
| Start a new project | Creates the project and first services | flisk project --yes |
| Add a service | Writes its service.json and generated files | flisk resource <name> --type backend --stack <stack> --yes |
| Start a whole stack | Starts Postgres, your services, and the routing, and prints the URLs | flisk up <stack> |
| Preview before starting | Shows which services and URLs would start, without containers | flisk up <stack> --dry-run |
| Inspect running services | Opens an interactive terminal dashboard | flisk ui |
| Check your machine | Reports Docker, Tilt, and port readiness | flisk doctor |
| Catch config drift | Compares generated files with what Flisk last wrote | flisk config verify |
| Keep Flisk current | Upgrades the CLI in place | flisk upgrade |
Flisk works with:
- Runtimes & Frameworks: Bun, Node, Python, Go, Rust, React, Vue, Svelte, Elysia, Fastify, NestJS
- Databases & Tooling: Prisma, Drizzle, Atlas, Dbmate
- Messaging & Gateway: NATS, Traefik
Who uses Flisk
Teams that run flisk up on their own code (listed with their consent in ADOPTERS.md):
Using Flisk too? Tell us or add a row to ADOPTERS.md.
If Flisk saves you time, a ⭐ on this repo helps other developers find it.
Quick start
Get a running local stack in 3 commands. Works on macOS, Linux, and Windows (via WSL2).
Prerequisites (install once)
| Docker | Engine 25+, Compose 2.20.2+ | docker.com | All paths |
| Tilt | 0.25+ | curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash | All paths |
| Node.js | 22.12+ | nodejs.org | npm path (npm install -g @flisk-sh/flisk) |
| Bun | 1.2+ | curl -fsSL https://bun.sh/install | bash | Bun path (bun add -g @flisk-sh/flisk) |
Conditional prerequisites: Node.js is only required when you install Flisk via npm (npm install -g @flisk-sh/flisk). Bun is only required when you install via Bun or your project has generated JavaScript services. Docker and Tilt are required for every path.
Windows? Use WSL2 Ubuntu. See the Windows & WSL2 guide for the recommended setup.
Fastest path: one-command demo (no manual steps)
npm install -g @flisk-sh/flisk
flisk demo
That's it. The demo clones the starter into ~/.flisk/flisk-demo, installs dependencies, starts the stack, and opens the frontend in your browser. Press Ctrl+C to stop, then run flisk down to clean up.
Full control: manual project setup
If you want to build your own service structure:
npm install -g @flisk-sh/flisk
mkdir my-project && cd my-project
flisk project --yes
flisk resource api --type backend --stack main --yes
flisk up main
flisk up prints the URLs (e.g., http://api.main.localhost/api/api/health). Try it:
curl http://api.main.localhost/api/api/health
To add a frontend later:
flisk resource web --type frontend --stack main --yes
flisk up main
Alternative: guided scaffolder
Prefer interactive prompts? The create-microservices package asks for your service types and generates a ready project:
npm install -g @flisk-sh/flisk
npm init create-microservices my-project
cd my-project
flisk up main
To skip prompts and get a default api + web:
npm init create-microservices my-project -- --yes
See the create-microservices README for all options.
Verify it works
After flisk up, you'll see output like:
Flisk is up.
Tilt UI: http://localhost:10350
Services:
✓ api → http://api.main.localhost/api/api/health
✓ web → http://web.main.localhost
Stop: flisk down
Logs: flisk logs <service>
Next: flisk help # or visit https://flisk.sh/docs
- Tilt UI: Open to watch live updates, see logs, and debug
- Services: Click the URLs or curl the health endpoints
- Stop:
flisk down stops everything; containers persist for inspection
Common next steps
| See running services | flisk ui |
| Check environment health | flisk doctor |
| View service logs | flisk logs api |
| Restart a service | flisk restart api |
| Preview without starting | flisk up main --dry-run |
| Catch config drift | flisk config verify |
| Upgrade Flisk | flisk upgrade |
Troubleshooting
flisk doctor fails | Run the fix commands it prints, then retry |
| Port 80/5432 in use | flisk doctor shows the owner; stop it or set FLISK_HTTP_PORT |
| Docker not running | Start Docker Desktop / systemctl start docker |
| Windows native | Use WSL2 Ubuntu; see Windows guide |
flisk up refuses | Run flisk doctor first; it explains what's missing |
Full troubleshooting: docs/troubleshooting.md
What Flisk writes for you
You write one service.json per service. For the two-service shop above, Flisk writes the rest at three levels: the project, the stack, and each service.
my-shop/
├── .env # generated DB_PASSWORD and JWT_SECRET
├── .flisk/
│ ├── project.json # project settings (yours to edit)
│ └── .flisk-out/ # PROJECT LEVEL
│ ├── Tiltfile # what Tilt runs
│ ├── docker-compose.traefik.yml # local gateway, bound to 127.0.0.1
│ ├── golden-layers.Dockerfile # shared base image layers
│ ├── TILT_TECH_STACK.star # tech stack settings
│ ├── TILT_RESOURCE_DEFAULTS.star # service defaults
│ ├── spec.master # project spec by stack
│ └── flisk-cli-ext/ # pinned copy of the Flisk engine
├── shared-platform-engineering/
│ └── docker-templates/ # container entrypoint scripts
└── services/
├── platform/database-management/
│ └── docker-compose.yml # Postgres 16
└── shop/
├── .autogenerated/ # STACK LEVEL
│ └── docker-compose.app.autogenerated.yml # every service in the stack
├── orders-api/
│ ├── service.json # you write this
│ └── .autogenerated/ # SERVICE LEVEL: 14 files
└── shop-web/
├── service.json # you write this
└── .autogenerated/ # SERVICE LEVEL: 18 files
The stack's Compose file is the part you would otherwise write by hand. For these two services it holds the image builds, environment, 33 Traefik routing labels, four networks, health checks, and CPU and memory limits. An excerpt:
orders-api:
environment:
- DATABASE_URL=postgresql://my_shop:${DB_PASSWORD}@my_shop_postgres:5432/my_shop_shop?schema=public
- JWT_SECRET=${JWT_SECRET:?JWT_SECRET is not set. Run `flisk up` ...}
labels:
- "traefik.http.routers.orders-api-project.rule=Host(`api.my-shop.localhost`) && PathPrefix(`/api/orders`)"
- "traefik.http.middlewares.orders-api-strip-prefix-project.stripprefix.prefixes=/api/orders"
- "traefik.http.services.orders-api.loadbalancer.healthcheck.path=/health"
healthcheck:
test: ["CMD", "curl", "-f", "--max-time", "5", "http://localhost:4000/health"]
Secrets come from the project .env by default: flisk project generates a random database password and JWT secret, and .env is added to .gitignore. Set FLISK_SECRET_PROVIDER=infisical to read secrets from Infisical instead (environment).
Every file in each service's .autogenerated/ folder
shop-web/.autogenerated/
├── Dockerfile.app.autogenerated # app image
├── Dockerfile.app.autogenerated.dockerignore # build context
├── nginx.autogenerated.conf # serves the build, routes API requests
├── vite.config.frontend.autogenerated.ts # dev server
├── vite.config.build.autogenerated.ts # production build
├── tsconfig.autogenerated.json # TypeScript, host
├── tsconfig.docker.autogenerated.json # TypeScript, container
├── .npmrc.autogenerated # package registry, host
├── .npmrc.docker.autogenerated # package registry, container
├── bunfig.autogenerated.toml # Bun settings, host
├── bunfig.docker.autogenerated.toml # Bun settings, container
├── .env.frontend.autogenerated # frontend environment
├── env.ts # API URL for your imports
├── api-client.ts # client for the frontend's API route
├── api-index.ts # re-exports the client and URL
├── service.yaml # Tilt's projection of service.json
├── validation-report.autogenerated.json # preflight validation result
├── AGENTS.md # tells coding agents not to edit here
└── .flisk-contract/ # snapshots for drift checks
orders-api/.autogenerated/
├── Dockerfile.app.autogenerated # app image
├── Dockerfile.app.autogenerated.dockerignore # build context
├── vite.config.backend.autogenerated.ts # server build
├── prisma.config.autogenerated.ts # database client
├── tsconfig.autogenerated.json # TypeScript, host
├── tsconfig.docker.autogenerated.json # TypeScript, container
├── .npmrc.autogenerated # package registry, host
├── .npmrc.docker.autogenerated # package registry, container
├── bunfig.autogenerated.toml # Bun settings, host
├── bunfig.docker.autogenerated.toml # Bun settings, container
├── .env.backend.autogenerated # backend environment
├── service.yaml # Tilt's projection of service.json
├── validation-report.autogenerated.json # preflight validation result
├── AGENTS.md # tells coding agents not to edit here
└── .flisk-contract/ # snapshots for drift checks
A stack with a database migrator also gets docker-compose.migrator.autogenerated.yml in the stack folder, and the migrator gets its own Dockerfile.migrator.autogenerated.
You never write an nginx config, a Dockerfile, a Compose file, or Traefik labels for this stack. flisk up regenerates these files when service.json changes and refuses to start if one was edited by hand. Python, Go, and Rust services, and optional features such as Playwright, get their own sets; the generated-files guide lists them and explains the drift checks.
If Helm, Compose, or your existing Tilt setup already gives you a working local environment, keep using it. Flisk CLI is for engineers managing several services who want a clear local service contract and one command to start the stack.
See how Flisk compares to alternative dev tools, how Flisk CLI works alongside Helm, the service schema, and the project configuration schema.
Terminal UI
Use flisk ui to inspect stacks and resources. Arrow keys or j/k move the
selection; g/G or Home/End jump to the first/last item, and PageUp/PageDown
move one visible page. / searches; navigation letters remain search text
while searching. Press 1–5 to jump between tabs. The selected row stays
visible when the terminal is resized. See docs/ui.md for every key binding.
Update Flisk
Keep Flisk up to date to get the latest bug fixes:
flisk upgrade
flisk update is an alias for the same command. If you installed with npm, you can also run npm install -g @flisk-sh/flisk@latest. To pin a version or read what changed, see upgrading and version pinning.
Examples
Runnable examples show Flisk on real stacks. Start with the smallest one:
Use Flisk with your AI agent
The repository ships five agent skills for common Flisk work under .agents/skills: flisk-doctor (environment checks), flisk-up (preview and start a stack), flisk-resource (create a service), flisk-status (health and URLs), and flisk-troubleshoot (fixing flisk and Tilt errors). Agents working in this repo also follow AGENTS.md. Use these skills to let your agent check your setup and explain failures instead of guessing at Docker or Tilt configuration.
Installation
Install the CLI from npm (requires Node.js 22.12+) or use the prebuilt binary (no Node.js or Bun required):
npm install -g @flisk-sh/flisk
curl -fsSL https://flisk.sh/install.sh | sh
Public npm is the recommended default. To install through GitHub Packages instead, configure registry authentication as described in GitHub Packages installation.
flisk up shop --dry-run previews selected local services and URLs before starting containers. The default starter is Bun/TypeScript; Flisk's core role is running local containers through Docker + Tilt, not providing a Node.js application framework. See the one-backend example.
When not to use Flisk
- Your existing Compose or Tilt workflow already gives you a working local environment.
- Helm is your whole development workflow and you do not want local services on Docker.
- You do not want
service.json manifests and generated local configuration.
Troubleshooting
Set FLISK_DEBUG=1 before running flisk up --verbose to include Starlark debug logs in Tilt output.
Docs
History
Flisk development began on 21 April 2026. The archived, read-only flisk-sh/flisk
repository records its first commit
("Initial commit: Flisk specs, generators, CLI, and standards") from that day. A separate flisk-cli history spanning 21 April to
18 September 2026 was imported into this repository as 306 filtered
commits. Those commits are now ancestors of main; the import did not change the source tree.
This flisk repository was created on 19 September 2026, and the @flisk-sh/flisk npm package was first
published on 21 September 2026. Those dates describe the current repository and package, not the start of Flisk development.
Requirements and support
For the local runtime, install Docker (Desktop, OrbStack, or Colima; Engine 25+, Compose 2.20.2+) and Tilt. Bun 1.2+ is used by the default generated services. Flisk selects host ports from bounded fallback ranges for HTTP, HTTPS, and Postgres; set FLISK_HTTP_PORT, FLISK_HTTPS_PORT, or FLISK_POSTGRES_PORT to override them. Dev ports listen on 127.0.0.1 only, so other machines on your network cannot reach them. Set FLISK_BIND_ADDRESS (for example 0.0.0.0, to test from a phone) to change that; flisk doctor warns when it is a wildcard address. Flisk supports macOS, Linux, and Windows through WSL2 Ubuntu; native Windows supports CLI inspection only (flisk --version, flisk doctor, flisk up --dry-run). flisk up exits with a clear refusal pointing to WSL2. See the Windows & WSL2 guide for the recommended setup, prerequisites, verification steps, and troubleshooting.
On native Windows, flisk --version, flisk doctor, and flisk up --dry-run are inspect-only commands. flisk up exits 1 with “Landscape startup needs Ubuntu on WSL2. Native Windows is inspect-only.”
License matrix
flisk up, scaffold, Traefik, Postgres, Tilt live update, golden layers | yes | yes |
| Verdaccio, DDD scaffold, Sablier idle stop | no | key |
| Playwright, C4, AGENTS.md | free if generated in-repo | only if the implementation is downloaded with a key |
Core stays free. Premium is a separate key for the extras above; no key required to run flisk up.
Ecosystem map: examples, articles, related tools, and notes live in awesome-tdk-framework. Star this repo (flisk) if the CLI is what you run; use the awesome list to browse the rest.
Share: X · Bluesky · Threads · Mastodon · Reddit · Hacker News · Facebook · LinkedIn · Telegram · WhatsApp · Email
FAQ
Do I need Kubernetes?
No. Flisk runs your services with Docker and Tilt on your machine. It does not need a local cluster such as kind or minikube, and it does not replace Helm, Compose, or your production deployment tools.
Do I need a license key?
No. Core CLI is MIT and needs no key to run flisk up. Premium extras are optional and use a separate key (see the license matrix).
Which platforms are supported?
macOS and Linux are supported directly. Windows is supported through WSL2 Ubuntu; native Windows supports CLI inspection only (flisk --version, flisk doctor, flisk up --dry-run). See Requirements and support and the Windows & WSL2 guide for the recommended setup, prerequisites, verification steps, and troubleshooting.
Does Flisk send my code anywhere?
Flisk runs the local stack on your machine. For network calls, secrets, and supply-chain details, see security: network calls, secrets and supply chain.
Can I keep using Compose, Helm, or my own Tilt setup?
Yes. If your existing setup already gives you a working local environment, keep using it. See working alongside Helm and gradual adoption for adding Flisk to an existing repository.
What should I do if I hit a bug?
Update first; a recent release may already fix it. Run flisk upgrade (also available as flisk update), or:
npm install -g @flisk-sh/flisk@latest
Then run flisk doctor and retry the same task. If the problem persists, open an issue with your Flisk version, operating system, steps to reproduce, and the error output. See upgrading and version pinning and troubleshooting.
Contributing and license
Contributions are welcome. First step: say hello on Discord, tell us what you want to work on, and we will point you to a good first task. Then start with CONTRIBUTING.md and the contributor guide. For the project structure, see the architecture and repository map. To review pull requests, see Review a pull request. Report security issues using SECURITY.md.
Contributors
Thank you to everyone who has shipped code, docs, and fixes to Flisk since July 2026. Every merged change makes the local stack better for the next developer.
Flisk is MIT-licensed; see LICENSE. The license boundary says which code is MIT and which is downloaded with a key.
Project governance: GOVERNANCE.md, MAINTAINERS.md, ADOPTERS.md.
Using Flisk in Slack or Discord? Get the Flisk green thunder emoji (SVG and PNG, MIT).