Flisk

io.github.flisk-sh由 GitHub 账号 flisk-sh 发布v1.4.40更新于 Nov 7, 2026

Run your whole app on your computer with one command: build, start, check and fix a local stack.

概览

AI 生成的概览

把 Flisk 命令行封装为 23 个工具,让助手能搭建、启动、查看和停止本地多服务开发栈。

可以做什么
  • 检查机器与项目:doctor、runtime_check、project_info、config_verify、config_explain
  • 创建与导入项目和服 务:project_init、project_templates、project_import、resource_create、stack_assign、project_eject
  • 运行整个栈:up、down、status、logs、network_list
  • 查看并操作服务:resource_list、resource_restart、resource_run、stack_list
  • 处理 AI 智能体服务:agent_list、agent_sessions
  • 根据项目清单重新生成配置文件
适用场景
适用于用 Flisk 构建的项目:希望助手代为创建服务、启动本地栈、查出各服务地址、读取日志、重启出问题的服务,或诊断环境问题,而无需手写 Docker、Tilt 或网关配置。
运行要求
以本地 stdio 进程运行,来自 npm 包 @flisk-sh/flisk,需要 Node.js 22.12+ 以及应用自身所用的运行时。Docker 与 Tilt 路径还需 Docker Engine 25+、Compose 2.20.2+ 和 Tilt 0.25+。原生 Windows 上运行 Docker 栈需要 WSL2 Ubuntu。导入 compose 文件首次运行需要联网。
安装前请注意
多个工具会改动项目或机器:up 和 down 启停服务,resource_restart 与 resource_run 会执行命令,resource_create、stack_assign、project_init、project_import 会写入文件,config_regenerate 在 dryRun 为 false 时会丢弃生成文件中的手工修改。project_import 未设 dryRun 时会直接写入。DB_PASSWORD、JWT_SECRET 等生成的密钥存放在项目的 .env 中。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Flisk,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

[The Flisk ecosystem: bring an app (Rust, Go, Python, TypeScript, JVM, Ruby, PHP) from a Compose file, a Tiltfile, a Dockerfile or any image; flisk up runs 77 building blocks: 5 languages, 10 web frameworks, 10 API frameworks, 10 resource types, 8 data and AI services, 23 MCP tools and 11 starter projects; export writes render.yaml or wrangler.toml; a radar watches every running part]

What is Flisk?

Flisk is a command-line tool for local development. It runs every part of your app (API, website, workers, AI agents, database) on your computer with one command. Docker is optional: a small app runs as plain local processes, and a bigger one gets containers, one address in front of every part and live reload on Docker and Tilt. Have a docker-compose.yml? flisk import reads it. Otherwise describe each part in a small service.json; for the Docker path Flisk writes the Dockerfiles, the Compose file and the Tiltfile from it, and keeps them in sync. An MCP server lets your AI agent run it too. It does not deploy: production stays with your own tools.

Try it first. One command, nothing to install except Node.js 22.12+, and no Docker needed:

bash
npx @flisk-sh/flisk demo

With Docker running and Tilt installed, that starts the full restaurant demo: six services, Postgres, one gateway and live reload. Without them (or on native Windows), it starts a small menu app as two local processes in about a second and opens it in your browser. You should see the menu at http://localhost:3000, with its API answering at http://localhost:4000/api/menu. flisk down in the demo folder stops either one.

On Windows, the full app runs in Ubuntu on WSL2: follow Start here on Windows.

Want to choose your own stack? Answer a few questions with the arrow keys and Enter, and Flisk writes a project that runs:

bash
npx @flisk-sh/flisk create

It offers every website framework, API language and starter that Flisk's generators know, read from the generators themselves (type to filter a long list), and the default runs on your computer with no Docker, no Tilt and no database: it writes a website and an API with the real flisk resource --local command, then you npm install in each and run flisk up. Pick "I know what I want: let me choose every part" to choose the framework and language yourself, or to add a worker, a queue (NATS, RabbitMQ), Redis, Qdrant, MinIO or an AI agent (those run with Docker and Tilt). The project name comes last and Enter takes my-app; a review shows what will be created and which programs it needs before anything is written. Add --dry-run to see the commands it would run, or flags such as --frontend vue --backend fastify --yes to skip the questions in a script.

