انتقل إلى المحتوى

واجهات REST بلغة TypeScript قائمة على العقود وآمنة افتراضيًا، مصممة للفرق التي تطوّر بمساعدة الذكاء الاصطناعي

يأتي DaloyJS بإعدادات آمنة افتراضيًا، ويرفض الإقلاع في الإنتاج عند وجود إعدادات خاطئة يعرفها، ويعمل دون أي اعتماديات وقت التشغيل، مع مسار نشر معزَّز وموقَّع بإثبات المصدر. لا يوجد إطار يجعل التطبيق آمنًا تمامًا أو يوقف كل هجمات سلسلة التوريد، لذا يوضح التوثيق ما هو مفعّل افتراضيًا، وما تفعّله أنت، وما يبقى من مخاطر.

صفحات البدء والأدلة الأساسية (التوجيه، التحقق، الأخطاء، OpenAPI، العميل مكتوب الأنواع، الأمان) متاحة بالعربية؛ أما بقية التوثيق والمدونة فبالإنجليزية.

$ pnpm create daloy@latest my-api
  • أكثر من 3000 اختبار ناجح للإطار
  • حدود التغطية: ≥90% للأسطر والدوال و≥92% للفروع
  • 0 اعتماديات وقت التشغيل
  • Node 24 LTS وNode 26+ وBun وDeno وCloudflare
  • ترخيص MIT
ᜇᜎᜓᜌ᜔ تعني Daloy «التدفق» في اللغة التاغالوغية (وتُنطق «دا-لوي»).حولالاسمدرس تعليمي: واجهة برمجة لمكتبة كتب

الأمان وسلسلة التوريد

آمن افتراضيًا: طبقة الحماية للشيفرة التي يولّدها الذكاء الاصطناعي

عندما تولّد نماذج الذكاء الاصطناعي الشيفرة، لا تعود سرعة كتابة المطوّر هي عنق الزجاجة، بل الأمان في وقت التشغيل وسلامة سلسلة التوريد. يفرض DaloyJS ضوابط الحماية في طبقة التشغيل: حدودًا لحجم جسم الطلب، ومهلات، وحماية من تلويث النماذج الأولية، وإخفاء تفاصيل أخطاء 5xx، ورفض الإقلاع عند الإعدادات الخاطئة، دون أي اعتماديات متعدية يمكن استغلالها.

إعدادات تشغيل آمنة افتراضيًا

على عكس الأطر التي تترك الحماية الأساسية للإضافات أو لتوجيه الأخطاء يدويًا، تبدأ نواة DaloyJS والحماية مفعّلة: حدود لحجم الجسم، ومهلات للطلبات، وتحليل JSON محمي من تلويث النماذج الأولية، واستجابات 405 Method Not Allowed صحيحة، وإخفاء لتفاصيل أخطاء 5xx يفشل بأمان (مفعّل في كل مكان عدا بيئة تطوير أو اختبار مُعلنة صراحةً). وفي الإنتاج يرفض الإقلاع عند الإعدادات الخاطئة التي يعرفها، مثل أسرار الجلسات الضعيفة أو ملفات تعريف ارتباط الجلسة دون حماية CSRF.
حدود الجسم (1 MiB افتراضيًا)مهلات الطلباتالحماية من تلويث النماذج الأوليةRFC 9457 problem+jsonتحقق صارم من المخططاتفحص الإعدادات عند الإقلاع

صفر اعتماديات وقت التشغيل

تثبيت @daloyjs/core يضيف صفر حزم متعدية بالضبط. لا سكربتات postinstall لمراجعتها، ولا ثغرات CVE مفاجئة من اعتماديات لم تخترها قط. لا يضيف الإطار شجرة اعتماديات خاصة به؛ أما بقية اعتماديات تطبيقك فتبقى مسؤوليتك.
0حزم متعدية في @daloyjs/core

قوالب معزَّزة لسلسلة التوريد

