| name | stacks-configuration |
| description | Use when setting up or modifying Stacks project-level configuration — bunfig.toml preload order, the tsconfig chain and TypeScript 7 / tsgo type checking, workspace configuration, .env setup, package.json scripts, system requirements (Bun >= 1.3.0, SQLite >= 3.47.2), or the project bootstrap process. For individual feature configs (database, email, auth, etc.), see the specific package skills instead. |
| license | MIT |
| compatibility | Bun >= 1.3.0, TypeScript |
| allowed-tools | Read Edit Write Bash Grep Glob |
Stacks Project Configuration
Project-level configuration files that control the development environment, build system, and runtime. For feature-specific configs (database, email, auth, etc.), see the corresponding package skill.
bunfig.toml
preload = [
"./storage/framework/core/env/plugin.ts",
"./storage/framework/defaults/resources/plugins/preloader.ts",
]
[test]
preload = [
"./storage/framework/core/env/plugin.ts",
"./tests/setup.ts",
]
coverage = false
[run]
bun = true
[serve.static]
plugins = ["bun-plugin-stx"]
[install]
registry = { url = "https://registry.npmjs.org/", token = "$BUN_AUTH_TOKEN" }
linker = "hoisted"
See stacks-plugins for what each preloaded module does, and why some commands
deliberately skip the auto-import graph.
TypeScript
There is exactly one tsconfig in the project root. It extends the framework's
app config, and restates the tunable defaults so you can edit or delete any one
of them:
tsconfig.json <- yours; the only one in the root
extends storage/framework/tsconfig.app.json <- app paths, include/exclude
extends storage/framework/tsconfig.base.json <- every compiler option
- Change a line in the root
compilerOptions to override that option.
- Delete a line to fall back to the framework default.
- Delete the whole block to take the defaults wholesale.
Path aliases, module resolution, and which files get checked are owned by the
framework and update with it.
Framework internals are checked separately by
storage/framework/tsconfig.framework.json - do not point your root config at
storage/framework/**.
bun run typecheck:app
bun run typecheck
bun run typecheck:clean
Type checking runs on TypeScript 7 - tsc is the native Go compiler (tsgo), so
both checks finish in a couple of seconds. Options removed in 7.0 (baseUrl,
importsNotUsedAsValues, preserveValueImports, suppressImplicitAnyIndexErrors)
are gone from every config; path mappings resolve relative to the file that
declares them, so no baseUrl is needed.
Incremental build info lands in storage/framework/.cache/typescript/, not in
node_modules, so it survives a reinstall.
package.json (Root)
Key sections:
{
"type": "module",
"workspaces": [
"storage/framework/**",
"!**/node_modules/**",
"!**/dist/**",
"!**/docs/deps/**",
"!storage/framework/server/storage/**",
"!storage/framework/cache/**"
],
"engines": {
"bun": ">=1.3.0"
},
"systemDependencies": {
"sqlite": ">=3.47.2"
}
}
.env Setup
APP_NAME=MyApp
APP_ENV=local
APP_KEY=
APP_URL=http://localhost:3000
DB_CONNECTION=sqlite
DB_DATABASE=database/stacks.sqlite
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
STRIPE_SECRET_KEY=
MAIL_MAILER=ses
System Requirements
- Bun >= 1.3.0 (runtime + package manager)
- SQLite >= 3.47.2 (default database)
Key Project Scripts
bun run dev
bun run build
bun run lint
bun run test
bun run deploy
bun run fresh
bun run build:reset
better-dx Integration
- Provides
typescript, pickier, bun-plugin-dtsx as peer dependencies
- Do NOT install these separately if
better-dx is in package.json
- REQUIRES
linker = "hoisted" in bunfig.toml
Gotchas
bunfig.toml MUST have linker = "hoisted" when better-dx is installed
- Preload order is load-bearing — the env plugin decrypts
.env before the
preloader reads it. Swapping them breaks encrypted config
- The stx plugin belongs under
[serve.static], not [serve]
- One tsconfig in the root. Adding a second (a
tsconfig.framework.json, say)
splits the source of truth. Point scripts at the framework's config by path
instead
- Workspace excludes prevent
node_modules and dist from being treated as packages
.env is auto-loaded by Bun — no dotenv package needed
- Generate APP_KEY before deployment:
buddy key:generate