انتقل إلى المحتوى
NanoFlags
ابدأ مجانًا

المنصة

منصة واحدة للأعلام،والاختبار، والإصدار الآمن.

استهدف المستخدمين، واختبر القواعد، وراجع التغيير، ثم سلّمه حزمةً موقّعة إلى كل SDK متصل في نحو 0.2 ثانية. وكل خطوة تترك سجلًا يمكنك التحقق منه.

checkout-v2Production · draftpublished r184
booleanreleaseclient-exposedEnabled
  1. Rule 01Internal staff
    contextin segmentinternal-staff serve true
  2. Rule 02EU rollout25% → 50%
    regionin[EU]ANDsignedIneqtrue
    Rollout by key
    50%
    true inside · false otherwise
Default
falseenabled, no rule matched
Off
falseflag disabled
Draft vs published

rules[1].serve.percentage

- 25

+ 50

Draft differs from r184. SDKs keep r184 until you publish.

Open change request
flags / checkout-v2واجهة المنتج · بيانات للتوضيح
  1. قواعد مرتبة

    أول قاعدة تنطبق هي التي تحسم النتيجة، وكل نتيجة تحمل القاعدة التي طابقتها وسببها.

  2. طرح تدريجي حتمي

    تجزئة MurmurHash3 لمفتاح العلم ومفتاح المستخدم. رفع النسبة من 25% إلى 50% يُبقي كل من كان داخلها.

  3. مسودة ثم نشر

    التعديلات تغيّر المسودة فقط، ولا يصل شيء إلى أي SDK قبل نشر نسخة جديدة.

الأعلام

قيم بأنواع محددة، لا مجرد تشغيل وإيقاف.

أعلام من نوع boolean وstring وnumber وJSON، لكل منها غرض ومدة صلاحية. مفتاح العلم ونوعه لا يتغيران أبدًا، فلا تنكسر الشيفرة التي تقرؤه.

  • أربعة أنواع: boolean وstring وnumber وJSON، وتُتحقَّق القيم من النوع (ومن JSON schema اختياري) قبل أن يُسمح بحفظها.
  • غرض لكل علم (إصدار، تجربة، تشغيلي، صلاحيات)، وأعلام دائمة لمفاتيح الإيقاف الطارئ.
  • إتاحة لكل علم على حدة لجهة العميل: مفاتيح المتصفح لا تستقبل إلا الأعلام المتاحة للعميل.
  • الأعلام تُؤرشف ولا تُحذف، والعلم المؤرشف يُرجع القيمة الاحتياطية التي تمررها.

الطرح التدريجي بالنسبة المئوية حتمي

اكتب أي مفتاح مستخدم. تُحسب الخانة (bucket) في متصفحك بشيفرة MurmurHash3 نفسها التي يستخدمها الـ edge والـ SDK والـ CLI وCI، فتقع في العمود نفسه في كل صف.

hash("checkout-v2", "user_1") → 40.61 < 50 ✓ · rollout 50%

الاستهداف

قواعد تقرؤها، ونتائج تستطيع تفسيرها.

القواعد بيانات تُقيَّم بالترتيب. تقارن الشروط سمات السياق أو تعيد استخدام الشرائح، وكل تقييم يذكر القاعدة التي حسمت النتيجة وسبب ذلك.

  • 15 عاملًا للمقارنة: التساوي، والقوائم، والنصوص، والأرقام، والوجود، والشرائح.
  • تُعرَّف الشرائح مرة واحدة لكل مشروع، ويمكن أن تشير إحداها إلى أخرى حتى أربعة مستويات.
  • لا تُنفَّذ أي شيفرة للمستخدم أثناء التقييم، والتقييم لا يرمي استثناءً أبدًا.
كيف يُقيَّم العلم

جرّب سياقًا

checkout-v2 · r184

قواعد توضيحية للعلم checkout-v2

  1. 01 segment internal-staff → true
  2. 02 region in ["EU"] AND signedIn = true → 50% true
  3. default → false
جرّب سياقًا

القيمة

false

السبب

rule_match

القاعدة

02

الخانة

56.82

يُقيّمها @nanoflags/engine داخل متصفحك · قواعد للتوضيح

البيئات