اختر pnpm في create-daloy وستجد pnpm-workspace.yaml معزَّزًا مسبقًا: يحظر ignoreScripts الحمولات الخبيثة في سكربتات التثبيت (لا الشيفرة التي تعمل عند الاستيراد)، وينتظر minimumReleaseAge لمدة 24 ساعة حتى تمر الإصدارات الخبيثة المنشورة حديثًا التي تُكتشف في الوقت المناسب، ويحافظ verifyStoreIntegrity على سلامة التثبيت. وتضيف حزمة الأمان الاختيارية GitHub Actions معزَّزة، وDependabot، وCODEOWNERS، وSECURITY.md، والتحقق من مصدر lockfile، وقوالب حاويات تعمل دون صلاحيات root ومع tini، وأداة daloy doctor للتحقق من إعدادات الإنتاج.
ignoreScriptsminimumReleaseAge لمدة 24 ساعةverifyStoreIntegrityActions مثبّتة بـ SHAتدقيق daloy doctor

قوالب مصممة للذكاء الاصطناعي

يتضمن كل مشروع ينشئه create-daloy ملف AGENTS.md ومهارات سياقية، ويمكن قراءة هذا التوثيق عبر MCP. تتعلم وكلاء البرمجة التي تقرأ AGENTS.md أعراف إطارك وقواعد التوجيه وأساسيات الأمان دون طقوس هندسة الأوامر.
يتضمن AGENTS.mdمهارات سياقيةقابل للقراءة عبر MCP

البث وقابلية المراقبة

أدوات لـ SSE وNDJSON تراعي الضغط العكسي، إضافة إلى خطّاف تتبع OpenTelemetry يُصدر مقاطع (spans) لخادم HTTP مع سمات الأعراف الدلالية.
SSE مع الضغط العكسيبث NDJSONمقاطع HTTP في OTel

قابل للنقل بين بيئات التشغيل

لا ترى النواة سوى Request → Response. أما المحولات فتعيش على الحافة: Node وBun وDeno وCloudflare Workers وVercel وFastly Compute وAWS Lambda. التطبيق نفسه والاختبارات نفسها.
Node 24+BunDenoCloudflare WorkersVercelAWS Lambda

قائم على العقود منذ التصميم

تعريف واحد للمسار هو المرجع الوحيد للتحقق والأنواع وOpenAPI 3.1 والعميل مكتوب الأنواع واختبارات العقود المدمجة، فلا يجد التباين أماكن كثيرة للاختباء.
تحقق في وقت التشغيلمواصفة OpenAPI 3.1عميل Hey API مكتوب الأنواعاختبارات عقود مدمجة

عملاء مكتوبو الأنواع مع Hey API

شغّل pnpm gen واحصل على SDK لـ fetch مكتوب الأنواع بالكامل، لأي مستهلك وفي أي مشروع TS، مولَّدًا من مواصفتك الفعلية. أو استغنِ عن توليد الشيفرة باستخدام العميل مكتوب الأنواع داخل العملية.
pnpm genدون إعدادSDK لـ fetch مكتوب الأنواع من طرف إلى طرف

كل ما تحتاجه مدمج

جلسات ملائمة للحافة، وWebSockets تستهلك من حصص تحديد المعدل نفسها التي يستهلكها HTTP، وسجلات منظَّمة، وإيقاف آمن: البنية الإنتاجية التي تجمعها عادةً من الإضافات، مع بقاء الاعتماديات صفرًا.
جلسات على الحافةتحديد المعدل في WebSocketسجلات منظَّمةإيقاف آمن

القياس والأداء

الأرقام، مع الملاحظات المرفقة

عندما تكرّر وكلاء الذكاء الاصطناعي استدعاء الأدوات وترسل طلبات عالية التزامن، تصبح الإنتاجية وزمن الإقلاع البارد أمرين حاسمين. يأتي DaloyJS بفحوص الأمان مفعّلة افتراضيًا، وتقيس هذه الاختبارات الأداء مع تفعيل كل وسائل الحماية.

كيف يقارن DaloyJS بغيره

