| name | stacks-config |
| description | Use when working with Stacks configuration — the 44 config files, config helper functions, default values, environment-specific overrides, or the defineApp/defineDatabase/etc builder functions. Covers @stacksjs/config and the config/ directory. |
| license | MIT |
| compatibility | Bun >= 1.3.0, TypeScript |
| allowed-tools | Read Edit Write Bash Grep Glob |
Stacks Configuration
Key Paths
- Core package:
storage/framework/core/config/src/
- Configuration directory:
config/
- Defaults:
storage/framework/core/config/src/defaults.ts
- Overrides:
storage/framework/core/config/src/overrides.ts
Config API
import { config, getConfig } from '@stacksjs/config'
config.app.name
config.database
config.auth
getConfig()
Individual Config Exports
import { ai, analytics, app, auth, cache, cloud, cli, database, dns, docs, email, errors, git, hashing, library, logging, notification, payment, ports, queue, realtime, security, saas, searchEngine, services, filesystems, team, ui } from '@stacksjs/config'
Config Builder Functions
import { defineApp, defineDatabase, defineCache, defineEmail } from '@stacksjs/config'
export default defineApp({
name: 'My App',
env: 'production',
url: 'https://myapp.com'
}) satisfies AppConfig
All builders: defineApp, defineCache, defineCdn, defineChat, defineCli, defineDatabase, defineDependencies, defineDns, defineEmailConfig, defineEmail, defineGit, defineHashing, defineLibrary, defineNotification, definePayment, defineQueue, defineSearchEngine, defineSecurity, defineServices, defineSms, defineFilesystems, defineUi, defineModel, defineEvents
Helper Functions
determineAppEnv(): 'dev' | 'stage' | 'prod' | string
localUrl(): string — local development URL
All 44 Config Files
Core App
| File | Type | Key Settings |
|---|
app.ts | AppConfig | name, env, url, debug, key, timezone, locale |
auth.ts | AuthConfig | guards, providers, tokenExpiry(30d), tokenRotation(7d), passwordReset |
database.ts | DatabaseConfig | default driver, connections (sqlite/mysql/postgres/dynamodb), queryLogging |
cache.ts | CacheConfig | driver('memory'), ttl(3600), maxKeys(-1), redis config |
env.ts | EnvConfig | validation schemas for env vars |
stacks.ts | StackExtensionRegistry | extension definitions |
Services
| File | Type | Key Settings |
|---|
email.ts | EmailConfig | from, domain, mailboxes, server config, ports, categorization, default('ses') |
sms.ts | SmsConfig | enabled(false), provider('twilio'), drivers (twilio/vonage/pinpoint) |
notification.ts | NotificationConfig | default('email') |
payment.ts | PaymentConfig | driver('stripe'), stripe keys |
ai.ts | AiConfig | default model, AWS Bedrock models |
analytics.ts | AnalyticsConfig | driver('fathom'), tracking settings |
Infrastructure
| File | Type | Key Settings |
|---|
cloud.ts | CloudConfig | project, mode(server/serverless), environments, infrastructure |
dns.ts | DnsConfig | a, aaaa, cname, mx, txt records, nameservers |
queue.ts | QueueConfig | default('sync'), connections (sync/database/redis/sqs/memory) |
realtime.ts | RealtimeConfig | enabled(true), mode, driver, channels, WebSocket config |
search-engine.ts | SearchEngineConfig | driver('opensearch') |
Development
| File | Type | Key Settings |
|---|
ports.ts | Ports | frontend:3000, backend:3001, admin:3002, ... api:3008 |
lint.ts | PickierOptions | format rules, indent, quotes, semi |
git.ts | GitConfig | hooks, scopes, commit types |
commit.ts | UserConfig | cz-git conventional commit config |
logging.ts | LoggingConfig | logsPath, deploymentsPath |
docs.ts | BunPressOptions | docsDir, outDir, nav, sitemap |
Security
| File | Type | Key Settings |
|---|
security.ts | SecurityConfig | firewall (enabled, countryCodes, rateLimitPerMinute:500) |
hashing.ts | HashingConfig | driver('bcrypt'), bcrypt.rounds(12), argon2 config |
Features
| File | Type | Key Settings |
|---|
blog.ts | BlogConfig | subdomain, postsPerPage, enableComments/RSS/sitemap |
cms.ts | CmsConfig | content management settings |
saas.ts | SaasConfig | plans (Hobby/Pro/Lifetime with pricing), webhook, currencies |
ui.ts | HeadwindOptions | content, output, minify |
stx.ts | StxOptions | componentsDir, layoutsDir, partialsDir |
Data & Storage
| File | Type | Key Settings |
|---|
filesystems.ts | FilesystemsConfig | driver('bun'), root, s3 config, defaultVisibility('private') |
file-systems.ts | — | re-exports from filesystems.ts |
query-builder.ts | — | re-exports from qb.ts |
qb.ts | QueryBuilderConfig | dialect, timestamps, pagination, softDeletes, transactions |
Other
| File | Type | Key Settings |
|---|
buddy-bot.ts | BuddyBotConfig | repository, dashboard, workflows |
cli.ts | BinaryConfig | name, command, description |
deps.ts | PantryConfig | system dependencies (bun, sqlite, redis, etc.) |
errors.ts | ErrorConfig | comprehensive validation error messages |
library.ts | LibraryConfig | name, owner, webComponents, functions |
phone.ts | PhoneConfig | enabled, provider, businessHours |
services.ts | ServicesConfig | API keys for 20+ services |
team.ts | Team | name, members |
Default Values (from defaults.ts)
- App name:
'Stacks'
- Cache driver:
'memory'
- Database: SQLite at
database/stacks.sqlite
- Hashing: bcrypt, 12 rounds
- Auth token expiry: 30 days
- Ports: frontend 3000, backend 3001, admin 3002, api 3008
Gotchas
- Config files are TypeScript with
satisfies for type checking
- All configs support environment variable overrides via
env.*
- Framework provides defaults — user overrides in
~/config/*.ts
- Two duplicate file pairs:
file-systems.ts/filesystems.ts and query-builder.ts/qb.ts
- Config changes may require dev server restart
- The
services.ts file contains API keys for AWS, Stripe, Slack, Discord, OpenAI, Anthropic, etc.
- Lazy loading is used in config to avoid circular dependencies