Getting started

Scaffold, develop, build, and deploy a June app in four commands.

Install

npm create june my-app          # canonical (package: create-june)
cd my-app && npm run dev

The framework packages are @junejs/core (the contract layer: the page module, defineAction(), islands) and @junejs/cli (the june command) — NOT june (an unrelated npm package), not junejs, and not @june/* (that scope isn't ours).

The loop

june dev          # dev server (Bun/Node host)
june build        # Workers bundle: dist/worker.js + prerendered assets
june deploy       # build + wrangler upload (--dry-run validates only)
june gen          # freeze content/**/*.md → app/_content.ts
june info         # show routes + the agent surface

june build freezes what the dev server discovers at request time: routes → a static manifest, june.config.ts → literals, content/**/*.mdapp/_content.ts, pages exporting prerender = true → static files.

Where things go

app/            file-system routes: page.tsx, layout.tsx, [param]/
app/_client.*   the client entry — its presence turns on islands hydration
content/        markdown collections (frozen at build, verbatim .md projections)
june.config.ts  site metadata, agent-surface switches, resources