قارن قبل أن تُرقّي.

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

  • تبدأ المشاريع الجديدة ببيئات Development وStaging وProduction، وتكون Production محمية منذ البداية.
  • الترقية لا تنشر شيئًا، ويُربط النشر التالي في البيئة الهدف بسجل الترقية.
  • إذا تغيّرت البيئة الهدف أثناء مراجعتك، تُرفض الترقية بدلًا من الكتابة فوق التغيير.
Staging → Productiondrafts2 differences
  • checkout-v2Staging · 50% · EU, signed inProduction · 25% · EU, signed in
  • new-pricing-pageStaging · on · internal-staffProduction · off
  • search-rankingStaging · "relevance-v2"Production · "relevance-v2"
  • dark-modeStaging · onProduction · on

Promotion record

source
staging r212 · draft matched
target
production draft · base r184
checksum
a41e09 → 7c0b3d
publish
linked on the next publish
Promote 2 flags
settings / environments / promoteواجهة المنتج · بيانات للتوضيح

فحوص السيناريوهات

اختبارات وحدات لتغييرات الأعلام.

السيناريو سياق محفوظ مع القيمة التي تتوقعها. شغّل السيناريوهات على المسودة قبل النشر، من لوحة التحكم أو في CI. وحيث تكون إلزامية، ينتظر النشر حتى ينجح كل سيناريو ضمن النطاق على تلك المسودة بعينها.

  • النجاح يعني التطابق التام: لا تحويل للأنواع، ولا نجاح جزئي.
  • أي تعديل على المسودة يُسقط احتساب التشغيلات السابقة.
  • المحرك نفسه يعمل في لوحة التحكم والـ CLI وGitHub Action والـ SDK.

شغّلها في CI

nanoflags scenarios run --source draft
Scenarios · checkout-v2draft 9f3c1a1 failing
  • EU signed-in users get the new checkout

    { region: "EU", signedIn: true, key: "u_18" }

    expected trueactual true

  • Signed-out visitors keep the old checkout

    { region: "EU", signedIn: false }

    expected falseactual false

  • Internal staff always see it

    { staff: true, region: "US" }

    expected trueactual true

  • US customers stay out of the rollout

    { region: "US", signedIn: true }

    expected falseactual truematched Rule 02 (region in [EU, US])

3 of 4 passed on this draftPublish blocked by scenario checks
source: draft · productionواجهة المنتج · بيانات للتوضيح

طلبات التغيير

يوافق شخص آخر، لا صاحب التغيير.

اجمع الأعلام التي تعدّلها في طلب تغيير واحد مع سبب واضح. وحيث تُشترط الموافقة، لا يتم النشر إلا عبر تغيير حصل على العدد الكافي من الموافقات المستقلة، وكل موافقة مرتبطة بالمسودة نفسها التي رُوجعت.

  • لا يستطيع صاحب التغيير الموافقة عليه، ولا أي شخص عدّل المسودة منذ بدء التغيير.
  • إذا عُدّلت المسودة بعد الموافقة، تصبح الموافقة متقادمة.
  • لا تتجاوز مفاتيح API المراجعة: مفتاح المسؤول لا يستطيع النشر حيث تُشترط الموافقة.
كيف يعمل أمان الإصدارات
Raise checkout-v2 to 50% in EUProduction · base r184approved
  1. draft
  2. testing
  3. awaiting_approval
  4. approved
  5. published

author maya

draft 9f3c1a

reason Error rate flat for 48 h at 25%. Next step of the rollout plan.

  • Scenario checks

    4 / 4 passed on draft 9f3c1a · CI key

  • Approvals · 1 required

    • mayaauthor · cannot approve
    • samedited this draft · cannot approve
    • leeapproved 9f3c1a · 12:04 UTC
requirements metPublish r185
changes / raise-checkout-v2واجهة المنتج · بيانات للتوضيح

التسليم

يُوقَّع عند المصدر، ويُدفع إلى كل SDK.

يُوقَّع كل نشر بخوارزمية Ed25519 ويُدفع عبر WebSockets على شبكة حافة عالمية. يتحقق الـ SDK منه، ويستبدله دفعة واحدة، ويواصل التقييم محليًا.

كيف نقيس ذلك

222ms

p50، من تثبيت قاعدة البيانات حتى مستمع الـ SDK

326ms

p95، على المسار نفسه