Install Flisk with npm install -g @flisk-sh/flisk, then, in a new folder:

bash
mkdir my-shop && cd my-shopflisk project --yesflisk resource orders-api --type backend --stack shop --yesflisk resource shop-web --type frontend --stack shop --yesflisk up shop

That starts an orders API and a storefront behind one gateway, with Postgres and live reload, and prints their URLs. It needs Docker, Tilt, Node.js 22.12+ and Bun 1.2+; flisk doctor says what is missing. A small app can skip Docker and run as local processes.

Two ways in: flisk project starts a new app from scratch (above); flisk import starts from an app you already have. Already have a Compose file? npx @flisk-sh/flisk import . && npx @flisk-sh/flisk up (add --dry-run to import to preview).

[Four flisk commands create a project, an API, and a website, then start them]

One small file per service

flisk resource wrote a service.json for each part. This is the whole file for the orders API, and the only configuration you edit for it:

json
{  "$schema": "https://flisk.sh/schema.service.json",  "schemaVersion": 1,  "appName": "orders-api",  "appType": "backend",  "stack": "shop",  "port": 4000,  "healthCheckPath": "/health"}

From it Flisk writes the Dockerfile, the Compose entry, the gateway route, the health check and the DATABASE_URL, and refuses to start if one of those files was edited by hand. Every field · Everything Flisk writes

Already have a docker-compose.yml?

flisk import . writes one service.json per Compose service and keeps its ports, names and env values:

bash
flisk import .flisk up

On Windows: a Compose app runs its services as containers, so do both steps inside Ubuntu on WSL2, not in PowerShell. Clone the app into your Ubuntu home folder (~/, not /mnt/c or D:\), turn on Docker Desktop's WSL integration for Ubuntu, and install Node and Tilt in Ubuntu: Start here on Windows.

A plain Compose app (a Node API and Postgres) answered through Flisk's router 49 s after flisk import on a clean Ubuntu CI runner, images pulled and built from scratch, install not counted (run, claims). CI repeats it on every pull request.

Rather ask your AI helper? It runs these commands for you: copy a prompt. Never written code? Start here, step by step · Words you'll see

Key features

  • One service.json per service. Flisk generates the Dockerfile, the Compose entry, the Traefik routes, the health check and the Tiltfile from it. You do not hand-write a docker-compose.yml or nginx.conf.
  • One command, one address. flisk up starts Postgres, your services and a local gateway, starts services in health-checked dependsOn order, and prints a *.localhost URL for each.
  • Hot reload while you code. Tilt live-updates a container when you save its files; there is no rebuild step.
  • Wired for you. DATABASE_URL, the API URL your frontend calls, and missing secrets such as JWT_SECRET are generated and injected, never copied by hand.
  • Generated files you can check. Flisk records what it wrote, refuses to start when a generated file was edited by hand, and flisk config verify reports drift (generated files and drift checks).
  • Built for AI helpers. flisk mcp gives Claude Code, Codex, Cursor and other agents 23 tools, and flisk project adds the Flisk skills and an AGENTS.md.
  • Runs AI agents too. Agent services get durable checkpoints, sticky x-session-id routing, and /health and /ready checks (below).
  • No Kubernetes; no Docker for small apps. Docker and Tilt run the stack without a local cluster such as kind or minikube, and services that each declare a command run as plain local processes.
  • Quick to start. With warm image layers, a one-backend stack is healthy 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).
  • Free core. The CLI is MIT and needs no key to run flisk up; Premium extras are optional (license matrix).

Is Flisk right for your team?

Not sure Flisk fits? Answer three questions for a plain-English score and the reasons behind it, or use the calculator on flisk.sh.

Trusted by

Teams that run flisk up on their own code, listed with their consent. See all adopters or add yours.

Use Flisk with your AI agent

AI helpers are good at writing the app and bad at the setup around it: every time one rewrites a Dockerfile, a Tiltfile or an nginx.conf by hand, something breaks, and you pay in time and tokens to fix it. Flisk writes that setup the same way every time, so you and your helper stick to the app.

[Claude Code, running in the Warp terminal, builds a small online shop with Flisk and runs it locally]

An illustrative Claude Code session in the Warp terminal. The Flisk commands, their output, and the URLs Flisk prints come from a real run.

Install Flisk, then paste the prompt into Claude Code, Codex, Cursor or any other AI helper that can run commands:

bash
npm install -g @flisk-sh/flisk
text
Build me a small online shop with a storefront and an orders API, and run it on my laptop with Flisk.

The helper creates the project, adds each part and starts it, then gives you the links to open. If something is missing, flisk doctor says what, in plain words.

More prompts to copy

Add a service to a project you already have

text
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

text
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

text
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

text
Use flisk status to tell me which services are running, which are unhealthy, and what URL each one has.

Stop everything

text
Stop my Flisk stack with flisk down and confirm nothing is left running.

Pick your agent

Each helper installs a little differently; pick yours for the exact steps. Already have a project? flisk connect claude (or cursor, codex) adds the flisk mcp server (23 tools) and the Flisk skills where that agent reads them; add --dry-run to see the files first. What the agent can then do: Flisk for AI agents.

[Claude Code in a terminal, ~/my-shop]
[Claude Code (selected)][Codex][Cursor][3 agents]
bash
curl -fsSL https://claude.ai/install.sh | bashnpm install -g @flisk-sh/flisk

Then start Claude Code by typing claude in your project folder, and paste the prompt above. For developers: flisk project writes the Flisk skills to .claude/skills/, which Claude Code loads. To let Claude Code drive Flisk through MCP tools, run claude mcp add --scope project flisk -- flisk mcp. Windows install, the .mcp.json file and the AGENTS.md tip: full Claude Code setup.

[Claude Code input: Build me a small online shop with a storefront and an orders API…]

Any other agent that can run terminal commands works too: point it at AGENTS.md, or connect it to flisk mcp, which runs an MCP server over stdio. flisk project adds the Flisk skills (build a stack, recipes for a shop, a SaaS, an AI agent and a blog, doctor, up, resource, status, troubleshoot; source in .agents/skills) and an AGENTS.md to your project, so the agent checks your setup and explains failures instead of guessing at Docker or Tilt configuration. More prompts by category are in the prompt gallery.

No terminal at hand? Open the Flisk starter in GitHub Codespaces or Gitpod, or pick another one-click option.

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.

bash
# Scaffold an agent, an MCP tools server, and a database in one stackflisk resource bot --type agent --stack shop --yesflisk resource tools-mcp --type mcp --stack shop --yesflisk 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.

Prerequisites (install once)

ToolVersionInstallNeeded for
Your app's runtimewhatever your app usesNode.js, Python, Go, Bun, ...Every path: it runs your code
Node.js22.12+nodejs.orgnpm install (npm install -g @flisk-sh/flisk)
DockerEngine 25+, Compose 2.20.2+docker.comDocker + Tilt path only
Tilt0.25+curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bashDocker + Tilt path only
Bun1.2+curl -fsSL https://bun.sh/install | bashBun install (bun add -g @flisk-sh/flisk), or generated JavaScript services

Two ways to run. A project whose services each declare a command runs them as local processes: you need only Flisk and your app's runtime (simplest path). A database, one gateway URL for every service, or the same container you deploy need Docker and Tilt. flisk doctor checks only what your project uses.

Set up your machine. Pick your system:

[macOS window: flisk up — ~/my-shop]
[macOS (selected)][Ubuntu][Windows (WSL2)][Omarchy][4 systems]

