حزم SDK أصلية لـ JavaScript/TypeScript وPython وGo مع مزوّدات OpenFeature، وأي لغة أخرى عبر OpenFeature (OFREP). وأداة CLI وتكاملات GitHub لـ CI وطلبات الدمج. الشيفرة التي تعمل داخل تطبيقك مرخّصة بـ Apache-2.0، وكل حزمة إعدادات تستقبلها موقّعة.
تحمّل حزم الـ SDK الأصلية الإعدادات الموقّعة مرة واحدة، وتتحقق منها، وتقيّم داخل العملية نفسها مع تحديثات حية. وأي لغة أخرى تقرأ الأعلام نفسها عبر مزوّد OpenFeature OFREP.
حزم SDK أصلية
JavaScript / TypeScript
@nanoflags/sdk 0.4.0 · Node والمتصفحات وبيئات الـ edge وReact
الحزم الثلاث تشغّل محرك التقييم نفسه، وتُختبر على 21,998 حالة تقييم مشتركة مولّدة من المحرك المرجعي: المدخلات نفسها تعطي النتائج نفسها في JavaScript وPython وGo.
أي لغة عبر OpenFeature (OFREP)
يطبّق الـ edge في NanoFlags بروتوكول OpenFeature Remote Evaluation Protocol. وتتوفر مزوّدات OFREP رسمية لهذه اللغات وغيرها، فتستطيع الفرق التي تستخدمها الاتصال بـ NanoFlags اليوم:
الاستدعاءات محلية ومتزامنة، لا تُجري أي إدخال أو إخراج ولا ترمي استثناءً: دون حزمة تُرجع القيمة الاحتياطية.
checkout.ts
const on = flags.boolean("checkout-v2", false, { key: user.id, region: "EU" });
// Local and synchronous. Returns false only if no configuration has ever loaded.
import { createClient } from"@nanoflags/sdk";
import { NanoFlagsProvider, useFlag, useFlagsStatus } from"@nanoflags/sdk/react";
const client = createClient({
sdkKey: "nf_pub_…",
baseUrl: "https://edge.nanoflags.io",
bootstrap: window.__FLAGS__, // the bundle the server rendered with, so the first render matches
});
exportfunction App({ user }) {
return (
<NanoFlagsProvider client={client} context={{ key: user.id }}>
<Checkout />
</NanoFlagsProvider>
);
}
function Checkout() {
const v2 = useFlag("checkout-v2", false);
const { status } = useFlagsStatus(); // "not-ready" | "ready" | "stale"return v2 ? <NewCheckout /> : <OldCheckout />;
}
import os
from nanoflags import NanoFlags # pip install nanoflags
flags = NanoFlags(os.environ["NANOFLAGS_SDK_KEY"], service="checkout-api")
flags.wait_until_ready(timeout=5) # never raises
on = flags.bool_variation("checkout-v2", False, {"key": user.id, "region": "EU"})
# Evaluated locally. Falls back to False only if no config has ever loaded.
flags.on_change(lambda e: print(f"r{e.revision}", e.transport, e.latency_ms))
import nanoflags "github.com/motazalmaroai/nanoflags-sdk/go"
client, err := nanoflags.New(os.Getenv("NANOFLAGS_SDK_KEY"), nanoflags.WithService("checkout-api"))
if err != nil {
log.Fatal(err)
}
defer client.Close()
_ = client.WaitForReady(ctx) // nil once a configuration is in use
on := client.BoolVariation("checkout-v2", nanoflags.Context{"key": user.ID, "region": "EU"}, false)
// Evaluated locally. Falls back to false only if no config has ever loaded.
OpenFeature
أبقِ مواضع الاستدعاء قياسية.
تغلّف مزوّدات OpenFeature عميل NanoFlags: لـ SDK الخادم وSDK الويب في JavaScript، ولـ Python، ولـ Go. يبقى التقييم محليًا داخل المزوّد، ويواصل NanoFlags التحميل والتحديثات الحية. وتستخدم استدعاءات الأعلام في شيفرتك واجهة OpenFeature القياسية.
from openfeature import api
from openfeature.evaluation_context import EvaluationContext
from nanoflags import NanoFlags
from nanoflags.openfeature import NanoFlagsProvider # pip install "nanoflags[openfeature]"
api.set_provider_and_wait(NanoFlagsProvider(NanoFlags(sdk_key), close_client=True))
on = api.get_client().get_boolean_value("checkout-v2", False, EvaluationContext(targeting_key=user.id))
تعمل @nanoflags/cli بمفتاح CI (التصدير، والسيناريوهات، ومراجع الشيفرة) أو بمفتاح مسؤول (كل ما سبق، إضافة إلى إنشاء الأعلام والنشر). ومفاتيح الـ SDK مرفوضة.
nanoflags flags create <key> --type boolean
أنشئ علمًا بنوع وقيمة افتراضية واسم ووصف.
nanoflags eval <flag> --context '{…}'
قيّم سياقًا على المسودة أو على النسخة المنشورة، مع السبب ومسار التقييم.
nanoflags scenarios run --source draft
شغّل فحوص السيناريوهات لـ commit، ويكون رمز الخروج 1 إذا فشل أحدها.
nanoflags refs scan . --repo owner/name
اعثر على مراجع الأعلام في شيفرتك وارفعها.
nanoflags publish --expected-revision <n>
انشر المسودة وفق سياسة البيئة.
nanoflags export --out project.json
صدّر المشروع كاملًا بصيغة JSON.
مرّر المفتاح في NANOFLAGS_KEY لا كمعامل: المعاملات تظهر في قوائم العمليات وسجل الطرفية.
طريقتان لإدخال NanoFlags في طلبات الدمج: Action تضيفه إلى workflow، وتطبيق تثبّته مرة واحدة.
GitHub Action
يشغّل فحوص السيناريوهات لكل commit ويُفشل المهمة إذا فشل أحدها، ويرفع مراجع الشيفرة اختياريًا. استخدم مفتاح CI: يشغّل السيناريوهات ولا يستطيع النشر، والـ Action يرفض مفاتيح المسؤول.