
مشاركة آمنة ومؤقتة للأسرار للمطورين.
مشاركة سرية مؤقتة وآمنة للمطورين.
توقف عن لصق الأسرار في Slack. enseal يجعل المسار الآمن أسرع من المسار غير الآمن — شارك ملفات .env والأسرار عبر قنوات مشفرة ذات استخدام واحد بأمر واحد وبدون إعدادات.```bash
$ enseal share .env Share code: 7-guitarist-revenge Secrets: 14 variables (staging) Expires: on first receive
$ enseal receive 7-guitarist-revenge ok: 14 secrets written to .env
## التثبيت
### من crates.io```bash
cargo install enseal
git clone https://github.com/FlerAlex/enseal.git cd enseal cargo build --release
### الملفات الثنائية المبنية مسبقاً
قم بالتنزيل من [GitHub Releases](https://github.com/FlerAlex/enseal/releases) لأنظمة Linux (x86_64, aarch64)، macOS (Intel, Apple Silicon)، وWindows.
## بداية سريعة
### الوضع المجهول (بدون إعداد)
شارك الأسرار باستخدام رمز لمرة واحدة. لا مفاتيح، لا حسابات — يعمل فوراً.```bash
# terminal 1 (sender)
enseal share .env
Share code: 7-guitarist-revenge
Secrets: 14 variables
Expires: on first receive
# terminal 2 (recipient) — enter the code
enseal receive 7-guitarist-revenge
ok: 14 secrets written to .env
يعمل أيضًا مع الأسرار الفردية:```bash
echo "my-api-token" | enseal share --label "API key" Share code: 4-orbital-hammock
enseal receive 4-orbital-hammock my-api-token
يجب أن يكون كلا الطرفين مفتوحين في نفس الوقت — ينتظر المرسل حتى يتصل المستلم.
### Identity mode (key-based, no codes)
للفرق التي لديها ثقة مفاتيح راسخة. شفر إلى اسم، لا حاجة للتنسيق.```bash
# one-time setup
enseal keys init
enseal keys export > my-key.pub # share this with teammates
enseal keys import teammate-key.pub # import theirs
# sender encrypts to recipient by name
enseal share .env --to sarah
# or push through the public relay (no codes at all)
enseal share .env --to sarah --relay wss://relay.enseal.dev
# or produce an encrypted file (no network)
enseal share .env --to sarah --output ./drop/
enseal inject 7-guitarist-revenge -- npm start
enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up
enseal inject ./staging.env.age -- python manage.py runserver
الأسرار توجد فقط في ذاكرة العملية الفرعية. عند خروجها، تختفي.
## الميزات
### ثلاثة أوضاع للمشاركة
**الوضع المجهول** (الافتراضي) — قائم على ثقب دودي، بدون إعداد. كل ما تحتاجه هو رمز مفهوم للبشر. المصادقة المتبادلة SPAKE2 تمنع هجمات الوسيط (MITM).```bash
enseal share .env # generates wormhole code
enseal receive 7-guitarist-revenge # uses code
مع --relay، يتجاوز الوضع المجهول wormhole ويستخدم نقل الترحيل enseal بدلاً من ذلك. يجب على كلا الجانبين استخدام نفس الترحيل:```bash
enseal share .env --relay ws://relay.internal:4443 # generates channel code
enseal receive 3421-amber-frost --relay ws://relay.internal:4443
**الرفع غير المتزامن (`--upload`)** — للمرسل فقط. يقوم بالتشفير محليًا ويرسل إلى [burnurl.dev](https://burnurl.dev)، ليعيد رابطًا ذاتي التدمير يفتحه المستلم في المتصفح. لا حاجة لـ CLI من جانب المستلم.```bash
enseal share .env --upload
# Secret URL: https://burnurl.dev/s/a3f9c2e1...
# Expires: 2026-03-08 19:42:00 UTC (24h)
# Reads: 1 (self-destructs on first open)
يفتح المستلم الرابط في أي متصفح — لا حاجة لتثبيت enseal. أضف --passphrase لتشفير من جهة العميل قبل الرفع (يرى الخادم نصًا مشفرًا فقط):```bash
enseal share .env --upload --passphrase # prompts for passphrase
enseal share .env --upload --ttl 4 # 4-hour TTL (max 24)
يتطلب الوصول إلى واجهة برمجة التطبيقات (API) خطة Pro أو Team على burnurl.dev. اضبط `BURNURL_API_KEY` على مفتاحك. تجاوز عنوان URL الأساسي للنسخ المستضافة ذاتيًا: `BURNURL_URL=https://burnurl.internal`.
**وضع الهوية** — تشفير بالمفتاح العام لأعضاء الفريق المعروفين. تشفير إلى اسم.```bash
enseal keys init # one-time setup
enseal share .env --to sarah # encrypt to sarah's public key
وضع الهوية يدعم ثلاثة خيارات للنقل:```bash
enseal share .env --to sarah
enseal share .env --to sarah --relay wss://relay.enseal.dev
enseal share .env --to sarah --output ./drop/
### إدخال مرن
يقبل enseal الأسرار من مصادر متعددة:```bash
# .env file (default)
enseal share .env
enseal share staging.env
# environment profile
enseal share --env staging # resolves to .env.staging
# pipe from stdin
echo "sk_live_abc123" | enseal share
cat secrets.env | enseal share
pass show stripe/key | enseal share --to sarah
# inline (careful — visible in shell history)
enseal share --secret "API_KEY=sk_live_abc123"
# wrap raw string as KEY=VALUE
echo "sk_live_abc123" | enseal share --as STRIPE_KEY
${VAR} تشير مراجع ${VAR} إلى القيم الموسعة بالكامل قبل الإرسال، لذا يتلقى المستلمون تلك القيم:```env
DB_HOST=postgres.internal
DB_PORT=5432
DATABASE_URL=postgres://user:pass@${DB_HOST}:${DB_PORT}/myapp
يدعم صيغة الاسترجاع `${VAR:-default}`. يتم اكتشاف المراجع الدائرية والمستقبلية ورفضها. استخدم `--no-interpolate` لإرسال صيغة `${VAR}` الخام.
### التصفية
التحكم في أي المتغيرات يتم إرسالها:```bash
# exclude public/non-secret vars
enseal share .env --exclude "^PUBLIC_|^NEXT_PUBLIC_"
# send only matching vars
enseal share .env --include "^DB_|^API_"
# skip .env parsing entirely (send raw file)
enseal share .env --no-filter
يتكيف الإخراج مع ما تم إرساله:```bash
enseal receive CODE ok: 14 secrets written to .env
enseal receive CODE --output staging.env
enseal receive CODE sk_live_abc123
enseal receive CODE --clipboard ok: copied to clipboard
enseal receive CODE --no-write
enseal receive ./staging.env.age ok: signature verified, file decrypted ok: 14 secrets written to .env
### Inject
استقبل الأسرار وقم بحقنها مباشرة كمتغيرات بيئة في عملية فرعية. الأسرار لا تلمس نظام الملفات أبدًا.```bash
# anonymous mode: inject via wormhole code
enseal inject 7-guitarist-revenge -- npm start
# identity mode: listen for incoming transfer on relay
enseal inject --listen --relay wss://relay.enseal.dev -- docker compose up
# from encrypted file drop
enseal inject ./staging.env.age -- python manage.py runserver
مع --listen، يتصل المستقبل بالمرحّل وينتظر. يرسل المرسِل باستخدام enseal share .env --to alex --relay wss://relay.enseal.dev — لا يتم تبادل أي رموز، ولا حاجة لأي تنسيق.
إلى جانب المشاركة، يُعد enseal مجموعة أدوات أمان كاملة لملفات .env:```bash
enseal check error: missing from .env (present in .env.example): JWT_SECRET, REDIS_URL
enseal diff .env.development .env.staging