مستندات
شروع سریع
وایبفارسی پکیج npm نیست. هر کامپوننت به شکل یک فایل داخل پروژهتون نوشته میشه و از همان لحظه مال شماست، پس هر طور خواستید تغییرش بدید. برای شروع دو راه دارید: خودکار با CLI، یا دستی با کپی کردن همان فایلها. خروجی هر دو یکیه.
نصب و راهاندازی
در پروژهی Next.js یا Vite با Tailwind v4، دو دستور CLI فونت، جهت صفحه و توکنهای تم را برایتون مینویسه. اگر CLI نمیخواید یا ساختار پروژهتون فرق داره، راه دستی همان فایلها را نشان میده تا خودتون بگذارید.
با CLI
دو دستور. init پروژه را راستچین و فارسی میکنه و add کامپوننتها را با وابستگیهاشون میآوره.
کپی فایلها
چند فایل پایه را خودتون مینویسید و کد هر کامپوننت را از تب «کد» صفحهاش کپی میکنید. بدون هیچ ابزار اضافه.
نصب خودکار با CLI
داخل پروژهی React با Tailwind v4 اجرا کنید. CLI فایلها را مینویسه و پکیجهای لازم را با همان مدیر پکیج پروژه نصب میکنه، یعنی npm، pnpm، yarn یا bun.
- ۱
پروژه را آماده کنید
یکبار در ریشهی پروژه اجرا کنید.
$npx vibefarsi@latest initفایلهایی که نوشته میشن
lang="fa" dir="rtl"روی<html>، در Next.js داخلapp/layout.tsxو در Vite داخلindex.html- فونت Vazirmatn، در Next.js با فایل
app/fonts.tsو کلاس آن روی html، و در بقیهی پروژهها با import از Google Fonts داخل CSS - توکنهای تم گرافیت و نگاشت Tailwind در
globals.css lib/utils.tsوlib/jalali.tsاز رجیستریvibefarsi.jsonو مسیر@/*در tsconfig
نکتهاگر پروژه پوشهی
srcداره، همهی این فایلها داخل src نوشته میشن. بهglobals.cssوlayout.tsxفقط چند خط اضافه میشه و از نو نوشته نمیشن. فایلهای lib هم اگر از قبل باشن دست نمیخورن، مگر با--overwrite. - ۲
کامپوننتها را اضافه کنید
هر کامپوننت با وابستگیهاش میآد. مثلاً calendar فایل
lib/jalali.tsرا هم میآوره و پکیجهای npm لازم نصب میشن. بعد از نوشتن، فایل مال خودتونه و میتونید هر طور خواستید تغییرش بدید.$npx vibefarsi add button calendar priceمقصد فایلها
- کامپوننت
components/ui/ - بلاک
components/blocks/ - انیمیشن
components/animations/ - پسزمینه
components/backgrounds/ - قالب
components/templates/ - تم
globals.css
اسم کامپوننتها
slug هر کامپوننت کنار عنوان صفحهاش نوشته شده. فهرست کامل را با این دستور ببینید:
$npx vibefarsi list - کامپوننت
- ۳
گزینهها (اختیاری)
هر دو دستور این گزینهها را قبول میکنن.
گزینه کار --font iransansاگر IRANSans-Reg.woffدر/fontsیا/publicباشه، همان را بهجای Vazirmatn وصل میکنه--theme saffronتم دیگری بهجای گرافیت. بعداً هم میتونید با npx vibefarsi add saffronعوضش کنید--registry http://localhost:3000/rرجیستری روی همین ماشین، برای وقتی روی خود مخزن کار میکنید --dry-runفقط نشان میده چه فایلهایی نوشته میشن و چیزی را تغییر نمیده --overwriteفایلهای موجود را جایگزین میکنه --no-installپکیجهای npm را نصب نمیکنه
نصب دستی
همان چیزی که init مینویسه، اینجا فایلبهفایل آمده. هر بلوک را کپی کنید و در مسیر گفتهشده بگذارید. پیشنیازش React با Tailwind v4 هست.
- ۱
جهت و فونت
روی html،
dir="rtl"وlang="fa"بگذارید و فونت را با یک متغیر CSS وصل کنید. این نمونهی Next.js با Vazirmatn از Google Fonts هست:app/layout.tsx1// app/layout.tsx2import { Vazirmatn } from "next/font/google"3import "./globals.css"45const vazirmatn = Vazirmatn({6 subsets: ["arabic", "latin"],7 variable: "--font-vazirmatn",8 display: "swap",9})1011export default function RootLayout({ children }) {12 return (13 <html lang="fa" dir="rtl" className={vazirmatn.variable}>14 <body className="bg-background text-foreground font-sans">{children}</body>15 </html>16 )17}نکتهبرای IRANSans، فایلهای woff را در
/fontsبگذارید و باnext/font/localهمان متغیر را بسازید. در Vite بهجای next/font، این خط را بالای CSS بگذارید:globals.css (فقط Vite)1@import url("https://fonts.googleapis.com/css2?family=Vazirmatn:wght@400;500;600;700&display=swap"); - ۲
توکنهای تم
کامپوننتها رنگشون را فقط از این متغیرها میگیرن. این بلوک را در
globals.cssبگذارید.app/globals.css (تم گرافیت)1/* گرافیت، پیشفرض. این بلوک را در :root بگذارید. */2:root {3 color-scheme: dark;4 --background: oklch(0.115 0.002 285);5 --foreground: oklch(0.975 0 0);6 --card: oklch(0.14 0.002 285);7 --card-foreground: oklch(0.975 0 0);8 --popover: oklch(0.16 0.002 285);9 --popover-foreground: oklch(0.975 0 0);10 --primary: oklch(0.975 0 0);11 --primary-foreground: oklch(0.13 0 0);12 --secondary: oklch(0.2 0.002 285);13 --secondary-foreground: oklch(0.975 0 0);14 --muted: oklch(0.175 0.002 285);15 --muted-foreground: oklch(0.63 0.004 285);16 --accent: oklch(0.2 0.002 285);17 --accent-foreground: oklch(0.975 0 0);18 --destructive: oklch(0.65 0.2 25);19 --success: oklch(0.75 0.16 160);20 --warning: oklch(0.82 0.16 80);21 --border: oklch(1 0 0 / 8%);22 --input: oklch(1 0 0 / 11%);23 --ring: oklch(0.7 0 0);24 --brand: oklch(0.8 0.165 65);25 --brand-foreground: oklch(0.22 0.06 60);26 --radius: 0.625rem;27}نکتهتمهای دیگر (فیروزه، زعفران، انار، لاجورد، کاغذ) در سیستمهای طراحی هستن. همان ساختار را دارن و جای همین بلوک مینشینن.
- ۳
نگاشت Tailwind
این بلوک متغیرهای بالا را به کلاسهای Tailwind مثل
bg-backgroundوtext-muted-foregroundوصل میکنه. زیر بلوک تم بگذارید. اگر اسم متغیر فونتتون فرق داره، خط--font-sansرا با همان عوض کنید.app/globals.css (نگاشت Tailwind)1/* app/globals.css */2@theme inline {3 --color-background: var(--background);4 --color-foreground: var(--foreground);5 --color-card: var(--card);6 --color-card-foreground: var(--card-foreground);7 --color-popover: var(--popover);8 --color-popover-foreground: var(--popover-foreground);9 --color-primary: var(--primary);10 --color-primary-foreground: var(--primary-foreground);11 --color-secondary: var(--secondary);12 --color-secondary-foreground: var(--secondary-foreground);13 --color-muted: var(--muted);14 --color-muted-foreground: var(--muted-foreground);15 --color-accent: var(--accent);16 --color-accent-foreground: var(--accent-foreground);17 --color-destructive: var(--destructive);18 --color-success: var(--success);19 --color-warning: var(--warning);20 --color-border: var(--border);21 --color-input: var(--input);22 --color-ring: var(--ring);23 --color-brand: var(--brand);24 --color-brand-foreground: var(--brand-foreground);25 --radius-sm: calc(var(--radius) - 4px);26 --radius-md: calc(var(--radius) - 2px);27 --radius-lg: var(--radius);28 --radius-xl: calc(var(--radius) + 4px);29 --font-sans: var(--font-vazirmatn), "Vazirmatn", ui-sans-serif, system-ui, sans-serif;30}3132@layer base {33 body {34 font-size: 16.5px;35 line-height: 1.8;36 letter-spacing: 0;37 text-rendering: optimizeLegibility;38 -webkit-font-smoothing: antialiased;39 }40} - ۴
ابزارهای کمکی
cnبرای کلاسها،faوfaNumberبرای اعداد فارسی وformatTomanبرای قیمت. درlib/utils.tsبگذارید.lib/utils.ts1export type ClassValue = string | number | bigint | null | undefined | false | ClassValue[];23/** Minimal class joiner (swap for clsx + tailwind-merge when the library grows). */4export function cn(...inputs: ClassValue[]): string {5 const out: string[] = [];6 for (const i of inputs) {7 if (!i) continue;8 if (Array.isArray(i)) {9 const nested = cn(...i);10 if (nested) out.push(nested);11 } else {12 out.push(String(i));13 }14 }15 return out.join(" ");16}1718const FA_DIGITS = ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"];1920/** Convert Latin digits in a string/number to Persian digits: 1405 -> ۱۴۰۵ */21export function fa(value: string | number): string {22 return String(value).replace(/\d/g, (d) => FA_DIGITS[Number(d)]);23}2425/** Persian digits back to Latin (for parsing user input). */26export function en(value: string): string {27 return value.replace(/[۰-۹]/g, (d) => String(FA_DIGITS.indexOf(d))).replace(/[٠-٩]/g, (d) => String(d.charCodeAt(0) - 0x0660));28}2930/** Thousands-separated Persian number: 12450000 -> ۱۲٬۴۵۰٬۰۰۰ */31export function faNumber(value: number): string {32 return fa(Math.round(value).toLocaleString("en-US")).replace(/,/g, "٬");33}3435/** Amount in toman with unit: 12450000 -> ۱۲٬۴۵۰٬۰۰۰ تومان */36export function formatToman(value: number): string {37 return `${faNumber(value)} تومان`;38}3940/** Percent with Persian digits and the Persian percent sign: 18 -> ۱۸٪ */41export function faPercent(value: number, digits = 0): string {42 return `${fa(value.toFixed(digits))}٪`;43}4445/** File size in Persian: 1258291 -> ۱٫۲ مگابایت */46export function faFileSize(bytes: number): string {47 if (bytes < 1024) return `${fa(bytes)} بایت`;48 if (bytes < 1024 ** 2) return `${fa((bytes / 1024).toFixed(0))} کیلوبایت`;49 return `${fa((bytes / 1024 ** 2).toFixed(1)).replace(".", "٫")} مگابایت`;50}نکتهتقویم و انتخاب تاریخ به
lib/jalali.tsهم نیاز دارن. آن را از /r/lib/jalali.json بردارید. - ۵
کامپوننتها
در صفحهی هر کامپوننت، تب «کد» را کپی کنید و در
components/ui/<slug>.tsxبگذارید. پکیجهای npm لازم و پیشنیازها در بخش «نصب» همان صفحه آمده. همهی کامپوننتها بهlucide-reactنیاز دارن.$کامپوننتهااز دکمه و ورودی شروع کنیدnpm i lucide-react
کار با هوش مصنوعی
- هر صفحه یک تب «پرامپت» داره که همان کامپوننت را به انگلیسی توضیح میده، با قوانین راستچین، فونت، اعداد و توکنها. آن را در Cursor، Claude Code یا Codex پیست کنید تا مدل همان کامپوننت را با سبک پروژهتون بسازه.
- اگر خروجی چپچین شد یا اعداد لاتین ماند، همان پرامپت را یکبار دیگر بفرستید و بگید re-check the Persian RTL rules. قوانین داخل همان پرامپت هست.
- نسخهی ماشینخوان هر مورد در /r/<بخش>/<slug>.json هست و CLI هم همان را میخونه.
سرور MCP
ابزارهای هوش مصنوعی به انگلیسی فکر میکنن. این پنج ابزار قوانین فارسی و کد رجیستری را به Cursor، Claude Code و Codex میدن تا بهجای Inter و چیدمان چپچین، کامپوننت وایبفارسی بسازن. آدرس سرور https://vibefarsi.ir/mcp هست و Node روی سیستم لازم نیست.
1{2 "mcpServers": {3 "vibefarsi": {4 "url": "https://vibefarsi.ir/mcp"5 }6 }7}- Cursor: همین JSON را در
.cursor/mcp.jsonپروژه، یا~/.cursor/mcp.jsonبگذارید. افزودن به Cursor - Claude Code:
claude mcp add --transport http vibefarsi https://vibefarsi.ir/mcp - Codex:
codex mcp add vibefarsi --url https://vibefarsi.ir/mcp
get_design_rulesقوانین راستچین، فونت، اعداد، فرم و توکنها. این را قبل از ساخت هر صفحه صدا بزنید.search_registryجستوجو بین کامپوننت، بلاک، انیمیشن، پسزمینه، قالب و تم، به فارسی یا انگلیسی.get_componentکد، پرامپت و مسیر نصب یک یا چند کامپوننت، همراه وابستگیهایی مثل jalali.get_themeتوکنهای CSS تم (پیشفرض گرافیت). مدل نباید از خودش رنگ بگذاره.scaffold_pageاز توضیح صفحه (پرداخت، ورود پیامکی، نوبت شمسی) یک ترکیب آماده میسازه.
اگر بخواید سرور روی سیستم خودتون اجرا بشه، بهجای URL از npx استفاده کنید:
1{2 "mcpServers": {3 "vibefarsi": {4 "command": "npx",5 "args": ["-y", "@vibefarsi/mcp"]6 }7 }8}برای کار روی همین مخزن، بهجای npx از npm run mcp استفاده کنید. فهرست ماشینخوان کامپوننتها هم در /r/<بخش>/<slug>.json هست، ولی این مسیر رجیستری CLI هست، نه MCP.
پرسشهای متداول
وایبفارسی رایگانه؟
- بله. پلن پولی نداریم و هیچ کامپوننتی قفل نیست. کد را کپی میکنید و مال خودتون میشه.
این یک پکیج npm از کامپوننتهاست؟
- نه. npx vibefarsi فایلها را داخل پروژهتون مینویسه و بعد از آن دیگه import از node_modules در کار نیست. پکیج npm فقط برای CLI و MCP هست.
با Next.js و Vite کار میکنه؟
- بله، روی React با Tailwind v4. CLI در Next.js فایل layout و در Vite فایل html را راستچین و فارسی میکنه.
با shadcn چه فرقی داره؟
- shadcn برای چیدمان چپچین و متن لاتین ساخته شده. وایبفارسی از پایه راستچینه و اعداد فارسی، تومان، تقویم شمسی، شبا و کد ملی داخل خود کامپوننتهاش هست. یک dir=rtl روی صفحه اینها را درست نمیکنه.
چطور نصب کنم؟
- دو دستور: اول npx vibefarsi@latest init و بعد npx vibefarsi add button calendar. راهنمای کامل در صفحهی شروع سریع هست.
سرور MCP به چه کاری میآد؟
- ابزارهای هوش مصنوعی به انگلیسی فکر میکنن و کامپوننت چپچین میسازن. سرور MCP قوانین فارسی و کد رجیستری را به Cursor و Claude Code میده. آدرسش https://vibefarsi.ir/mcp هست.