أرقام حقيقية من مجموعة القياس الخاصة بالمستودع. اختر مقياسًا، لكن ضع في اعتبارك التحفظات أدناه، لأن أيًا من هذه المقارنات ليس مقارنة متكافئة تمامًا.

الاعتماديات المتعدية المثبّتة

كل حزمة يجلبها التثبيت هي سطح هجوم على أحد ما أن يثق به. DaloyJS وHono هما الوحيدان اللذان لا يجلبان أي اعتمادية.

ماذا يعني ذلك لك: حزم أقل تحتاج إلى الثقة بها تعني ثغرات CVE أقل ولا سكربتات postinstall مفاجئة. وانعدام الاعتماديات يعني أن الإطار لا يفتح أبوابًا خاصة به في سلسلة التوريد؛ أما بقية شجرة اعتمادياتك فتبقى مسؤوليتك.

الخلاصة: يثبّت DaloyJS صفر اعتماديات متعدية، متعادلًا مع Hono في أصغر سطح لسلسلة التوريد، بينما يجلب تطبيق NestJS آمن 86 اعتمادية.

Apple M3 Max · 16 cores · Node v26.4.0 · أكتوبر 2026 · @daloyjs/core 1.5.4 · الشيفرة في bench/cross-framework

لماذا هذه مقارنة بين التفاح والبرتقال

هذه الأطر ليست الأداة نفسها، لذا فالرسم المقارن وجهًا لوجه أقرب إلى المقارنة بين التفاح والبرتقال منه إلى سباق عادل. إليك بلغة بسيطة ما تثبته هذه الأرقام وما لا تثبته.
  • تفاح وبرتقال، لا مقارنة متكافئة. هذه أدوات مختلفة تؤدي مقادير مختلفة من العمل. في كل طلب، يتحقق DaloyJS من الجسم وفق مخطط Zod أو Valibot الخاص بك، ويطبّق ترويسات آمنة ومعرّف طلب وحدودًا لحجم الجسم ومهلات للطلبات، وكل ذلك افتراضيًا. أما التطبيقات «الدنيا» للأطر الأخرى فلا تقوم بشيء يُذكر من ذلك، وحتى «تكافؤ الأمان» نادرًا ما يطابقه بندًا ببند. لذا فجزء من كل رقم لـ DaloyJS هو أمان وتحقق كنت ستبنيهما بنفسك.
  • طريقة قياس الحجم مختلفة: DaloyJS حزمة واحدة بلا اعتماديات، بينما تحلّ الأطر الأخرى أشجارًا متعدية يعتمد حجمها الدقيق على وقت توليد ملف lockfile.
  • الإنتاجية تعتمد على طبيعة الحمل: مع سلسلة برمجيات وسيطة متقاربة لدى الطرفين، يتقدم DaloyJS على Hono بنحو 27% على مسارات GET هذه وبنحو 58% على مسار POST مع جسم الطلب، ويتحقق DaloyJS فوق ذلك من هذا الجسم بـ Zod. الخدمات الحقيقية مقيدة عادةً بقاعدة البيانات وعمليات الإدخال والإخراج، لا بتوزيع الإطار للطلبات، لذا نادرًا ما تتنبأ هذه الأرقام الدقيقة بسلوك الإنتاج.
  • بيئات تشغيل مستهدفة مختلفة: بعض الأطر (مثل Elysia) محسّنة لـ Bun، لكنها تُقاس هنا عبر محولات Node للحصول على أساس عادل في بيئة تشغيل واحدة.
  • جهاز واحد ولحظة واحدة: جهاز Apple M3 Max، وNode v26.4.0، وأكتوبر 2026، مع @daloyjs/core 1.5.4 وحمل آخر في الخلفية على الجهاز (قيس الإطاران الواحد تلو الآخر، لذا تصمد المقارنة أكثر من الأرقام المطلقة). عتادك وبيئة التشغيل والإصدارات لديك ستغيّر هذه الأرقام.

مصمم للآلات: لوكلاء الذكاء الاصطناعي وأدواته