latency_summary · آخر 24 ساعة · 1,418 عيّنة

  • التقييم محلي ومتزامن: لا طلب شبكة لكل علم.
  • إذا انقطع الاتصال، يواصل الـ SDK التقييم بآخر إعدادات تحقّق منها.
  • مفاتيح المتصفح لا تستقبل إلا الأعلام المتاحة للعميل والشرائح التي تستخدمها.

الـ SDK والأدوات

يندمج في طريقة عملك الحالية.

حزم SDK أصلية لـ JavaScript/TypeScript وPython وGo، ومزوّد OpenFeature لكل منها، وأي لغة أخرى عبر OFREP، وأدوات لـ CI وطلبات الدمج. والشيفرة التي تعمل داخل تطبيقك مرخّصة بـ Apache-2.0.

  • @nanoflags/sdk

    SDK لـ JavaScript وNode

    تقييم محلي، وتحقق من التوقيع، وآخر إعدادات سليمة. بلا أي اعتماديات وقت التشغيل.

    التوثيق
  • pip install nanoflags

    SDK لـ Python

    التثبيت بـ pip install nanoflags. تقييم محلي، وتحديثات حية، وتحقق من التوقيعات افتراضيًا، وغلاف asyncio. Python 3.9 فأحدث.

    التوثيق
  • github.com/motazalmaroai/nanoflags-sdk/go

    SDK لـ Go

    تقييم محلي دون أي إدخال أو إخراج، وتحديثات حية، وتحقق من التوقيعات افتراضيًا، وآمن للاستخدام المتزامن. Go 1.22 فأحدث.

    التوثيق
  • @nanoflags/sdk/react

    React

    مزوّد وhooks فوق الـ SDK. مرّر حزمة bootstrap ليتطابق العرض على الخادم والعميل.

    التوثيق
  • @nanoflags/openfeature-provider

    مزوّدات OpenFeature

    استدعِ الأعلام عبر واجهة OpenFeature القياسية في JavaScript (الخادم والويب) وPython وGo، ويتولى NanoFlags التقييم المحلي من تحتها.

    التوثيق
  • @nanoflags/cli

    CLI

    أنشئ الأعلام، وقيّم سياقًا، وشغّل السيناريوهات، وافحص مراجع الشيفرة، وصدّر كل شيء.

    التوثيق
  • integrations/github-action

    GitHub Action

    يشغّل فحوص السيناريوهات لكل commit ويُفشل المهمة إذا فشل أحدها.

    التوثيق
  • github.com/apps/nanoflags

    تطبيق GitHub

    حالة الأعلام في تعليق على طلب الدمج، وفحص باسم “NanoFlags scenarios”.

    التوثيق
  • /ofrep/v1

    أي لغة عبر OFREP

    يطبّق الـ edge بروتوكول OpenFeature Remote Evaluation Protocol، فتستطيع مزوّدات OFREP في Java و.NET وPHP وRuby وSwift وKotlin وغيرها قراءة أعلامك.

    التوثيق
افتح مركز المطورين

السجل

كل نسخة محفوظة، وأي نسخة قابلة للاستعادة.

كل نشر يُنشئ نسخة مرقّمة غير قابلة للتعديل. الاستعادة تحمّل نسخة قديمة إلى المسودة ثم تنشرها كنسخة جديدة، فلا يُعاد كتابة التاريخ أبدًا.

  • تكتب قاعدة البيانات سجل التدقيق بنفسها لا المتصفح، وهو للقراءة فقط.
  • استعادة نسخة تُعيد معها الشرائح التي كانت تستخدمها أيضًا.
  • صدّر سجل التدقيق في خطة Scale، وصدّر المشروع كاملًا بصيغة JSON من لوحة التحكم أو الـ CLI.
RevisionsProductionlive r185
  • r185

    Raise checkout-v2 to 50% in EU

    lee · 12:06

    current
  • r184

    checkout-v2 to 25% in EU

    lee · 10 Nov 09:12

    Restore to draft
  • r183

    Enable new-pricing-page for internal staff

    omar · 9 Nov 16:40

    Restore to draft

audit log

12:06:14leepublished r185 · production

12:04:51leeapproved change · draft 9f3c1a

12:01:09ciscenarios 4/4 passed · commit 3e1f2a0

11:58:32mayaedited draft · checkout-v2

history · times in UTCواجهة المنتج · بيانات للتوضيح

مرّر إصدارك القادم عبره.

خطة Explore مجانية. وتضيف خطة Team الموافقات وفحوص السيناريوهات الإلزامية للبيئات المحمية.