@maravilla-labs/adapter-astro
v1.0.0
Published
Astro adapter for Maravilla Runtime
Maintainers
Readme
@maravilla-labs/adapter-astro
Astro adapter for Maravilla Runtime. Builds an Astro app (server, hybrid, or
static output) into a Maravilla bundle: manifest.json + server.js +
static/.
Usage
// astro.config.mjs
import { defineConfig } from 'astro/config';
import maravilla from '@maravilla-labs/adapter-astro';
export default defineConfig({
output: 'server', // or 'static' with per-page `export const prerender = false`
adapter: maravilla(),
});Then:
astro build # writes .maravilla/
maravilla preview .maravillaPlatform services
Platform bindings are exposed on locals (Astro's idiomatic per-request
context):
---
const { platform } = Astro.locals;
const value = await platform.env.KV.demo.get('key');
const docs = await platform.env.DB.find('notes', {});
---API routes receive the same locals:
export const GET: APIRoute = async ({ locals }) => {
const notes = await locals.platform.env.DB.find('notes', {});
return Response.json({ notes });
};Add the locals typing to src/env.d.ts (see examples/demo/src/env.d.ts).
Sessions
Astro.session works out of the box: the adapter wires a KV-backed session
driver (namespace astro_sessions) as the default session.driver. During
astro dev (plain Node, no platform bindings) the driver falls back to an
in-memory store. Configure with adapter options:
maravilla({ sessionNamespace: 'my_sessions' }) // custom KV namespace
maravilla({ sessionDriver: false }) // opt out of the default driverA user-configured session.driver in the Astro config always wins.
Images
Sharp cannot run in the isolate; the adapter configures Astro's passthrough image service automatically (images are served unoptimized). A custom image endpoint backed by the Maravilla media pipeline is a planned follow-up.
Options
Standard adapter options shared with the other Maravilla adapters:
out (default .maravilla), envPrefix (default PUBLIC_), include,
exclude, external, polyfill, precompress — plus the session options
above.
Edge functions (functions/), event handlers (events.ts), workflows and
MCP tools are picked up from the project root exactly as with the SvelteKit
adapter.
Requirements
- Astro 6 or 7 ('auto' entrypoint resolution).
- The adapter forces a server build (
buildOutput: 'server'); fully prerendered pages are listed in the manifest'srouting.prerenderedand served statically without touching the isolate.
Example
See examples/demo for an app exercising SSR, a prerendered page, platform
KV/DB and sessions.
