Open navigation
A Framework forProduct integrated Apps
Bring the stack you already use. Farm.js connects your app router, typed APIs, middleware, integrations, docs, and deployment so they work together as one product.
Use Farm.js to build this production-ready React product app. First read the Farm.js framework map at https://farmjs.dev/llms.txt and the current Farm.js skill at https://farmjs.dev/api/docs/skill.md, then use their linked docs as the source of truth. Follow Farm.js conventions for App Router, typed APIs, server functions, middleware, framework Cron, integrations, environment boundaries, data loading, and deployment. Preserve existing patterns, validate external input, keep secrets server-only, add focused tests, and run type checks plus a production build before finishing.A blazingly fast dev server
Start the whole app once, then see every page request and response time as you work.
$ pnpm devFarm.js v1.0.0 ready in 253ms➜ Local:http://localhost:3000/➜ Network:http://192.168.1.24:3000/[FARM] [PAGE] [GET] /contact - 200 (8ms)[FARM] [API] [POST] /api/waitlist - 200 (5ms)[FARM] [PAGE] [GET] /docs - 200 (11ms)Types from route to client
Define an API route once. Farm.js generates a client with typed inputs and responses.
const { data, error } = await api.users.get({ query: { limit: "5" },});if (error) throw error;data?.users[0]?.name;// ^? string | undefinedAdd product features as integrations
Bring in auth, billing, email, jobs, storage, docs, and agent runtimes through one integration system.
import { betterAuth, resend, stripe } from "@farm.js/integrations";import { auth } from "./auth";import { emailTemplates } from "./email";export const integrations = { auth: betterAuth({ instance: auth }), // Better Auth billing: stripe({ secretKey: process.env.STRIPE_SECRET_KEY }), // Stripe email: resend({ // Resend apiKey: process.env.RESEND_API_KEY, templates: emailTemplates, }),} as const;Build once. Deploy together.
Farm.js packages routes, middleware, typed clients, and deployment config into one production build.
$ farm build --preset node-server[info] 🚜 Building Farm.js application with preset: node-server...[info] 🔍 Discovering routes and API endpoints...[info] 📦 Building client and SSR bundles in parallel...[bench] Fixture build wall time 527ms median[info] 📁 Output directory: .farm/.outputFramework benchmarks
Farm gets your first page running: 5.47× faster than Next.js; 3.17× faster than SvelteKit; 9.21× faster than Nuxt; 3.17× faster than TanStack Start.
Cold dev startup through the first rendered SSR page, measured against the same routed fixture.
Farm builds the same fixture: 4.53× faster than Next.js; 3.19× faster than SvelteKit; 8.47× faster than Nuxt; 1.25× faster than TanStack Start.
A complete production compile of the same SSR project, with generated output ready to boot.
Farm.js leads the benchmark app across latency and output size. Raw medians for startup, build, boot, SSR, and HTML.
Dev start
Warm dev
Build
Prod boot
SSR p50
HTML
The app router you know
Build pages, layouts, API routes, loading states, and typed links in one app directory.
Deploy where you want
Ship to Vercel, Cloudflare, Netlify, or self-hosted Node with built-in Nitro presets.
Docs for people and agents
Enable docs in your app config, then serve pages, Markdown, search, and agent-ready endpoints from the same source.
import { defineConfig } from "@farm.js/core";export default defineConfig({ docs: { enabled: true, entry: "/docs", search: true, mcp: true, },});Share architecture, not boilerplate
Compose routes, middleware, integrations, components, and config from local or package layers. Project files always win.
import { defineConfig } from "@farm.js/core";export default defineConfig({ routeRules: { "/products/**": { swr: 300 }, },});Storage built into the runtime
Mount SQLite, Redis, S3, or any supported driver once, then reuse the storage layer across server code, middleware, rate limits, and integrations.
export default defineConfig({ storage: { mounts: { app: sqliteStorage({ path: "./data.sqlite" }), cache: redisStorage({ url: process.env.REDIS_URL! }), }, },});Configure the whole route in one place
Validate params, prepare request data, load the page, and run post-load work in one typed route definition.
export const ProductRoute = createRoute("/products/[id]", { params: ProductParams, data: { before: ({ context }) => requireUser(context.session), main: ({ params, before }) => getProduct(params.id, before.id), after: ({ data }) => recordView(data.id), }, pending: ProductSkeleton, error: ProductError, component: ProductPage,});Bring the agent runtime you already use
Run Eve on Vercel or Cloudflare Agents on Workers. Farm joins each runtime to your app in development and production while its native SDK stays intact.
//eve/*Vercel/agents/*WorkersRun agents beside the app
Choose Eve or Cloudflare Agents. Farm starts the runtime in development, owns its same-origin routes, and composes supported production output.
import { eve } from "@farm.js/eve";export default defineConfig({ integrations: { agent: eve(), }, deploy: { target: "vercel", },});Keep the provider-native SDK
Use useEveAgent for durable conversations or useAgent for typed WebSocket state and RPC. Farm does not add a duplicate client layer.
"use client";import { useEveAgent } from "eve/react";export function useChat() { const agent = useEveAgent(); return { messages: agent.data.messages, send: agent.send, };}One framework. The whole product.
Build routing, APIs, integrations, agents, docs, and deployment together in one React framework.