Write once.
Deploy anywhere.

Same code on every host. The host picks the provider.

server/api/settings.get.tsDocs
import { defineEventHandler } from "h3"
import { kv } from "vite-hub/kv"

export default defineEventHandler(async () => {
  const [error, settings] = await kv.get("settings")
  if (error) throw error
  return settings
})

Provider per host

  • CloudflareWorkers KV
  • VercelUpstash Redis
  • DenoDeno KV
  • Nodefs-lite or Upstash
Full support matrix

Define an Agent in one file.

An Agent is one more file in your server. It deploys with your app and uses the same storage as your routes.

server/agents/review.ts
import { defineAgent } from "vite-hub/agent"
import { browser, kv } from "vite-hub/agent/capabilities"
import { github } from "vite-hub/agent/channels"
export default defineAgent({
description: "Reviews pull requests.",
channels: {
channelsA pull request opens on GitHub. The run starts.
github: github({ pullRequest: { reconcile: { events: ["opened"] } } }),
},
driver: "codex",
driverCodex does the work. Claude Code and AI SDK also fit.
workspace: { mode: "write" },
workspaceThe repository stays on disk between runs.
capabilities: [browser(), kv({ mode: "write" })],
capabilitiesA browser, and write access to your app's KV.
})
server/api/reviews.get.ts
import { defineEventHandler } from "h3"
import { kv } from "vite-hub/kv"
export default defineEventHandler(async () => {
const [error, keys] = await kv.keys()
kvThe same store. No second database for the Agent.
if (error) throw error
return keys
})