DaloyJS جاهز لـ MCP

بروتوكول Model Context Protocol (MCP) هو المعيار المفتوح الذي يستخدمه وكلاء الذكاء الاصطناعي مثل Claude وCursor وVS Code لاستدعاء الأدوات وقراءة التوثيق. يدعمه DaloyJS من الطرفين: يمكن أن يصبح تطبيقك خادم MCP، وهذا التوثيق (بالإنجليزية) خادم MCP بالفعل.

حوّل واجهتك البرمجية إلى خادم MCP

يبني DaloyJS خوادم MCP باستخدام @daloyjs/core وحده، دون SDK: نقل Streamable HTTP، وتحقق من مخططات الإدخال، وحماية عند الإقلاع في الإنتاج ترفض التشغيل إذا لم يكن في سلسلة نقطة نهاية MCP خطّاف مصادقة. تتحقق هذه الحماية من وجود الخطّاف، وفي الإنتاج من أنه عمل في كل طلب، لا من أنه يرفض أحدًا، لذا اختبر المصادقة لديك أيضًا.

أنشئ خادم MCP ←
ts
import { App, bearerAuth, createMcpHandler, mcpRoutes } from "@daloyjs/core";

const mcp = createMcpHandler({
  serverInfo: { name: "inventory-mcp", version: "1.0.0" },
  tools: [/* أدواتك، مع مخططات إدخال مُتحقَّق منها */],
});

const app = new App();
app.use(bearerAuth({ validate: checkToken })); // بدون خطّاف مصادقة يرفض الإنتاج الإقلاع
for (const route of mcpRoutes("/mcp", mcp)) {
  app.route(route); // أصبحت واجهتك البرمجية خادم MCP أيضًا
}

اقرأ هذا التوثيق عبر MCP

نقطة نهاية عامة للقراءة فقط، يستطيع وكيل البرمجة لديك البحث فيها وقراءتها دون نسخ ولصق. لا حاجة إلى مفتاح API.

نقطة النهاية

وجّه أي عميل متوافق مع MCP إلى هذا العنوان:
https://daloyjs.dev/mcp
  • search_docsبحث بالكلمات المفتاحية في كل صفحات التوثيق، مرتّب حسب الصلة.
  • get_docقراءة النص الكامل لصفحة واحدة عبر مسارها أو معرّفها المختصر (slug).
  • list_docsاستعراض كل صفحات التوثيق المتاحة في استدعاء واحد.

أضفه إلى إعدادات عميل MCP لديك

json
{
  "mcpServers": {
    "daloyjs-docs": {
      "url": "https://daloyjs.dev/mcp"
    }
  }
}

تستخدم عميلًا يدعم stdio فقط؟ اربطه عبر npx -y mcp-remote https://daloyjs.dev/mcp.

حصر نطاق الضرر

العقود حواجز أمان، لا صياغة للزينة

في سير عمل يعتمد على الذكاء الاصطناعي، ليست العقود ترفًا جماليًا للبشر: إنها حدود تفرضها الآلة وتمنع تسرّب هياكل البيانات المتوهَّمة بين المكوّنات. يتحقق عقد مسار واحد من الطلبات بصرامة، ويضبط حدود الاستجابات، ويُصدر مواصفة OpenAPI 3.1 الحية والعميل مكتوب الأنواع.

تدفق العقدعرّف مرة واحدة ← وولّد الباقي
01العقدGET /books/:id + z.object(...)
02التحققوقت التشغيل، في الاتجاهين
03OpenAPI 3.1مواصفة حية + /docs
04عميل مكتوب الأنواعpnpm gen -> fetch SDK
ts
import { z } from "zod";
import { App, secureHeaders, rateLimit, requestId } from "@daloyjs/core";
import { serve } from "@daloyjs/core/node";

const app = new App({ bodyLimitBytes: 1 << 20, requestTimeoutMs: 5_000 });

