Configuration
Ecopages can be customized to fit your project's needs through a configuration file. Create a file named eco.config.ts in your project's root directory to get started.
Here's a basic example of an Ecopages configuration:
import { defineConfig } from '@ecopages/core/config';
import { ecopagesJsxPlugin } from '@ecopages/ecopages-jsx';
export default defineConfig({
integrations: [ecopagesJsxPlugin()],
defaultMetadata: {
title: 'Your Site Title',
description: 'Your site description',
image: 'https://your-domain.com/og-image.png',
},
});createApp() loads and finalizes this file automatically. Override the path with createApp({ configFile }), ECOPAGES_CONFIG_FILE, or ecopages dev --config <file>.
In development, adding, changing, or removing eco.config.ts or a supported project .env file restarts the dev server so integrations, directories, and environment values reload. Supported files are .env, .env.local, .env.[NODE_ENV], and .env.[NODE_ENV].local. Page and component files still hot-reload without a full restart.
Configuration API
The root directory of your project, used to resolve paths to your project files.
The base URL of your project, used for generating absolute URLs for your pages. ECOPAGES_BASE_URL overrides the default when baseUrl is omitted.
Default metadata for your pages. This is merged with page-specific metadata when provided.
The directory containing your source files, relative to the root project directory.
The directory for static assets, relative to the src directory.
The directory containing your page files, relative to the src directory.
The directory for include templates, relative to the src directory.
The directory for layout components, relative to the src directory.
Ecopages now discovers the document shell and error pages semantically:
src/includes/html.*resolves the HTML shell by basename and integration extension.src/pages/404.*resolves the not-found page by basename and integration extension.src/pages/500.*resolves the server-error page by basename and integration extension.
No template filename setter is required in eco.config.ts. If no pages/500.* file or app.serverError() loader is configured, the page pipeline serves a built-in HTML 500 page. In development, custom and default 500 pages can show message and stack from the thrown error; the built-in page also includes a Copy error button.
The output directory for the built files.
The internal workspace used for development and runtime-only artifacts. This directory is not intended for deployment.
The directory containing your reusable components.
Add additional files or directories to monitor during development. Paths are resolved from the project root, so
src/registry watches every file inside that folder. Glob patterns such as **/*.config.ts are also supported. A
matching change invalidates server modules, notifies processors, and reloads the browser.
Configuration for the robots.txt file.
Automatic sitemap.xml generation during static export. Disabled by default. See
Sitemap for eligibility rules, exclude patterns, and
extraUrls.
An array of integration plugins to enhance Ecopages functionality.
An array of processors to handle file transformations (e.g., PostCSS, Images).
An array of build plugins to use as loaders for custom file types.
Filter-based module source rewrites for browser and HMR builds. See Source Transforms.
Development-only in-browser inspector. Install @ecopages/dev-toolbar and call setDevToolbar(devToolbar()). See
Dev toolbar.
Integrations
Ecopages supports various integrations to extend its capabilities. Here are some commonly used integrations:
- Ecopages JSX: Default stack for
.tsxPages and optional Radiant hydration - React: React Pages or component islands
- Lit: Web Components
- MDX: Standalone Markdown on a non-React JSX runtime
- KitaJS:
.kita.tsxPages via@kitajs/html
To use an integration, install it and add it to your configuration. For example:
import { defineConfig } from '@ecopages/core/config';
import { ecopagesJsxPlugin } from '@ecopages/ecopages-jsx';
export default defineConfig({
rootDir: import.meta.dirname,
baseUrl: process.env.ECOPAGES_BASE_URL ?? 'http://localhost:3000',
integrations: [ecopagesJsxPlugin()],
});For more details on specific integrations, refer to their respective documentation pages: