Feature Map
Everything for AI app frontends and backends
Start with Vite + React screens, then add type-safe APIs, auth, realtime data, AI, RAG, storage, and deployment in one Gencow workflow.
- Vite + React UI
- Typed backend APIs
- AI/RAG/Auth ready
Everything an AI app needs, already on the platform
Not just a backend. AI, background work, media and operations ship as platform features — no extra vendors, keys or servers to wire together.
LLM
Call OpenAI models by model ID. Provider keys stay in the platform proxy.
Image generation
Generate images from the same ai.* API.
STT
Speech-to-text from private storage, with timestamps and speaker labels.
TTS
Text-to-speech with direct synthesis or async jobs.
OCR
Extract text from images, and convert PDF, HWPX, DOCX and XLSX to Markdown.
Rerank
Rerank search results with Cohere Rerank on Azure.
Workflow
Durable multi-step runs with checkpoints, approvals and resume.
Queue
Workflow queue for background runs, managed by the platform.
Cron
Interval, daily, weekly and cron-expression schedules.
Realtime
Queries update the UI automatically when data changes.
Image auto-scaling
Automatic WebP conversion and downscaling for stored images.
Backup
Manual and automatic database backups.
Analytics
Privacy-friendly traffic analytics, injected automatically on hosted apps.
Web builder
Describe an app in a prompt and build and deploy it with Gencow.
14AI services share one Gencow credit balance. Plan limits apply — see Pricing.
Customer support AI agent, in three files
// gencow/schema.tsexport const conversations = pgTable("conversations", { id: serial("id").primaryKey(), userId: text("user_id").notNull(), messages: jsonb("messages").default([]), context: text("context"), // Context from RAG createdAt: timestamp("created_at").defaultNow(),});Schema → Agent Logic → UI, all TypeScript. Vibe-code it with your coding agent and you're done.
Building AI agents was this painful
Agent logic is simple, but the infrastructure is overwhelmingly complex.
Started with LangChain, then...
No infrastructure. Vector DB separate, API server separate, auth separate... Agent logic is 10 lines but infra code is 200.
# Required infrastructure: pip install langchain pinecone # + FastAPI + PostgreSQL + Redis # + Docker + Nginx + Auth...
$ gencow add AI RAG # ✓ Components are added to gencow/
→Gencow has AI · RAG · Auth built-in as components. One line: gencow add AI RAG — done.
3 weeks gone building a RAG pipeline
Document chunking, embedding, vector storage, search optimization... Why is it so complex just to ingest one PDF?
# Things you have to build yourself: loader = PDFLoader(file) chunks = splitter.split(docs) embeds = openai.embed(chunks) pinecone.upsert(embeds) # + error handling, retries...
await rag.ingest(ctx, "manual.pdf", text); // ✓ Chunking + embedding + indexing
→One line auto-chunks, embeds, and indexes your PDF. pgvector built-in.
Deploying to production is another hell
Agent that worked locally breaks in production. Auth, CORS, env vars, secrets management, scaling...
# Deployment checklist: □ Build Docker image □ Write K8s manifest □ Issue SSL certificate □ Configure env variables □ Set up CORS...
$ gencow deploy # ✓ Bundle, migrate, deploy # Production: gencow deploy --prod
→One command to production. SSL, auth, scaling all automatic.
Signed up at 3 sites just to get one API key
Sign up, add a card, create provider keys, then manage them in your app configuration before writing the feature.
# Sites to sign up for: OpenAI → add card → API Key Anthropic → add card → API Key Google AI → project → API Key # + manage 3 keys in .env...
// One Gencow key, done
import { ai } from "./ai";
await ai.chat({
model: "llm/economy", // or another OpenAI model
messages: [...]
});→One Gencow key for OpenAI models. One signup, one key, one bill.
Every component your agent needs is ready to go
Add AI, RAG, vector search, and streaming to your backend with a single line.
AI Engine
OpenAI models through the Gencow gateway. Built-in streaming where enabled, with platform-managed credentials.
import { ai } from "@/gencow/ai";
const reply = await ai.chat({
model: "llm/economy",
system: "You are a helpful assistant.",
messages: chatHistory,
});
// Agent Loop (auto tool calling)
const result = await ai.agent({
messages, tools, maxSteps: 5,
});RAG Engine
PDF, Notion, web page auto-crawl & chunking. pgvector-based vector search. No extra infra needed.
import { rag } from "@/gencow/rag";
// Document indexing (auto chunk + embed)
await rag.ingest(ctx, "manual.pdf", docText);
// Semantic search
const results = await rag.search(ctx,
"What is the refund policy?",
{ filter: { source: "manual.pdf" } }
);
// Q&A — search + answer in one call
const { answer } = await rag.ask(ctx, query);Search
Function calling-based tool use. AI automatically selects the right tool. ctx-integrated for safe DB mutations.
import { defineTools } from "@/gencow/tools";
const tools = defineTools(ctx, {
getOrder: {
description: "Look up order status",
parameters: z.object({
orderId: z.string()
}),
handler: async (ctx, args) => {
return ctx.db.select().from(orders)
.where(eq(orders.id, args.orderId));
}
}
});
await ai.chat({ messages, tools });Agent Memory
Episodic, semantic, and procedural memory in 3 layers. Automatically manages long-term memory and conversation context.
import { memory } from "@/gencow/memory";
// Search scoped long-term memory
const { hits } = await memory.search(ctx, {
namespace: "assistant-memory",
scope: { conversation: conversationId },
query,
});
const reply = await ai.chat({
system: "Known facts: " + JSON.stringify(hits),
messages: [{ role: "user", content: query }],
});Tool Calling
PII masking, topic blocking, output validation. Safely wrap the entire input-to-output pipeline.
import { guardrails } from "@/gencow/guardrails";
// PII masking + topic blocking
const safe = await guardrails.validateInput(
userMsg,
{ maskPII: true, blockTopics: ["politics"] }
);
if (!safe.allowed) return safe.blocked;
// Validate input, call AI, validate output
const { result } = await guardrails.wrap(
(text) => ai.chat({ messages: [{ role: "user", content: text }] }),
userMsg,
{ maskPII: true },
{ maxLength: 2000 }
);Analytics
Privacy-friendly traffic analytics. Pageviews, referrers and countries in your Dashboard — no tracker to add.
// Automatic on Gencow-hosted frontends (no code needed)
// Dashboard → Analytics tab: pageviews, referrers, countries
// Custom event (optional)
window.gencow?.analytics?.track?.("signup_completed");One Key, OpenAI Models
One-Key AI
One signup, one key, one bill. Use OpenAI models instantly.
// Separate keys and SDKs per provider
import { OpenAI } from "openai";
import { Anthropic } from "@anthropic-ai/sdk";
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY
});
// Switch models? Replace SDK and rewrite code
// No provider keys in app code. Choose an OpenAI model ID
import { ai } from "./ai";
const result = await ai.chat({
model: "llm/economy", // → choose another OpenAI model model ID
messages: [{ role: "user", content: message }],
});
// API keys? Billing? Auto-deducted from Gencow credits.
One Signup, One Key
Use OpenAI models through one Gencow API key; Gencow manages provider credentials and usage billing.
One Credit for AI & DB
AI tokens, DB storage, API calls — one credit instead of 4 separate invoices.
No Bill Shock
Spend Cap ON by default. Read-only mode when credits run out. Zero surprise charges. Your data stays safe.
No API Keys in Code
Provider keys live in the platform proxy, not in your app code or .env.
Model Selection Is One String
Choose a supported OpenAI model ID through the same Gencow AI API.
const result = await ai.chat({
messages: [{ role: "user", content: message }],
});
// Response:
"Hello! How can I help you?"
That's it. Choose another OpenAI model.
All AI, One Backend
Others offer AI or backend. Gencow offers AI and backend.
| Feature | OpenRouter | Supabase | Convex | Gencow |
|---|---|---|---|---|
| GPT-6 Luna | DIY | DIY | ||
| GPT-6 Sol | DIY | DIY | ||
| GPT-6 Astra | DIY | DIY | ||
| Model Selection | Model ID | SDK swap | SDK swap | Model ID |
| Database | ||||
| Auth | ||||
| Realtime | ||||
| Unified Billing | AI only | Infra only | Infra only | AI+Infra |
| Spend Cap |
OpenRouter is AI only, Supabase is backend only. Gencow manages AI and backend with one credit.
Frontend + Backend Architecture AI Understands
Vibe-coding succeeds only when AI grasps the structure. Gencow is built on 6 core principles making it perfectly comprehensible to AI.
Everything is TypeScript
Schemas, Row-Level Security, APIs, and business logic—unified in pure TypeScript. No context fragmentation.
Co-location Architecture
Backend lives in the root of your frontend folder. AI instantly identifies the structure without parsing massive monorepos.
Deterministic & Declarative
No hidden dashboards or fragmented SQL functions. 100% declarative code ensures AI can perfectly replicate architecture.
Explicit Data Graph
Don't force AI to infer relationships. Every database relation is explicitly typed, eliminating logic errors.
Secure by Default
createCrud() requires authentication by default, and ownerRls() applies row-level security so each user only sees their own rows.
Zero-Config Database
gencow dev --local runs an in-memory PGlite Postgres with no Docker. Cloud and production run on full PostgreSQL.
SaaS in 3 Simple Steps
TypeScript from start to finish. AI assists every step of the way.
One command
Add Agent Components
Install required AI/RAG components with a single command. No need to configure vector DB, API server, or auth separately.
$ gencow add AI RAG✓ AI Engine → gencow/ai.ts✓ RAG Engine → gencow/rag.ts→ Run gencow dev to get started
Or let AI do it
Write Agent Logic
Write business logic in gencow/agent.ts as a typed procedure — or ask your coding agent to write it.
// gencow/agent.tsimport { z } from "zod";import { rag } from "./rag";import { procedure } from "./runtime";export const chat = procedure.mutation.name("agent.chat").input(z.object({ question: z.string() })).handler(async ({ context: ctx, input }) => {ctx.auth.requireAuth();// Retrieve, then answerconst { answer, sources } = await rag.ask(ctx, input.question);return { answer, sources };});
One command
Deploy
gencow deploy ships to your dev app. When you are ready, gencow deploy --prod promotes to production (Pro / Scale).
$ gencow deploy✓ Schema → migrations synced✓ Bundle created✓ Deployed to your dev app→ https://<app-id>.gencow.app$ gencow deploy --prod # Pro / Scale
Dev → Prod Architecture:
Perfect Isolation, Blazing Fast
Safe and incredibly fast. Identical development experience locally, transitioning to enterprise-grade isolation in production.
PGlite
Docker-free blazing fast local in-memory Postgres
PostgreSQL
The global commercial standard RDBMS
Bun
The most powerful next-gen JS runtime in existence
cowbox
Each app runs in an isolated process (Landlock + seccomp-bpf + cgroups v2).
One command to deploy.
Built on the World's Best
Open Source Stack
Don't get locked into proprietary clouds. Gencow is built 100% on open-source technologies. Take your data and leave whenever you want.
Bun
The world's fastest JavaScript runtime
Hono
Edge-first ultra-lightweight web framework
Drizzle
Type-safe SQL query builder
PostgreSQL
The world's most advanced open-source RDBMS
Migrate Freely
Standard SQL and standard APIs. Move to another server anytime.
Community Proven
A tech stack trusted and verified daily by millions of developers.
Transparent Code
No black boxes. All code is open and trustworthy.
Secure by Isolation,
Enterprise Grade
Every app runs in its own isolated process (Landlock + seccomp-bpf + cgroups v2) with its own database. Secrets stay in per-app environment variables.
Isolated by default
Kernel-level process isolation and a separate database per app limit the blast radius of shared infrastructure. Row-level security presets like ownerRls() protect each user's rows.
- 24/7 Monitoring & Alerting
- Automated Backups & Point-in-time Recovery
- Horizontal Auto-scaling
- Enterprise-grade Security Isolation
When Data Changes,
UI Reacts Instantly
Forget complex socket event management. Just subscribe to a query and database changes magically reflect in your frontend.
No Socket Management
No need to write WebSocket setup, reconnection logic, or event handlers yourself.
Just Use Queries
Call useQuery(api.orders.list) and the UI updates whenever the data changes.
Scales With Your Plan
Concurrent realtime connection limits depend on your plan — see Pricing.
The only all-in-one platform for building AI apps
LangChain lets you build agents. But you have to glue together auth, DB, deploy, and vector DB separately.
Gencow does it in one command: gencow add AI RAG
| LangServe | Supabase + LangChain | Vercel AI SDK | Gencow | |
|---|---|---|---|---|
| AI Engine | DIY | ✅ Built-in | ||
| RAG | DIY | DIY | ✅ Built-in | |
| Vector Search | Pinecone separate | pgvector manual | Separate needed | ✅ pgvector |
| DB | Separate needed | PostgreSQL | Separate needed | ✅ PGlite→PG |
| Auth | Separate needed | Separate needed | ✅ Built-in | |
| Payments | Separate needed | Separate needed | Separate needed | ✅ Toss Payments |
| Deploy | DIY config | Cloud | ✅ One command | |
| Vibe-coding | ✅ Full | |||
| AI API Gateway | ✅ One-Key AI | |||
| Unified Billing | Infra only | ✅ AI+Infra | ||
| Spend Cap | ✅ Default ON |
Build agents like these in a single day
E-commerce Customer Support Agent
// Components: AI + RAG + Tools
import { z } from "zod";
import { ai } from "./ai";
import { rag } from "./rag";
import { defineTools } from "./tools";
import { procedure } from "./runtime";
export const ask = procedure.mutation
.name("support.ask")
.input(z.object({ question: z.string() }))
.handler(async ({ context: ctx, input }) => {
ctx.auth.requireAuth();
const docs = await rag.retrieve(ctx, input.question, {
filter: { source: "faq" },
});
const tools = defineTools(ctx, { getOrder, cancelOrder });
return ai.agent({
model: "llm/economy",
system: "Answer from the FAQ: " + JSON.stringify(docs),
messages: [{ role: "user", content: input.question }],
tools,
maxSteps: 5,
});
});→24/7 customer support, auto order lookup/cancel/refund
Internal Document Search Agent
// Components: AI + RAG
import { z } from "zod";
import { rag } from "./rag";
import { procedure } from "./runtime";
export const search = procedure.mutation
.name("docs.search")
.input(z.object({ query: z.string() }))
.handler(async ({ context: ctx, input }) => {
ctx.auth.requireAuth();
// Search + answer in one call, with sources
const { answer, sources } = await rag.ask(ctx, input.query);
return { answer, sources };
});→Answers grounded in your documents, with sources
SaaS Onboarding Agent
// Components: AI + RAG + Memory
import { z } from "zod";
import { ai } from "./ai";
import { memory } from "./memory";
import { procedure } from "./runtime";
export const onboard = procedure.mutation
.name("onboarding.ask")
.input(z.object({ question: z.string(), conversationId: z.string() }))
.handler(async ({ context: ctx, input }) => {
ctx.auth.requireAuth();
const { hits } = await memory.search(ctx, {
namespace: "onboarding",
scope: { conversation: input.conversationId },
query: input.question,
});
return ai.chat({
system: "Known about this user: " + JSON.stringify(hits),
messages: [{ role: "user", content: input.question }],
});
});→Personalized onboarding, progress tracking, churn prevention
Not just agents.
Any business, one shot.
Gencow was designed for AI agents, but its foundation is a TypeScript frontend + backend app platform.
UI · DB · Auth · Payments · Realtime · Deploy — build any web service fast.
# AI Agent app $ gencow add AI RAG # App with payments (Toss Payments) $ gencow add TossPayments # Google sign-in $ gencow add sso # Compose the screens and components you need.
Start with the agent platform. Build anything on top of it.
You build the agent's value,
Gencow handles all the infrastructure
Start at gencow.app and use docs.gencow.com as the source of truth for the full build flow.