Get Started
Pick an Integration
Start with Ecopages JSX, or choose React, Lit, KitaJS, or MDX when a Page needs a different renderer.
Pick an Integration. Create Pages. Add a server if you need it. Start with Ecopages JSX or another Integration, author Pages that render HTML, and add a Cache Strategy, typed handlers and Explicit Routes only when a Page needs more than static HTML.
npx ecopages init ecopages-apppnpm dlx ecopages init ecopages-appbunx ecopages init ecopages-appimport { defineConfig } from '@ecopages/core/config';
import { ecopagesJsxPlugin } from '@ecopages/ecopages-jsx';
import { lightningCssProcessorPlugin } from '@ecopages/lightningcss-processor';
import { tailwindV4Preset } from '@ecopages/lightningcss-processor/presets/tailwind-v4';
export default defineConfig({
defaultMetadata: {
title: 'Ecopages',
description: 'Pick an Integration, then author Pages',
},
integrations: [ecopagesJsxPlugin()],
processors: [
lightningCssProcessorPlugin(
tailwindV4Preset({
referencePath: 'src/styles/app.css',
}),
),
],
});import { eco } from '@ecopages/core';
import { BaseLayout } from '@/layouts/base-layout';
import { CounterCard } from '@/components/counter-card';
export default eco.page({
layout: BaseLayout,
metadata: () => ({
title: 'Welcome to Ecopages',
description: 'A static Page. Add the rest on demand.',
}),
render: () => (
<section>
<h1>Hello</h1>
<p>This Page is static HTML. Add a server if you need it.</p>
<CounterCard count={5} />
<a href='/docs/getting-started/introduction'>Read the docs</a>
</section>
),
});import { eco } from '@ecopages/core';
import { Counter, type CounterProps } from './counter';
import './counter-card.css';
export const CounterCard = eco.component({
render: ({ count }: CounterProps) => <Counter count={count} />,
});Get Started
Start with Ecopages JSX, or choose React, Lit, KitaJS, or MDX when a Page needs a different renderer.
Core
Define Pages with eco.page, compose them with a Layout, and declare Dependencies explicitly.
Server
Keep Pages static until you need typed handlers or Explicit Routes.
Libraries
Reach for Radiant, routers, and processors when a Page needs more than HTML.
Suggested path