Get your Mac ready once. Paste each grey box into the terminal (press Cmd+Space, type Terminal, press Enter) and press Enter.

1. Node.js 22.12+ from nodejs.org, plus your app's own language if it is not JavaScript. That is all a small app needs: the simplest path.

2. Only for bigger apps (a database, one address in front of every part, or the same container you deploy): start Docker Desktop, OrbStack or Colima, and install Tilt:

bash
curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh \  | bash

3. Install Flisk and check your Mac:

bash
npm install -g @flisk-sh/fliskflisk doctor

flisk doctor checks only what your project uses and prints a fix for anything missing. Full steps: macOS setup.

[2 services healthy in 0.8 s · no Docker · Apple M1 · 16 GB · flisk 1.4.7]

Installation

Install the CLI with npm, with Bun, as a prebuilt binary that needs no Node.js or Bun, or run it from its container image:

[npm (selected)][Bun][Prebuilt binary][Container image][4 ways to install]
bash
npm install -g @flisk-sh/flisk

This downloads Flisk with npm, which comes with Node.js 22.12+. Check it with flisk --version: it prints a version number. Update later with flisk upgrade. Pinning a version and uninstalling: install with npm.

For developers: public npm is the recommended default; to install through GitHub Packages instead, configure registry authentication as described in GitHub Packages installation.

Update later with flisk upgrade (or its alias flisk update), or npm install -g @flisk-sh/flisk@latest. To pin a version or read what changed, see upgrading and version pinning.

