---
title: Configuration
sort: 140
section-id: getting-started
keywords: configuration, velox.config.ts, settings, options, defineConfig
description: Complete reference for velox.config.ts and all available configuration options
language: en
---
# Configuration
Velox is configured through a single `velox.config.ts` file at the root of your project. This file is evaluated at build time (and at dev-server startup) to determine how Velox should compile and serve your application.
## Creating the Config File
If you used `create-velox` to scaffold your project, a `velox.config.ts` is generated for you. To create one manually:
```typescript
import { defineConfig } from 'velox';
export default defineConfig({
// options go here
});
```
`defineConfig` is a helper that provides full TypeScript type inference over the configuration object — use it rather than exporting a plain object.
## Top-Level Options
### `app`
General application metadata.
```typescript
app: {
name: string; // used in HTML
and meta tags
baseUrl: string; // canonical base URL (e.g. https://example.com)
defaultLocale?: string; // default locale for i18n (default: 'en')
trailingSlash?: boolean; // append trailing slash to all routes (default: false)
}
```
Example:
```typescript
app: {
name: 'My Velox App',
baseUrl: process.env.PUBLIC_BASE_URL ?? 'http://localhost:3700',
defaultLocale: 'en',
trailingSlash: false,
},
```
### `server`
Development and production server settings.
```typescript
server: {
port?: number; // dev server port (default: 3700)
host?: string; // bind address (default: 'localhost')
https?: { // enable HTTPS for the dev server
cert: string; // path to certificate file
key: string; // path to key file
};
cors?: {
origin: string | string[] | '*';
credentials?: boolean;
methods?: string[];
};
}
```
### `build`
Build system options.
```typescript
build: {
target: 'node' | 'edge' | 'static'; // deployment target
outDir?: string; // output directory (default: '.velox/output')
sourcemap?: boolean | 'external'; // generate source maps
minify?: boolean; // minify output (default: true in production)
splitting?: boolean; // enable code splitting (default: true)
analyze?: boolean; // emit a bundle analysis report
prerender?: string[]; // explicit list of routes to pre-render
}
```
### `routes`
Fine-grained routing options.
```typescript
routes: {
dir?: string; // routes directory (default: 'routes')
extensions?: string[]; // file extensions treated as routes
// default: ['.velox', '.tsx', '.ts']
exclude?: string[]; // glob patterns to exclude
}
```
### `assets`
Asset handling and optimisation.
```typescript
assets: {
publicDir?: string; // static assets directory (default: 'public')
imageOptimisation?: {
enabled: boolean;
formats?: ('webp' | 'avif')[];
quality?: number; // 1–100, default 80
};
fonts?: {
preload?: boolean;
subsets?: string[];
};
}
```
### `css`
Stylesheet handling.
```typescript
css: {
modules?: {
localsConvention?: 'camelCase' | 'camelCaseOnly' | 'dashes';
generateScopedName?: string;
};
preprocessors?: {
sass?: boolean; // enable Sass (requires @velox/sass)
less?: boolean;
stylus?: boolean;
};
postcss?: {
plugins?: any[];
};
}
```
### `plugins`
The plugin array lets you extend Velox with first-party and community plugins.
```typescript
import { defineConfig } from 'velox';
import { veloxMDX } from '@velox/mdx';
import { veloxSass } from '@velox/sass';
import { veloxPWA } from '@velox/pwa';
export default defineConfig({
plugins: [
veloxMDX(),
veloxSass(),
veloxPWA({
name: 'My App',
themeColor: '#3a7bd5',
}),
],
});
```
### `experimental`
Opt-in to experimental features that are not yet stable.
```typescript
experimental: {
viewTransitions?: boolean; // CSS View Transitions API support
partialHydration?: boolean; // fine-grained component hydration
reactCompat?: boolean; // React component compatibility shim
}
```
## Environment-Specific Configuration
You can provide environment-specific overrides:
```typescript
import { defineConfig } from 'velox';
export default defineConfig({
app: {
name: 'My App',
baseUrl: process.env.PUBLIC_BASE_URL!,
},
server: {
port: parseInt(process.env.PORT ?? '3700'),
},
build: {
target: process.env.VELOX_TARGET as 'node' | 'edge' ?? 'node',
sourcemap: process.env.NODE_ENV !== 'production',
},
});
```
## Per-Route Rendering Configuration
You can override the rendering mode for individual routes from within the route file:
```typescript
// routes/dashboard.velox server block
export const config = {
render: 'ssr', // 'ssr' | 'ssg' | 'isr' | 'csr'
revalidate: 60, // ISR: revalidate every 60 seconds
edge: true, // run on edge runtime
};
```
## Full Example
A production-ready `velox.config.ts` for a large application:
```typescript
import { defineConfig } from 'velox';
import { veloxMDX } from '@velox/mdx';
export default defineConfig({
app: {
name: 'Acme Corp',
baseUrl: process.env.PUBLIC_BASE_URL!,
defaultLocale: 'en',
},
server: {
port: 3700,
cors: {
origin: process.env.ALLOWED_ORIGINS?.split(',') ?? '*',
credentials: true,
},
},
build: {
target: 'edge',
sourcemap: 'external',
analyze: process.env.ANALYZE === '1',
},
assets: {
imageOptimisation: {
enabled: true,
formats: ['webp', 'avif'],
quality: 85,
},
},
plugins: [veloxMDX()],
});
```
For the complete type definitions, see the [Config API](api-config.md) reference.