
ایک Agent-نیٹو
فل-اسٹیک فریم ورک
AI چاہے جتنا بھی کوڈ انڈیلے، منڈو نہیں پھٹتا۔ 🥟
Engineering decisions, handed to the framework. 100+ MCP tools · battle-tested Skills workflows · runtime Guard.
10,000 lines a day from coding agents,
who fixes it?
ساختیاتی حفاظتی ریلنگ کے بغیر، AI سے بنایا گیا کوڈ جلد ہی تکنیکی قرض کی الجھن بن جاتا ہے۔
فیچر پھیلاؤ
AI ایجنٹ ڈپلیکیٹ یوٹیلیٹیز بناتے ہیں اور موجودہ پیٹرن کو نظرانداز کرتے ہیں، آپ کے کوڈبیس کو پھلا دیتے ہیں۔
→ negotiate + Skills keep structure consistent
خاموش ناکامیاں
بنائے گئے فنکشنز میں گہرائی میں چھپی لاجک غلطیاں جو بنیادی ٹیسٹ پاس کرتی ہیں لیکن پروڈکشن میں ناکام ہوتی ہیں۔
→ ATE writes tests and heals failures
آرکیٹیکچر ڈرفٹ
AI حدود سمجھے بغیر کوڈ پیسٹ کرتا ہے اور آپ کا صاف آرکیٹیکچر خراب ہو جاتا ہے۔
→ Guard enforces boundaries at runtime
محفوظ۔ قابلِ توسیع۔ منظم۔
Already giving your agent the same instruction for the third time?
One contract file brings types, API, tests, and runtime validation with it. When the agent drifts, Guard stops it at runtime.
Clean architecture, fell apart in a week?
Guard enforces layer boundaries, naming, and dependency rules at runtime. Six presets ready — FSD, Clean, Hexagonal, Atomic, CQRS, Mandu.
// layer violation detected
Agent "claude" blocked.
Reason: layer-violation: shared → features
Architecture preserved. ✅
Slot پر مبنی آرکیٹیکچر
الگ تھلگ عمل درآمد سیاق و سباق۔ پورے کو توڑے بغیر اپنے سسٹم کے حصے بدلیں۔
Agent-نیٹو (MCP)
Model Context Protocol کے لیے بنایا گیا۔ ایجنٹ آپ کے کوڈبیس کی ساخت کو مقامی طور پر سمجھتے ہیں۔
Still writing tests yourself?
ATE auto-generates Playwright specs from your routes. Pick an oracle level (L0–L3, smoke to contract). When a test fails, the LLM suggests a repair diff.
One click to undo an agent's mistake.
Snapshot with `mandu change begin` before the agent edits. Rollback if it's wrong, commit if it's right. File-level atomic recovery — no branches.
How is this different from Next · Remix · Hono?
| Feature | Mandu 🥟 | Next.js | Remix | Hono |
|---|---|---|---|---|
| Runtime | Bun-native | Node/Edge | Node/CF | Bun/Node/Deno |
| Type ↔ API | One contract → type · OpenAPI · tests | Manual sync | Manual sync | Zod middleware (manual) |
| Architecture enforcement | Guard at runtime | ESLint | None | None |
| Test automation | ATE auto-generate & heal | Manual | Manual | Manual |
| Agent interface | 100+ MCP tools built-in | Plugin | Plugin | Plugin |
| AI edit rollback | change begin/commit/rollback | git (manual) | git (manual) | git (manual) |
| Deploy targets | 4 edge + 7 deploy adapters | Vercel-first | Multi | Multi |
| DB client | Bun.SQL (Postgres · MySQL · SQLite) | — | — | — |
| Auth / Session | session · JWT · OAuth · email | 3rd-party | 3rd-party | 3rd-party |
6-line handler, 8-line contract.
A 30-line file becomes two files, 14 lines total. Same /api/signup.
import { z } from "zod";
import { NextRequest, NextResponse } from "next/server";
import { db, hash, isRateLimited } from "@/lib";
const SignupSchema = z.object({
email: z.string().email(),
password: z.string().min(8),
});
export async function POST(req: NextRequest) {
const csrf = req.headers.get("x-csrf-token");
if (csrf !== req.cookies.get("__csrf")?.value)
return NextResponse.json({ error: "csrf" }, { status: 403 });
if (await isRateLimited(req.ip))
return NextResponse.json({ error: "rate" }, { status: 429 });
const raw = await req.json().catch(() => null);
const parsed = SignupSchema.safeParse(raw);
if (!parsed.success)
return NextResponse.json({ error: parsed.error.flatten() }, { status: 400 });
try {
const user = await db.user.create({
data: {
email: parsed.data.email,
password: await hash(parsed.data.password),
},
});
return NextResponse.json({ id: user.id }, { status: 201 });
} catch (err) {
if ((err as any).code === "P2002")
return NextResponse.json({ error: "duplicate" }, { status: 409 });
return NextResponse.json({ error: "internal" }, { status: 500 });
}
}import { Mandu } from "@mandujs/core"; import { SignupContract } from "@/spec/contracts/signup.contract"; export default Mandu.filling(SignupContract, async (ctx) => ctx.ok(await ctx.db.user.create({ ...ctx.body })) ).guard("auth").rateLimit({ rpm: 10 });
import { defineContract } from "@mandujs/core/contract"; import { z } from "zod"; export const SignupContract = defineContract({ method: "POST", request: z.object({ email: z.string().email(), password: z.string().min(8) }), response: z.object({ id: z.string() }), });
One command, 7 destinations.
Mandu generates platform configs for you. wrangler.toml · vercel.json · Dockerfile · …
اس کے ساتھ ہم آہنگ

باورچی خانے میں شامل ہوں
Mandu اوپن سورس ہے اور کمیونٹی سے چلتا ہے۔ AI ترقی کو محفوظ بنانے والے Guard بنانے میں ہماری مدد کریں۔