// يطبّق new App() كلًا من requestId() وsecureHeaders() تلقائيًا؛
// هذه الاستدعاءات الصريحة تخصّص القيم الافتراضية (وتستبدلها) فقط.
app.use(requestId());
app.use(secureHeaders());
app.use(rateLimit({ windowMs: 60_000, max: 120 })); // افتراضيًا لكل عنوان IP؛ خلف وكيل، اضبط behindProxy أو keyGenerator

app.get(
  "/books/:id",
  {
    request: { params: z.object({ id: z.string() }) },
    responses: {
      200: { description: "Found", body: z.object({ id: z.string(), title: z.string() }) },
      404: { description: "Not found" },
    },
  },
  async ({ params }) => ({
    status: 200,
    body: { id: params.id, title: `Book ${params.id}` },
  }),
);

serve(app, { port: 3000 });

مرجع API مع Scalar، في سطر واحد

Scalar هو الخليفة الحديث لـ Swagger UI: سريع ونظيف، بوضع داكن أصلي وطلبات تجريبية مدمجة. وهو في DaloyJS واجهة التوثيق الافتراضية، لا إضافة: الخيار docs: true في منشئ App يركّب هذه الصفحة تلقائيًا على /docs ومواصفة OpenAPI 3.1 الحية على /openapi.json.

تُولَّد من عقود مساراتك دون شيفرة إضافية. تفضّل Swagger UI أو Redoc؟ كلاهما على بُعد حقل إعداد واحد. دليل OpenAPI وواجهة التوثيق ←

مفاضلات المنظومة

أفضل ما لدى المنافسين، بتنازلات أقل

لا يحاول DaloyJS الفوز في خانة واحدة، بل يحاول إزالة العمل الرابط بين أفضل الأفكار التي يحبها المطورون أصلًا.

تريداليوم: إعدادات pnpm الافتراضية + نواة بلا اعتماديات

تعزيز قابل للنقل لسلسلة التوريد في التطبيقات التي تبنيها

ما يقدمه DaloyJS

إعدادات تثبيت pnpm معزَّزة، وملفات lockfile مُتحقَّق من مصدرها، وSBOM + إثبات مصدر npm

تريداليوم: Hono

ملاءمة البيئات عديمة الخوادم / الحافة

ما يقدمه DaloyJS

نواة مبنية على معايير الويب، ومحولات لعدة بيئات تشغيل

تريداليوم: Fastify

عمليات وتوثيق ناضجان لـ Node

ما يقدمه DaloyJS

إضافات مغلّفة، وسجلات منظَّمة، وإيقاف آمن

تريداليوم: Elysia

تجربة تطوير حديثة تركز على TS وتدعم Bun

ما يقدمه DaloyJS

معالجات وسياق وعميل مكتوبة الأنواع من طرف إلى طرف

تريداليوم: FastAPI

أفضل تجربة مع OpenAPI

ما يقدمه DaloyJS

OpenAPI 3.1 مدمج من تعريف مسار واحد

تريداليوم: Hey API

أفضل توليد لعملاء مكتوبي الأنواع

ما يقدمه DaloyJS

pnpm gen ← SDK لـ fetch مكتوب الأنواع بالكامل

هل أنت جاهز للإطلاق بإعدادات آمنة افتراضيًا؟

أنشئ مشروعًا في ثوانٍ مع تثبيت معزَّز لمدير الحزم لديك، وتكامل مستمر مولَّد يحظر سكربتات التثبيت، وGitHub Actions مثبّتة، وDependabot، وCODEOWNERS، والتحقق من مصدر lockfile. ثم حافظ على العقد مع نمو التطبيق: التطبيق نفسه يعمل على Node وBun وDeno وCloudflare Workers.

ادعم المشروع

إن وفّر عليك DaloyJS بعض الوقت، يمكنك أن تهديني فنجان قهوة

DaloyJS مجاني ومرخّص بترخيص MIT. إن ساعدك التوثيق أو المقالات أو الإطار نفسه على إطلاق شيء ما بقدر أقل من المتاعب، فإن فنجان قهوة طريقة معقولة تمامًا لإبقاء العمل مستمرًا.