[!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.

Quick start

The commands under What is Flisk? are the whole quick start, once the prerequisites are in place. This section is the long version: the other ways to start, what to expect, and what Flisk writes. Never used a terminal? Start here instead.

Pick how to start

Four ways to get your app running: the simplest one, a one-command demo, a project you set up by hand, and a guided setup that asks you questions. The simplest is below; each tab opens its own page.

[Simplest (selected)][One-command demo][Full control][Guided setup][4 ways to start]

Run your app on your own computer with one command, without Docker. This path fits an app made of a few parts that each start with one command, for example a back end (an API), a website and a worker. You need only Flisk and the program that runs your code, such as Node.js.

For developers: each service runs as a local process. You need only Flisk and your app's runtime.

1. Install Flisk. Paste this into your terminal and press Enter:

bash
npm install -g @flisk-sh/flisk

2. Describe each part. Put a small settings file called service.json in each part's folder (next to each service). It tells Flisk the part's name, the command that starts it and the port it listens on. This one is for the back end:

json
{  "schemaVersion": 1,  "appName": "api",  "appType": "backend",  "command": "node server.js",  "port": 4000,  "healthCheckPath": "/health"}

This one is for the website. "dependsOn": ["api"] means "start the back end first":

json
{  "schemaVersion": 1,  "appName": "web",  "appType": "frontend",  "command": "node server.js",  "port": 3000,  "dependsOn": ["api"]}

3. Start everything. In the terminal, go to your project folder and run:

bash
flisk up

What you will see: Flisk starts the API, waits until it answers, then starts the website. It prints both URLs (the web addresses to open in your browser; they are localhost links, so only you can see them). Each line of output starts with the name of the part that wrote it. If a part crashes, Flisk starts it again.

To stop, press Ctrl+C (hold Control and press C), or run flisk down. No Docker, no Tilt, no generated files. See Run your app without Docker for every field, and for when to switch to the full stack with a database and one gateway URL (one web address for every part).

Verify it works

For the shop at the top of this page, flisk up shop first lists what it starts and where:

text
Starting 2 services from stack "shop"...  - orders-api  - shop-web
🌍 Frontend URLs:  - shop-web: http://app.my-shop.localhost/shop-web/health
🔧 Backend API URLs:  - orders-api: http://api.my-shop.localhost/api/orders/healthHost ports: HTTP 80, HTTPS 443, Postgres 15432

Then Tilt builds and starts the containers, and flisk up ends with Flisk is up. and the Tilt dashboard address, http://localhost:10350, where each service turns green when it is healthy. Your host ports can differ: when 80 or 5432 is busy, Flisk picks a free one and the URLs include it. flisk down stops everything. Every command you will use next is under Commands.

Troubleshooting

IssueFix
flisk doctor failsRun the fix commands it prints, then retry
Port 80/5432 in useflisk doctor shows the owner; stop it or set FLISK_HTTP_PORT
Docker not runningStart Docker Desktop / systemctl start docker
Windows nativeLocal processes and flisk demo work; for the Docker stack use WSL2 Ubuntu, see Windows guide
flisk up refusesRun flisk doctor first; it explains what's missing

Full troubleshooting: docs/troubleshooting.md

Set FLISK_DEBUG=1 before running flisk up --verbose to include Starlark debug logs in Tilt output.

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.

text
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:

yaml
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
text
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
text
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.

See how Flisk compares to alternative dev tools, how Flisk CLI works alongside Helm, the service schema, and the project configuration schema.

Commands

The commands you will use every day:

You want toFlisk doesCommand
Pick a stack with a few questionsAsks what you are building and writes a project that runs (on your computer by default)flisk create
Start a new projectCreates the project and first servicesflisk project --yes
Add a serviceWrites its service.json and generated filesflisk resource <name> --type backend --stack <stack> --yes
Start a whole stackStarts Postgres, your services, and the routing, and prints the URLsflisk up <stack>
Preview before startingShows which services and URLs would start, without containersflisk up <stack> --dry-run
Inspect running servicesOpens an interactive terminal dashboardflisk ui
Check your machineReports Docker, Tilt, and port readinessflisk doctor
Catch config driftCompares generated files with what Flisk last wroteflisk config verify
Read one service's logsPrints its recent log linesflisk logs --service <name>
Restart one serviceRestarts it in the running stackflisk restart <name>
Stop everythingStops every service in the stackflisk down
Keep Flisk currentUpgrades the CLI in placeflisk upgrade

Commands take --help, and --json prints one JSON object for scripts and agents (machine-readable output). The same actions are MCP tools through flisk mcp. Every command and flag: cheat sheet.

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

Configuration

You edit three kinds of files; Flisk writes everything else and checks it for hand edits.

FileWhat it holdsReference
service.json, one per serviceName, type, stack, port, health check, dependsOn, a command to run it as a local process, and optional featuresEvery field
.flisk/project.jsonThe project name and which stacks each phase enables; flisk project creates itProject settings
.envSecrets such as DB_PASSWORD and JWT_SECRET; flisk project generates them and adds .env to .gitignoreEnvironment

Flisk selects host ports from bounded fallback ranges for HTTP, HTTPS, and Postgres, and dev ports listen on 127.0.0.1 only, so other machines on your network cannot reach them. These environment variables change that and more:

VariableWhat it does
FLISK_HTTP_PORT, FLISK_HTTPS_PORT, FLISK_POSTGRES_PORTPin the host port for the gateway (HTTP, HTTPS) or Postgres
FLISK_BIND_ADDRESSThe address dev ports listen on, 127.0.0.1 by default. 0.0.0.0 lets you test from a phone; flisk doctor warns when it is a wildcard address
FLISK_SECRET_PROVIDERinfisical reads secrets from Infisical instead of .env
TILT_PORTThe Tilt UI port, 10350 by default
FLISK_DEBUG1, with flisk up --verbose, adds Starlark debug logs to the Tilt output

Editor autocomplete and validation for both JSON files: configuration and editor schemas.

How Flisk works

  1. Describe each service in a service.json next to its code.
  2. Run flisk up <stack>. Flisk generates the local runtime files from those manifests: Dockerfiles, Traefik routing, and the Tiltfile.
  3. 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.

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.

When you...Flisk updates
Add a service with flisk resourceIt 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 codeTilt live-updates the running container. No rebuild step.
Add a backend routeFrontends 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 backendDATABASE_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 .envMissing secrets such as JWT_SECRET are generated without overwriting your values.
Declare dependsOnServices start in health-checked order.

See how flisk up works for the full startup sequence.

Why Flisk CLI?

How Flisk compares, in 10 categories with two tools each. Pick a tab:

Docker Compose and Tilt are tools developers use to start the parts of an app on their computer. Compose runs containers from a YAML settings file you write. Tilt watches your files and live-updates the running app as you save them, from a Tiltfile you write. Flisk writes both files for you from one small service.json per service (per part of your app), then runs Tilt.

Docker ComposeTiltFlisk
Scaffold a new service in one commandPartial (docker init writes a Dockerfile and compose file)NoYes (flisk resource)
Hot reload on file changePartial (compose watch)Yes (live_update)Yes (generated Tilt live_update)
Health-checked startup orderYes (depends_on: condition: service_healthy)Yes (resource_deps, written by hand)Yes (from dependsOn)
Gateway URL per service and Postgres includedNo (you add them)No (you add them)Yes (Traefik *.localhost and Postgres)
Start one stack of a large systemPartial (profiles)Yes (tilt up <resource>)Yes (flisk up <stack>)
Config you write by handcompose.yamlTiltfile (Starlark)service.json only; the rest is generated and drift-checked

Where they are stronger

  • Compose is the simpler choice for two or three services you already containerized, and it needs no Tilt.
  • Tilt gives full control when you are happy to write and maintain a Tiltfile, and it also targets Kubernetes.

Use them together. Flisk generates a Compose file and a Tiltfile and runs them with Docker and Tilt, so the generated files stay readable with flisk config explain.

See the detailed tool comparison for architectural tradeoffs, when each tool is the better choice, and migration workflows.

Examples

Runnable examples show Flisk on real stacks. Start with the smallest one:

ExampleWhat it shows
one-backendOne Bun/TypeScript backend with Postgres
one-backend-pythonA Python backend in the same local stack
one-backend-helmWorking alongside Helm
byoBringing your own existing resources
byo-jobsBring-your-own jobs
flisk-exampleA full multi-service stack

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.

Requirements and support

For the Docker + Tilt path, install Docker (Desktop, OrbStack, or Colima; Engine 25+, Compose 2.20.2+) and Tilt. Bun 1.2+ is used by the default generated services. Ports and other settings: Configuration.

Flisk supports macOS, Linux, and Windows. On native Windows, flisk demo and projects whose services each declare a command run as local processes; the Docker stack runs through WSL2 Ubuntu, and flisk up on a Docker project exits 1 with “Landscape startup needs Ubuntu on WSL2.” See the Windows & WSL2 guide for the recommended setup, prerequisites, verification steps, and troubleshooting.

Roadmap

For the next 12 months Flisk plans to keep 1.x stable (flisk up, scaffolding, generated files and flisk config verify stay backward compatible), keep the core free, keep Windows and WSL2 working, keep hardening the supply chain, keep the docs current, and add maintainers. It does not plan to deploy to production or to target Kubernetes. The full plan, and how to propose a change: ROADMAP.md.

License matrix

CapabilityFreePremium
flisk up, scaffold, Traefik, Postgres, Tilt live update, golden layersyesyes
Verdaccio, DDD scaffold, Sablier idle stopnokey
Playwright, C4, AGENTS.mdfree if generated in-repoonly 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.

Stability: 1.x.

FAQ

I have never written code. Is Flisk for me?

Yes, if you build with an AI helper like Claude Code, Codex or Cursor. You describe the app; the helper writes it and uses Flisk to run it on your computer. Start here walks you through it step by step, and Words you'll see explains the terms. You will paste a few commands into a terminal, but you do not need to write any code.

Does it cost anything?

The Flisk command-line tool is free and open source (MIT); optional Premium extras need a key (see the license matrix). Your AI helper has its own plans and prices. Bigger apps also use Docker Desktop, which is free for personal use and small companies.

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. On Windows, flisk demo and local-process projects run natively; the Docker stack runs through WSL2 Ubuntu, and native Windows can still inspect it (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:

bash
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.

Docs

Community

[Flisk on Product Hunt] [flisk-sh%2Fflisk | Trendshift]

Ecosystem map: examples, articles, related tools, and notes live in awesome-flisk-framework.

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.

[flisk] Using Flisk in Slack or Discord? Get the Flisk green thunder emoji (SVG and PNG, MIT).

来源:README.md,提交 b6fd104

工具

23

doctor

Check whether this machine can run the Flisk stack (Docker, Tilt, ports). Read-only. Optionally set projectPath to include checks for a specific Flisk project. Returns data.ready and data.host.canUp; run it before `up`. For the state of a running stack use `status`; for whether generated files are consistent use `config_verify`.

输入参数noPingprojectPath

up

Start the stack (or part of it) detached from the optional projectPath and return without waiting for it to be ready. Poll `status` for data.tilt.readiness.ready. Fails fast on an unknown service, an unsupported host, or a Tilt already running.

输入参数onlyforcestackdryRunprojectPathwaitSeconds

down

Stop the running stack, optionally selecting its project with projectPath. It stops the running services and does not edit the project's files. Use `status` first to see whether a stack is running, set dryRun to preview, and start it again with `up`.

输入参数dryRunprojectPath

status

Show the live state of the stack: its stacks, resources, their ingress URLs and container ports, the stack-level ports, and Tilt readiness (data.tilt.readiness: ready, pending, failures, enabled; null when no Tilt answers). Read-only. Poll it after `up`. For the services a project defines whether or not they run use `resource_list`; for URLs only use `network_list`; for host checks use `doctor`. Optionally select the project with projectPath.

输入参数projectPath

logs

A bounded snapshot of recent logs from the running stack (default the last 200 lines, at most 10000), returned as text. Read-only. Optionally select the project with projectPath. Not a stream: call it again for newer lines. Use `status` first to find which service is failing, then pass services to narrow the output.

输入参数tailsinceservicesprojectPath

resource_list

List the selected project's services (resources) with their stack, type and port, whether or not they are running. Read-only. Use `status` for live state, `stack_list` to group them by stack and `agent_list` for agents only. Set projectPath when the MCP server is not running from the project root.

输入参数stackprojectPath

resource_restart

Restart one running resource in the stack (or trigger its rebuild); the other resources are not touched. It needs a running stack: start one with `up`. Names come from `resource_list`. Set projectPath when the MCP server is not running from the project root.

输入参数resourceprojectPath

resource_run

Run a one-off command (a seed script, a status check, printenv) with the environment one resource has in the stack, and return its exit code, stdout and stderr (the last 64 KB of each). A container resource must be running (start it with `up`); a local-process resource runs from its folder. No input is passed. Names come from `resource_list`. Set projectPath when the MCP server is not running from the project root.

输入参数command必填resource必填projectPath

agent_list

List AI agent resources (appType: 'agent') in the project with their stack, runtime, durability and port. Read-only. Use `resource_list` for every resource type, and `agent_sessions` to inspect one agent's sessions. Set projectPath when the MCP server is not running from the project root.

输入参数stackprojectPath

agent_sessions

List the sessions of a running AI agent resource (id, last activity, status, checkpoint size), or read one session's checkpoint when sessionId is set. Set projectPath when the MCP server is not running from the project root.

输入参数resource必填sessionIdprojectPath

stack_list

List the project's stacks with their resource counts. Read-only. Use `resource_list` for the resources themselves. Set services to include each stack's service names, and verbose for its description. Set projectPath when the MCP server is not running from the project root.

输入参数verboseservicesprojectPath

project_info

Project root, whether the generated master files exist (data.configured, data.missingFiles), and resource and stack counts. Read-only; a quick first call to learn whether a folder is a configured Flisk project. Use `config_verify` to check that the generated files match, and `status` for the running stack. Set projectPath when the MCP server is not running from the project root.

输入参数projectPath

project_templates

List the starter templates project_init can clone (data.templates): each one's key, repo, description and, for a template pinned to a commit, the ref it checks out. Read-only; the same rows as `flisk project --list --json`. Pass a key as project_init's template.

无需输入参数。

network_list

The Traefik URL of every frontend and API service, with its base path, port and whether it answers (running, stopped). Read-only. Use it to find where to open a service; use `status` for full readiness. Set projectPath when the MCP server is not running from the project root.

输入参数stackprojectPath

config_verify

Check that the generated files match .flisk/project.json and that every service.json is valid. Returns data.valid, data.errors, data.warnings and data.diffs; a drifted generated file is fixed with config_regenerate. Set projectPath when the MCP server is not running from the project root.

输入参数projectPath

config_explain

Explain one project file: whether Flisk generated it or the user owns it, its source, whether it is edited now, whether editing it blocks `up`, and what to edit instead. Run it before editing a file you did not write. Set projectPath when the MCP server is not running from the project root.

输入参数file必填projectPath

runtime_check

Read-only. Check that the installed Flisk CLI has its bundled runtime assets (engine, templates). Returns ok, assetRoot and what is missing; a source checkout reports ok: false because the assets exist only in a packaged install. projectPath is optional: a project-local install under its node_modules is checked too.

输入参数projectPath

config_regenerate

Regenerate the master config files in .flisk/.flisk-out/ from .flisk/project.json. A dry run by default, which returns the planned changes as text; set dryRun to false to write them, which discards hand edits in those generated files. Set projectPath when the MCP server is not running from the project root.

输入参数dryRunprojectPath

resource_create

Scaffold a new service (service.json, Dockerfile, source and a test) with `flisk resource <name> --yes`, or register an existing directory that already has a service.json. Returns the command's text output. Without stack it uses the only existing stack or `main`, and fails when several stacks exist. Do not call it again for a resource that already exists: that rewrites its service.json and can assign it a new port (check with resource_list first). Call `up` afterwards to start it. Set projectPath when the MCP server is not running from the project root.

输入参数name必填porttypelocalstackruntimefeatureslanguageframeworkdurabilityprojectPath

stack_assign

Assign resources that have no stack yet to a stack (writes `stack` into their service.json). A resource already in a stack is refused. Returns the command's text output. Set projectPath when the MCP server is not running from the project root.

输入参数stack必填resources必填projectPath

project_init

Create a Flisk project with `flisk project --yes`: in projectPath (an existing directory; default the server's directory) write .flisk/project.json and generate its files, or, with template, clone a starter project into a new directory there (then call project_init again with projectPath set to the clone to configure it). Inside an existing project it refreshes that project's generated files instead and never overwrites its project.json. Returns the command's text output.

输入参数pathtemplateagentSkillsprojectPath

project_eject

Write EJECTED.md with `flisk eject --json`: it lists the generated Tilt files and how to run the stack with plain Tilt, and copies, moves or deletes nothing. It changes the project, so it is refused unless confirm is true; dryRun returns the plan (data.generatedFiles, data.created) without confirm. Set projectPath when the MCP server is not running from the project root.

输入参数dryRunconfirmprojectPath

project_import

Import the services in a directory's root docker-compose.yml as bring-your-own service.json files with `flisk import --json`, which runs the pinned flisk-import from npm (the first run needs network access). It writes without asking: set dryRun to get the plan only, and force to overwrite an existing service.json. Returns data.written and the importer's output. Set projectPath when the MCP server is not running from the project root.

输入参数dirforcedryRunprojectPath

版本历史

9
  1. v1.4.40最新Nov 7, 2026
  2. v1.4.33Nov 3, 2026
  3. v1.4.32Nov 3, 2026
  4. v1.4.29Nov 1, 2026
  5. v1.4.28Nov 1, 2026
  6. v1.4.25Nov 1, 2026
  7. v1.4.23Oct 31, 2026
  8. v1.4.17Oct 30, 2026
  9. v1.4.14Oct 29, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分