Find popular tech stacks. Have your agent build it.
Explore stacks for new projects and fragments to add to existing ones. See what developers are using and how often their projects pass verification. Pick a setup, then let Claude Code, Codex, or Cursor build from its brief and check the result with stacks verify.
Agent + stacks
DemoBuild an expense tracker with a React dashboard and a Python API. Keep it local for now.
I’ll look for a stack that covers the API, frontend, and tests.
●Bash(stacks list --json)
{ "entries": [
{ "id": "python-react",
"name": "Python API + React SPA", … },
…
] }Output abbreviated
●Bash(stacks show python-react --json)
{ "id": "python-react",
"name": "Python API + React SPA",
"deps": { "backend": ["fastapi", "uvicorn", …],
"frontend": ["react", "react-dom", …] }, … }Output abbreviated
Python + React looks like a good fit. It pairs a FastAPI backend with a React dashboard and a typed API client.
What’s included in that stack, and what is it well set up for?
Here’s what it gives us: • API: FastAPI, Pydantic validation, and uv for Python dependencies. • Frontend: React Router, TanStack Query, Tailwind, and shadcn/ui. • API client: generated from OpenAPI, so frontend calls follow the backend’s types. • Checks: Ruff, mypy, ESLint, TypeScript, pytest, Vitest, and Playwright. It’s well suited to dashboards and internal tools with a Python API. For your expense tracker, that gives us a place for the forms, API routes, and tests. Database and auth aren’t included by default; we can add those when needed. Shall I set up the local starter?
Yes, use that stack. Set it up.
●Bash(stacks new python-react expense-tracker --sandbox --json)
{ "stack": "python-react", "preset": "sandbox",
"brief": ".stacks/BRIEF.md",
"written": ["AGENTS.md", "Makefile", …], … }Output abbreviated
●Read(expense-tracker/.stacks/BRIEF.md)
Build the FastAPI backend and React frontend. Generate the API client from OpenAPI. Run stacks verify; fix failures without weakening checks.
Output abbreviated
I’m following the brief to create the backend, frontend, and tests, including a working request from React to the API. I’ll generate the API client and run the checks before starting the servers.
●Write(expense-tracker/backend/app/main.py)
from fastapi import FastAPI
…
def create_app() -> FastAPI:
app = FastAPI(lifespan=lifespan)
app.include_router(router)
return app
…Output abbreviated
●Write(expense-tracker/frontend/app/root.tsx)
import { Outlet } from "react-router";
…
export default function App() {
return <QueryClientProvider client={queryClient}>
<Outlet />
</QueryClientProvider>;
}Output abbreviated
●Bash(cd expense-tracker && make install && make generate-api)
Dependencies installed with uv and bun. OpenAPI spec and typed client generated.
●Bash(stacks verify)
✓ lint, typecheck, test ✓ api-contract, readme-filled ✓ API health and frontend respond Verification passed
●Bash(make dev)background
API http://localhost:8000 Web http://localhost:5173
The starter is running at localhost:5173, with the API on port 8000. Next, I can add the expense entry form and dashboard on this foundation.
Example agent conversation. Playback can be paused.
From an empty folder to a running dev server in minutes
On your own, a new project starts with research: which framework, which test runner, which config format is current. Then you walk the agent through bootstrapping and fix what it skipped. With a stack, the research is already done by people who built the same thing, and you can see what's in it before you start.
- Research frameworks and libraries1 h 15 min
- Pick versions and wire config45 min
- Prompt the agent and correct it1 h 20 min
- Add tests, lint, and CI40 min
Estimated agent setup to first green verify for Expo app + Hono API
See what's inside before you pick
Every stack lists the dependencies agents actually installed in reporting projects. See which dependencies appear most often before choosing a stack.
Share of mobile-expo projects with each dependency. Suppressed shares are not shown as numbers.
Start with a stack that fits.
The stacks CLI
Keep the coding agent you already use. Give it a stack with the setup decisions made and a way to check its work.
- 01
Find the right starting point
Your agent reads the available stacks and explains which one fits. You make the call.
stacks list --json - 02
Build from a shared brief
Stacks writes the tools, layout, and checks into a project brief. Your agent follows it to build the app.
stacks new <stack-id> <directory> --sandbox --json - 03
Check the result
The agent runs the declared checks and fixes failures before handing the project back to you.
stacks verify
Try the CLI
npx @steamfield/stacks list --jsonThe CLI never calls a model. It writes the brief and checks the result; your agent does the building.
What are you building?
Weekly data table
Published preset counts per UTC week. Suppressed counts are excluded, not zero.
| Week ending | Stack | Projects |
|---|---|---|
| 2026-07-05 | Expo app + Hono API | 560 |
| 2026-07-05 | TypeScript HTTP API with Effect | 505 |
| 2026-07-05 | SvelteKit app on Node | 505 |
| 2026-07-05 | TypeScript CLI with Effect | 460 |
| 2026-07-05 | Go CLI | 90 |
| 2026-07-05 | 9 more stacks | 840 |
| 2026-07-12 | Expo app + Hono API | 905 |
| 2026-07-12 | TypeScript HTTP API with Effect | 850 |
| 2026-07-12 | SvelteKit app on Node | 740 |
| 2026-07-12 | TypeScript CLI with Effect | 695 |
| 2026-07-12 | Go CLI | 160 |
| 2026-07-12 | 9 more stacks | 1455 |
| 2026-07-19 | Expo app + Hono API | 1200 |
| 2026-07-19 | TypeScript HTTP API with Effect | 1105 |
| 2026-07-19 | SvelteKit app on Node | 1155 |
| 2026-07-19 | TypeScript CLI with Effect | 1080 |
| 2026-07-19 | Go CLI | 205 |
| 2026-07-19 | 9 more stacks | 2035 |
| 2026-07-26 | Expo app + Hono API | 1525 |
| 2026-07-26 | TypeScript HTTP API with Effect | 1400 |
| 2026-07-26 | SvelteKit app on Node | 1345 |
| 2026-07-26 | TypeScript CLI with Effect | 1245 |
| 2026-07-26 | Go CLI | 265 |
| 2026-07-26 | 9 more stacks | 2575 |
| 2026-08-02 | Expo app + Hono API | 1625 |
| 2026-08-02 | TypeScript HTTP API with Effect | 1440 |
| 2026-08-02 | SvelteKit app on Node | 1465 |
| 2026-08-02 | TypeScript CLI with Effect | 1440 |
| 2026-08-02 | Go CLI | 285 |
| 2026-08-02 | 9 more stacks | 2705 |
| 2026-08-09 | Expo app + Hono API | 1780 |
| 2026-08-09 | TypeScript HTTP API with Effect | 1740 |
| 2026-08-09 | SvelteKit app on Node | 1450 |
| 2026-08-09 | TypeScript CLI with Effect | 1500 |
| 2026-08-09 | Go CLI | 325 |
| 2026-08-09 | 9 more stacks | 2865 |
| 2026-08-16 | Expo app + Hono API | 1975 |
| 2026-08-16 | TypeScript HTTP API with Effect | 1840 |
| 2026-08-16 | SvelteKit app on Node | 1640 |
| 2026-08-16 | TypeScript CLI with Effect | 1600 |
| 2026-08-16 | Go CLI | 340 |
| 2026-08-16 | 9 more stacks | 3075 |
| 2026-08-23 | Expo app + Hono API | 2095 |
| 2026-08-23 | TypeScript HTTP API with Effect | 1945 |
| 2026-08-23 | SvelteKit app on Node | 1740 |
| 2026-08-23 | TypeScript CLI with Effect | 1730 |
| 2026-08-23 | Go CLI | 375 |
| 2026-08-23 | 9 more stacks | 3240 |
| 2026-08-30 | Expo app + Hono API | 2145 |
| 2026-08-30 | TypeScript HTTP API with Effect | 2075 |
| 2026-08-30 | SvelteKit app on Node | 1855 |
| 2026-08-30 | TypeScript CLI with Effect | 1860 |
| 2026-08-30 | Go CLI | 435 |
| 2026-08-30 | 9 more stacks | 3430 |
| 2026-09-06 | Expo app + Hono API | 2225 |
| 2026-09-06 | TypeScript HTTP API with Effect | 2060 |
| 2026-09-06 | SvelteKit app on Node | 1905 |
| 2026-09-06 | TypeScript CLI with Effect | 1990 |
| 2026-09-06 | Go CLI | 525 |
| 2026-09-06 | 9 more stacks | 3695 |
| 2026-09-13 | Expo app + Hono API | 2445 |
| 2026-09-13 | TypeScript HTTP API with Effect | 2260 |
| 2026-09-13 | SvelteKit app on Node | 2220 |
| 2026-09-13 | TypeScript CLI with Effect | 2090 |
| 2026-09-13 | Go CLI | 615 |
| 2026-09-13 | 9 more stacks | 3805 |
| 2026-09-20 | Expo app + Hono API | 2500 |
| 2026-09-20 | TypeScript HTTP API with Effect | 2335 |
| 2026-09-20 | SvelteKit app on Node | 2255 |
| 2026-09-20 | TypeScript CLI with Effect | 2085 |
| 2026-09-20 | Go CLI | 760 |
| 2026-09-20 | 9 more stacks | 4080 |
| 2026-09-27 | Expo app + Hono API | 2665 |
| 2026-09-27 | TypeScript HTTP API with Effect | 2370 |
| 2026-09-27 | SvelteKit app on Node | 2370 |
| 2026-09-27 | TypeScript CLI with Effect | 2085 |
| 2026-09-27 | Go CLI | 855 |
| 2026-09-27 | 9 more stacks | 4360 |
| 2026-10-04 | Expo app + Hono API | 2660 |
| 2026-10-04 | TypeScript HTTP API with Effect | 2580 |
| 2026-10-04 | SvelteKit app on Node | 2460 |
| 2026-10-04 | TypeScript CLI with Effect | 2445 |
| 2026-10-04 | Go CLI | 1105 |
| 2026-10-04 | 9 more stacks | 4475 |
| 2026-10-11 | Expo app + Hono API | 2900 |
| 2026-10-11 | TypeScript HTTP API with Effect | 2850 |
| 2026-10-11 | SvelteKit app on Node | 2510 |
| 2026-10-11 | TypeScript CLI with Effect | 2380 |
| 2026-10-11 | Go CLI | 1210 |
| 2026-10-11 | 9 more stacks | 4210 |
| 2026-10-18 | Expo app + Hono API | 3000 |
| 2026-10-18 | TypeScript HTTP API with Effect | 2890 |
| 2026-10-18 | SvelteKit app on Node | 2850 |
| 2026-10-18 | TypeScript CLI with Effect | 2525 |
| 2026-10-18 | Go CLI | 1400 |
| 2026-10-18 | 9 more stacks | 4115 |
| 2026-10-25 | Expo app + Hono API | 3175 |
| 2026-10-25 | TypeScript HTTP API with Effect | 2950 |
| 2026-10-25 | SvelteKit app on Node | 2595 |
| 2026-10-25 | TypeScript CLI with Effect | 2755 |
| 2026-10-25 | Go CLI | 1440 |
| 2026-10-25 | 9 more stacks | 3755 |
| Most started, last 28 days | Projects |
|---|---|
| Expo app + Hono API | 11,210 |
| TypeScript HTTP API with Effect | 10,530 |
| SvelteKit app on Node | 9,740 |
| TypeScript CLI with Effect | 9,325 |
| Go CLI | 5,030 |
| 9 more stacks | 14,650 |
npx @steamfield/stacks new mobile-expoDecide the setup once.
A stack records how a project should be built. Your agent turns that plan into a working project, with the tools and checks already chosen.
See the agent workflow- Tools and layout
- The stack specifies the framework, project structure, and conventions. The agent follows the same plan each time you start a project.
- Current dependencies
- The agent resolves current versions and configures them together in your workspace. The stack describes the choices without pinning a snapshot of generated files.
- A checked result
- The stack lists the required checks. stacks verify runs them and reports what passed and what still needs work.
Popular and reliable are different lists
Projects started and successful verification tell you different things. Compare each stack's green rate with its interval and sample before choosing what to build.
Outcome data table
| Stack | Projects, 28 days | Green rate |
|---|---|---|
| Expo app + Hono API | 11,210 | 79% (78–80%, n=7,085) |
| TypeScript HTTP API with Effect | 10,530 | hidden: too few projects |
| SvelteKit app on Node | 9,740 | hidden: too few projects |
| TypeScript CLI with Effect | 9,325 | hidden: too few projects |
| Go CLI | 5,030 | 67% (66–69%, n=3,430) |
| Python API + React SPA | 4,390 | 86% (85–87%, n=2,750) |
| Go HTTP API | 3,940 | 74% (73–76%, n=2,470) |
| Next.js app on Node | 3,615 | hidden: too few projects |
| Astro blog | 2,565 | 69% (67–72%, n=1,625) |
| React Router on Cloudflare Workers | 40 | 71% (54–83%, n=35) |
| Astro site + Effect API | 35 | hidden: too few projects |
| React Router with Effect | 30 | hidden: too few projects |
| FastAPI service (Python API) | 25 | hidden: too few projects |
| Tauri desktop app with React | 10 | hidden: too few projects |
What it isn't
- A template engine
- Only files that never change between versions ship with a stack. Everything else is written down as decisions.
- An agent
- The CLI never calls a model and never runs a command from a stack. Your agent does the work.
- A package manager
- Stacks don’t pin versions. Picking current ones is the agent’s job, on purpose.
- A migration tool
- stacks add puts a fragment like CI or Postgres into an existing repo. It won’t restructure what’s there.
See what's in the registry before you install anything.
npx @steamfield/stacks listComputed 31 Oct 2026, through 30 Oct 2026. Numbers describe stacks projects, not the ecosystem.