The 22 built-in packs
paqad-ai 1.91.1 ships 22 stack packs: 19 framework packs and 3 archetype packs. A stack pack is a folder that describes one framework or project shape to Paqad (see What stack packs are). You do not install these separately. They are part of the package, in runtime/capabilities/coding/stacks/, one folder per pack.
That folder also holds _shared/, which is not a pack. It carries rules every coding stack receives (API design, CI/CD, environment and git rules). Paqad skips any folder whose name starts with _ or . when it looks for packs.
Framework packs
"Traits" are add-on libraries a pack knows about. "Test runners" are the test tools the pack tells Paqad how to run and read. Where a pack declares no test runner, paqad-ai doctor reports a warning for structured test output.
| Pack | Ecosystem | Traits declared | Test runners declared |
|---|---|---|---|
angular | node | tailwind | angular-test |
astro | node | tailwind | vitest |
django | python | django-rest | pytest |
dotnet (ASP.NET Core) | dotnet | blazor, ef-core, minimal-api, mvc, razor-pages, signalr, identity, azure | none |
express | node | tailwind | vitest |
fastapi | python | pydantic | pytest |
flask | python | sqlalchemy, celery, blueprints, flask-login, flask-restx, gunicorn | none |
flutter | dart | none | flutter-test |
go-web | go | gin | go-test |
kotlin-android | jvm | jetpack-compose, room, hilt, retrofit, coroutines, navigation, datastore | none |
laravel | php | inertia, boost, sail, pest, phpunit, react, vue, tailwind | pest, phpunit |
nestjs | node | prisma, typeorm, graphql, microservices, swagger, passport, fastify | none |
nextjs | node | app-router, pages-router, tailwind, prisma, trpc, next-auth | none |
rails | ruby | rspec | rspec |
react | node | next, remix, vite-spa, gatsby, tailwind | vitest, playwright |
rust-web | rust | axum | cargo-test |
spring-boot | jvm | junit | junit |
svelte | node | tailwind | vitest |
vue | node | nuxt, vite-spa, quasar, tailwind | vitest, playwright |
Three packs also ship trait-specific rule folders, used only when that trait is detected: laravel (boost, inertia, react, tailwind, vue), react (next, remix, vite-spa, gatsby) and vue (nuxt, quasar, vite-spa).
Archetype packs for Node.js projects
Archetype packs describe what kind of project you have when there is no framework to go by.
| Pack | Meant for | Traits declared | Test runners declared |
|---|---|---|---|
node-cli | Node.js command-line tools that ship a program through the bin field of package.json | typescript, vitest, jest, eslint, docker, monorepo | vitest, jest |
node-library | Node.js packages that publish a library (not a command-line tool and not a framework app) | typescript, vitest, jest, eslint, publishable, monorepo | vitest, jest |
node-service | Long-running Node.js services without a recognised framework, such as plain HTTP servers, queue workers and scheduled jobs | typescript, vitest, jest, eslint, docker, compose | vitest, jest |
How Paqad picks packs for your project
During paqad-ai onboard, stack detection works out your frameworks and records them in .paqad/project-profile.yaml under stack_profile.frameworks. Each framework name there selects the pack with the same name. A project can match more than one pack. Two combinations are simplified on purpose: a Next.js project gets nextjs and not react, and a NestJS project gets nestjs and not express. Detection itself is covered on Stack detection.
See which packs are active
paqad-ai packs list
Each line shows where the pack came from, its name and tier, its display name, whether an override is active and whether it matches the current project:
[built-in] laravel (framework) — Laravel override=false matched=true
Add --json for machine-readable output.
If your framework is not listed
No pack describes it, so Paqad has no framework-specific rules, test runner settings or stack MCP entries to give you for it. Paqad's base rules still apply. In 1.91.1 you cannot add a pack for a new framework name and have it matched to a project; a custom pack takes effect only when it overrides one of the 22 names above. Creating a custom stack pack explains what that allows.