Project Structure
A Star-Lite Docs project is a standard Astro project with emdash and star-lite-docs as integrations. Here's the typical layout:
Node / Docker project
my-docs/├── astro.config.mjs # Astro config with starLiteDocs() + emdash()├── package.json├── tsconfig.json├── .emdash/│ └── seed.json # Optional custom seed (pages, menus)├── public/│ └── houston.webp # Auto-copied by the integration├── data.db # SQLite database (created at runtime)├── uploads/ # Uploaded media files├── Dockerfile # Docker deployment (if scaffolded)└── src/ └── pages/ └── .gitkeep # Empty — routes are injected by the integrationCloudflare Workers project
my-docs/├── astro.config.mjs # starLiteDocs() + emdash() with d1/r2├── package.json├── tsconfig.json├── wrangler.jsonc # D1 database and R2 bucket bindings├── worker-configuration.d.ts├── .emdash/│ └── seed.json # Optional custom seed├── public/│ └── houston.webp└── src/ └── pages/ └── .gitkeepKey files
astro.config.mjs
The main configuration file. This is where starLiteDocs() and emdash() are registered:
export default defineConfig({ output: "server", integrations: [ starLiteDocs({ title: "My Docs" }), emdash({ database: /* sqlite() or d1() */, storage: /* local() or r2() */, plugins: [starLiteBlocks()], }), ],});.emdash/seed.json
Optional. Overrides the default seed content and menus. See Seed & Bootstrap.
public/
Static assets. houston.webp is auto-copied here by the integration on first build. Add your own images, favicons, etc.
src/pages/
Usually empty. Star-Lite injects its routes via the integration — you don't need to create page files. If you add your own route files here (e.g. index.astro), the integration will warn about conflicts.
Database
- Node/Docker:
data.db(SQLite file in the project root) - Cloudflare: D1 database (configured in
wrangler.jsonc)
All content, users, menus, and settings are stored here.