Stacks Auto-Import System
Automatically makes functions, models, composables, and utilities available globally without explicit imports.
Key Paths
- Auto-import functions:
storage/framework/auto-imports/functions.ts
- Auto-import models:
storage/framework/auto-imports/models.ts
- Auto-import index:
storage/framework/auto-imports/index.ts
- Auto-import globals:
storage/framework/auto-imports/globals.ts
- Global type declarations:
storage/framework/auto-imports/globals.d.ts
- Browser manifest:
storage/framework/browser-auto-imports.json
- Server manifest:
storage/framework/server-auto-imports.json
- Browser type declarations:
storage/framework/types/browser-auto-imports.d.ts (~80KB)
- Server type declarations:
storage/framework/types/server-auto-imports.d.ts
- General auto-import types:
storage/framework/types/auto-imports.d.ts
How Auto-Imports Work
Browser Context (STX Templates)
storage/framework/browser-auto-imports.json defines available imports (200+ entries)
- Types are declared in
storage/framework/types/browser-auto-imports.d.ts
- STX plugin (
bun-plugin-stx) resolves imports at build time
- Available in STX
<script> tags without explicit import statements
Browser auto-import injection applies to the STX script entry being compiled.
TypeScript modules imported by that script do not inherit its lexical bindings.
Every imported module must explicitly import the functions, stores, and types it
uses. A generated ambient declaration proves an identifier is available to an
STX entry; it does not make that identifier global inside bundled dependencies.
Server Context (Routes, Actions, Jobs)
storage/framework/server-auto-imports.json defines server-side imports (100+ entries)
- Types are declared in
storage/framework/types/server-auto-imports.d.ts
- All 60+ ORM models are auto-imported as globals
- Available in any server-side TypeScript file
Runtime Injection
storage/framework/auto-imports/globals.ts injects functions into globalThis:
// Makes these available globally without imports:
globalThis.increment = increment
globalThis.count = count
globalThis.isDark = isDark
globalThis.toggleDark = toggleDark
// ... geo functions, GPX functions, etc.
What Gets Auto-Imported
Browser Auto-Imports (200+)
- Composables: useStorage, useLocalStorage, useFetch, useToggle, useCounter, useDark, useNow, etc.
- Utilities: debounce, throttle, retry, sleep, wait, delay, lazy, clamp, rand
- Authentication: useAuth, authGuard, auth
- Formatting: formatCurrency, formatDate, formatNumber, formatDuration
- Browser Query Builder: browserQuery, BrowserQueryBuilder, browserAuth, createBrowserModel
- Payment: confirmCardPayment, confirmPayment, createPaymentMethod, loadCardElement, loadPaymentElement
- Stripe: stripe instance
- Custom Functions: From
resources/functions/ (counter, dark mode, GPX, geo utilities)
Server Auto-Imports (100+)
- All ORM Models: User, Post, Author, Product, Order, Payment, Customer, etc. (97 models)
- Request Models: UserRequest, PostRequest, OrderRequest, etc.
- Actions: Action types and helpers
- Schema: validation schema builder
- Router: route, response helpers
- String Utilities: slug, camelCase, pascalCase, snakeCase, kebabCase, titleCase
- Core: path, storage, log, handleError, Auth, register
Auto-Import Type Declarations
auto-imports.d.ts (general)
declare global {
const Action: typeof import('@stacksjs/actions').Action
const response: typeof import('@stacksjs/router').response
const route: typeof import('@stacksjs/router').route
const schema: typeof import('@stacksjs/validation').schema
const slug: typeof import('@stacksjs/strings').slug
// ... all auto-imported identifiers
}
Adding Custom Auto-Imports
- Create function in
resources/functions/:
// resources/functions/myUtils.ts
export function myHelper() { return 'hello' }
- Export from
storage/framework/auto-imports/functions.ts:
export { myHelper } from '../../resources/functions/myUtils'
- Declare types in
storage/framework/auto-imports/globals.d.ts:
declare function myHelper(): string
- Inject at runtime in
storage/framework/auto-imports/globals.ts:
globalThis.myHelper = myHelper
Generation Commands
buddy generate # regenerate all auto-imports
buddy generate --types # regenerate type declarations
buddy generate --ide-helpers # regenerate IDE helpers
buddy generate:component-meta # regenerate component metadata
The build:reset script also regenerates auto-imports.
Server Auto-Import Initialization
import { initiateImports, generateAutoImportFiles, injectGlobalAutoImports } from '@stacksjs/server'
initiateImports() // initialize auto-import plugin
generateAutoImportFiles() // generate runtime auto-import files
injectGlobalAutoImports() // inject models/functions globally
Gotchas
- Browser auto-imports are resolved at BUILD TIME by bun-plugin-stx — not runtime
- Imported browser modules must declare their own imports; STX entry auto-imports do not leak into module scope
- Server auto-imports are injected into globalThis at RUNTIME
- The browser-auto-imports.d.ts file is ~80KB — it's auto-generated, don't edit manually
- Custom functions must be exported from both the function file AND the auto-imports barrel
- Type declarations must match the runtime globals for IDE support
- All 60+ ORM models are auto-imported on the server — available as
User.find(1) etc.
- Request models (e.g.,
UserRequest) are also auto-imported for validated request access
- Auto-imports are regenerated during
buddy generate and build:reset
- The discovered-packages.json file at
storage/framework/discovered-packages.json is part of this system
1---2name: stacks-auto-imports3description: Use when working with the Stacks auto-import system - understanding how browser and server auto-imports work, configuring auto-imported functions/models/composables, the auto-import manifests, type generation, or how globals are injected. Covers the auto-import pipeline at storage/framework/auto-imports/.4license: MIT5---67# Stacks Auto-Import System89Automatically makes functions, models, composables, and utilities available globally without explicit imports.1011## Key Paths12- Auto-import functions: `storage/framework/auto-imports/functions.ts`13- Auto-import models: `storage/framework/auto-imports/models.ts`14- Auto-import index: `storage/framework/auto-imports/index.ts`15- Auto-import globals: `storage/framework/auto-imports/globals.ts`16- Global type declarations: `storage/framework/auto-imports/globals.d.ts`17- Browser manifest: `storage/framework/browser-auto-imports.json`18- Server manifest: `storage/framework/server-auto-imports.json`19- Browser type declarations: `storage/framework/types/browser-auto-imports.d.ts` (~80KB)20- Server type declarations: `storage/framework/types/server-auto-imports.d.ts`21- General auto-import types: `storage/framework/types/auto-imports.d.ts`2223## How Auto-Imports Work2425### Browser Context (STX Templates)261. `storage/framework/browser-auto-imports.json` defines available imports (200+ entries)272. Types are declared in `storage/framework/types/browser-auto-imports.d.ts`283. STX plugin (`bun-plugin-stx`) resolves imports at build time294. Available in STX `<script>` tags without explicit `import` statements3031Browser auto-import injection applies to the STX script entry being compiled.32TypeScript modules imported by that script do not inherit its lexical bindings.33Every imported module must explicitly import the functions, stores, and types it34uses. A generated ambient declaration proves an identifier is available to an35STX entry; it does not make that identifier global inside bundled dependencies.3637### Server Context (Routes, Actions, Jobs)381. `storage/framework/server-auto-imports.json` defines server-side imports (100+ entries)392. Types are declared in `storage/framework/types/server-auto-imports.d.ts`403. All 60+ ORM models are auto-imported as globals414. Available in any server-side TypeScript file4243### Runtime Injection44`storage/framework/auto-imports/globals.ts` injects functions into `globalThis`:45```typescript46// Makes these available globally without imports:47globalThis.increment = increment48globalThis.count = count49globalThis.isDark = isDark50globalThis.toggleDark = toggleDark51// ... geo functions, GPX functions, etc.52```5354## What Gets Auto-Imported5556### Browser Auto-Imports (200+)57- **Composables**: useStorage, useLocalStorage, useFetch, useToggle, useCounter, useDark, useNow, etc.58- **Utilities**: debounce, throttle, retry, sleep, wait, delay, lazy, clamp, rand59- **Authentication**: useAuth, authGuard, auth60- **Formatting**: formatCurrency, formatDate, formatNumber, formatDuration61- **Browser Query Builder**: browserQuery, BrowserQueryBuilder, browserAuth, createBrowserModel62- **Payment**: confirmCardPayment, confirmPayment, createPaymentMethod, loadCardElement, loadPaymentElement63- **Stripe**: stripe instance64- **Custom Functions**: From `resources/functions/` (counter, dark mode, GPX, geo utilities)6566### Server Auto-Imports (100+)67- **All ORM Models**: User, Post, Author, Product, Order, Payment, Customer, etc. (97 models)68- **Request Models**: UserRequest, PostRequest, OrderRequest, etc.69- **Actions**: Action types and helpers70- **Schema**: validation schema builder71- **Router**: route, response helpers72- **String Utilities**: slug, camelCase, pascalCase, snakeCase, kebabCase, titleCase73- **Core**: path, storage, log, handleError, Auth, register7475## Auto-Import Type Declarations7677### auto-imports.d.ts (general)78```typescript79declare global {80 const Action: typeof import('@stacksjs/actions').Action81 const response: typeof import('@stacksjs/router').response82 const route: typeof import('@stacksjs/router').route83 const schema: typeof import('@stacksjs/validation').schema84 const slug: typeof import('@stacksjs/strings').slug85 // ... all auto-imported identifiers86}87```8889### Adding Custom Auto-Imports90911. Create function in `resources/functions/`:92```typescript93// resources/functions/myUtils.ts94export function myHelper() { return 'hello' }95```96972. Export from `storage/framework/auto-imports/functions.ts`:98```typescript99export { myHelper } from '../../resources/functions/myUtils'100```1011023. Declare types in `storage/framework/auto-imports/globals.d.ts`:103```typescript104declare function myHelper(): string105```1061074. Inject at runtime in `storage/framework/auto-imports/globals.ts`:108```typescript109globalThis.myHelper = myHelper110```111112## Generation Commands113114```bash115buddy generate # regenerate all auto-imports116buddy generate --types # regenerate type declarations117buddy generate --ide-helpers # regenerate IDE helpers118buddy generate:component-meta # regenerate component metadata119```120121The `build:reset` script also regenerates auto-imports.122123## Server Auto-Import Initialization124125```typescript126import { initiateImports, generateAutoImportFiles, injectGlobalAutoImports } from '@stacksjs/server'127128initiateImports() // initialize auto-import plugin129generateAutoImportFiles() // generate runtime auto-import files130injectGlobalAutoImports() // inject models/functions globally131```132133## Gotchas134- Browser auto-imports are resolved at BUILD TIME by bun-plugin-stx — not runtime135- Imported browser modules must declare their own imports; STX entry auto-imports do not leak into module scope136- Server auto-imports are injected into globalThis at RUNTIME137- The browser-auto-imports.d.ts file is ~80KB — it's auto-generated, don't edit manually138- Custom functions must be exported from both the function file AND the auto-imports barrel139- Type declarations must match the runtime globals for IDE support140- All 60+ ORM models are auto-imported on the server — available as `User.find(1)` etc.141- Request models (e.g., `UserRequest`) are also auto-imported for validated request access142- Auto-imports are regenerated during `buddy generate` and `build:reset`143- The discovered-packages.json file at `storage/framework/discovered-packages.json` is part of this system