---
title: "Docs"
description: "June documentation — every page is also markdown (append .md)."
canonical: "https://june.build/docs"
---
# June docs

## Get started

- [Getting started](/docs/getting-started) — Scaffold, develop, build, and deploy a June app in four commands.
- [Build & prerender](/docs/build-and-deploy) — What june build freezes at build time, and how opt-in prerender ships exactly what was tested.
- [Deployment](/docs/deployment) — One portable core, one host seam, one adapter per target — Workers, Vercel, and Deno Deploy ship today on the same bundle.
- [Stability & roadmap](/docs/stability) — What you can build on today, what's still moving, and what's experimental — June is 0.0.x, and this page says exactly where each piece stands.

## Concepts

- [Dual audience](/docs/dual-audience) — One page definition serves humans (HTML) and agents (markdown, JSON, MCP).
- [Web Standards end to end](/docs/features-web-standards) — The whole framework is one fetch handler — Request in, Response out, Web Streams in between. Standards are the portability mechanism, not a checkbox.
- [React Server Components, server-first](/docs/features-rsc) — Every page is a server component tree rendered on the server; client code is an explicit island; actions are server functions with one authorization gate.
- [The data model](/docs/features-data) — Resources are declared, not wired. db / kv / blob ride an ambient scope — never ctx, which is identity only. Bring Juno or your own.
- [Runtime: Bun-first toolchain, runtime-agnostic core](/docs/features-runtime) — One tool runs install/test/dev; the core assumes no runtime at all — which is why the same app serves from Bun, Node, and workerd.
- [Auth & the scoped principal](/docs/concept-auth) — One authorization gate for both audiences — run(input, ctx). ctx is the principal; an agent at /mcp is just another caller through the same gate.

## Agents

- [Agents: a feature of your app, not a separate runtime](/docs/agents-overview) — Drop an agent/ directory into your June app and it becomes a running, durable agent whose tools are the same defineActions your UI and /mcp already use.
- [The agent/ directory](/docs/agents-directory) — The file convention that defines an agent — agent.ts, instructions and per-surface variants, tools, skills, channels, connections — and defineAgent(), its programmatic form.
- [Channels: where turns come in](/docs/agents-channels) — A channel is an agent's inbound edge — a signed webhook or fetch handler in agent/channels/*.ts that verifies the platform, resolves who is speaking, runs a turn, and posts the reply back.
- [Connections: where tools come from](/docs/agents-connections) — A connection is an agent's outbound edge — an MCP server, an OpenAPI API, or a provider like Google Drive declared in agent/connections/*.ts, whose operations become <conn>__<tool> tools authenticated per call, server-side.
- [Durable turns: a turn is a process, not a request](/docs/agents-durable-turns) — A June turn is a checkpointed, replayable stream of typed events. It can be streamed live, parked for a human, cancelled, reset, or started by the agent itself.
- [Run & deploy: from an in-process runtime to one Durable Object per session](/docs/agents-deploy) — The same agent/ directory runs on an in-process SQLite runtime in dev and compiles into a Durable Object class on Cloudflare Workers, one object per session.

## Features

- [App Router: the filesystem is the route table](/docs/features-app-router) — page.tsx is a route, [slug] is a param, (group) shapes the tree without the URL, _anything colocates — one matcher drives dev and the build.
- [Layouts: nested, composed, frozen](/docs/features-layouts) — layout.tsx wraps its segment and everything below; chains compose root → leaf, and the build freezes the same chain dev resolves.
- [Islands: zero client JS by default](/docs/features-islands) — Pages ship no JavaScript unless a subtree opts in — one <Island> hydrates against an explicit registry while the rest stays server-rendered HTML.
- [Navigation: instant without a client router](/docs/features-navigation) — Hover prerenders the next page (Speculation Rules), the click is zero-network, View Transitions animate the swap — the browser is the router.
- [Client Router: the opt-in SPA layer](/docs/features-client-router) — Off by default — turn it on for app-like surfaces that need in-memory state to survive navigation. Soft swaps over the same HTML the server already serves, with <Island persist> for websockets.
- [Live updates: a connection that survives navigation](/docs/features-live-updates) — Put a server-push connection (SSE or WebSocket) inside a persist island — it keeps streaming across soft navigations instead of reconnecting on every click. Plus what to know about connection limits when you deploy.
- [Styling: global CSS, Tailwind, CSS Modules](/docs/features-styling) — app/global.css is auto-linked (no import); Tailwind v4 is the blessed default; *.module.css scopes deterministically. Dev serves readable CSS with HMR, build ships hashed, immutable, minified.
- [Markdown without drift](/docs/features-markdown) — Append .md to any page and get markdown — for authored content it's your source file byte-for-byte, never a lossy HTML reconstruction.
- [Built-in MCP](/docs/features-mcp) — Every June app is an MCP server — defineAction() is simultaneously a server action, an MCP tool, and a manifest entry, behind one authorization gate.
- [Built-in llms.txt](/docs/features-llms-txt) — The agent discovery surface — llms.txt, sitemap, robots, api-catalog, the ARD catalog, a generated agent skill, and per-route manifests — derives from your routes automatically.
- [Queries & caching](/docs/features-queries-caching) — How to read and write through the ambient db — the query surface, plain-SQL migrations, and the auto-batch / auto-invalidate cache.
- [OG images, typeset at the edge](/docs/features-og-image) — Social cards as a route that returns a PNG — satori + resvg in the worker, with runtime font subsetting so CJK titles work.
- [The june CLI](/docs/features-cli) — Six verbs — dev, build, deploy, gen, db, info — installed locally by the scaffold, version-pinned per project, with --dry-run as the CI contract.
- [DX: a loop with no assembly](/docs/features-dx) — Zero-config dev, dev/built parity by construction, an oracle for every artifact — and push-based HMR on the experimental runtime track.
