- TypeScript 82.2%
- CSS 12.4%
- JavaScript 5.2%
- HTML 0.2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo/workflows | ||
| build | ||
| scripts | ||
| src | ||
| tests | ||
| .editorconfig | ||
| .gitignore | ||
| .prettierignore | ||
| .prettierrc | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| electron-builder.yml | ||
| electron.vite.config.ts | ||
| eslint.config.mjs | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| tsconfig.web.json | ||
| vitest.config.ts | ||
مفتاح (Muftah) — مدير مفاتيح OpenPGP / OpenPGP key manager
تطبيق سطح مكتب لـ Linux (يُغلَّف كـ AppImage) لإنشاء وإدارة مفاتيح OpenPGP وSSH لعدة مستخدمين. A Linux desktop app (packaged as an AppImage) for creating and managing OpenPGP and SSH keys for multiple users.
صُمم لشخص يتولّى توليد المفاتيح نيابةً عن مستخدمين لا يعرفون كيف ينشئونها بأنفسهم: تنشئ المفتاح السرّي والعام وشهادة الإبطال، وتحفظهم محلياً مع ملاحظاتك وتواريخ الانتهاء، ثم تصدّرهم وترسلهم بطريقتك الخاصة. Designed for someone who generates keys on behalf of users who cannot do it themselves: you create the secret key, public key and revocation certificate, store them locally with your notes and expiry dates, then export and deliver them your own way.
مبني على desktop-standard — راجع
STANDARD.mdوTHEME.mdهناك قبل أي تعديل. Built on desktop-standard — read itsSTANDARD.mdandTHEME.mdbefore changing anything.
التوثيق الكامل مع لقطات الشاشة: صفحة الويكي Full documentation with screenshots: wiki page
المميزات / Features
- إنشاء مفاتيح Ed25519 / Curve25519 (متوافقة 100% مع GnuPG) عبر OpenPGP.js v6، ومفاتيح SSH (Ed25519, RSA, ECDSA). / Ed25519 / Curve25519 keys (100% GnuPG-compatible) via OpenPGP.js v6, plus SSH keys (Ed25519, RSA, ECDSA).
- توليد تلقائي لشهادة الإبطال (Revocation Certificate) مع كل مفتاح. / Automatic revocation certificate with every key.
- لوحة مفاتيح بجدول كامل: الاسم، البريد، معرّف المفتاح، الخوارزمية، تواريخ الإنشاء/الانتهاء، الحالة، الملاحظات. / Keys dashboard with a full table: name, email, key ID, algorithm, create/expiry dates, status, notes.
- حالات ذكية: نشط / ينتهي قريباً (خلال 30 يوم) / منتهي / بلا انتهاء — تُحسب ديناميكياً. / Smart statuses: active / expiring soon (within 30 days) / expired / no expiry — computed dynamically.
- تصدير المفتاح العام / السرّي / شهادة الإبطال كملفات
.asc، أو تصدير الكل دفعة واحدة. / Export public / secret / revocation as.ascfiles, or export everything at once. - ملاحظات قابلة للتحرير لكل مفتاح، وبحث وفلترة. / Editable notes per key, with search and filtering.
- خزنة اختيارية تشفّر المفاتيح السرّية وشهادات الإبطال بكلمة مرور رئيسية (AES-256-GCM + scrypt). / Optional vault encrypting secret keys and revocation certificates with a master password (AES-256-GCM + scrypt).
- كلمة مرور اختيارية لكل مفتاح (passphrase). / Optional per-key passphrase.
- واجهة عربي (RTL) / إنجليزي (LTR) مع تبديل فوري، وخط Tajawal + Inter مضمّنين (بدون إنترنت). / Arabic (RTL) / English (LTR) UI with instant switching and embedded Tajawal + Inter fonts (offline).
- ثيم ثلاثي الحالات (النظام / فاتح / داكن) بألوان عنّابي/ذهبي. / Three-state theme (system / light / dark) in maroon/gold.
- نافذة قابلة للتكبير والتصغير (افتراضي 1200×780، حد أدنى 800×560)، بلا إيموجي، بتصميم إنتربرايز هادئ. / Resizable window (default 1200×780, min 800×560), no emoji, calm enterprise design.
التقنيات (أحدث النسخ المستقرة) / Stack (latest stable versions)
| الطبقة / Layer | التقنية / Tech |
|---|---|
| التغليف / Shell | Electron 44 + electron-builder (AppImage) |
| أدوات البناء / Build | electron-vite 5 + Vite 7 + TypeScript 5.9 |
| الواجهة / UI | React 19 + TypeScript |
| الترجمة / i18n | i18next + react-i18next |
| OpenPGP | openpgp 6 (Sequoia-compatible output) |
| الخطوط / Fonts | @fontsource/tajawal + @fontsource/inter (embedded) |
التثبيت والتشغيل / Install & run
المتطلبات / Requirements: Node.js 22+ و npm.
npm install
npm run dev # التطوير / development
npm test # الاختبارات / tests
npm run typecheck # فحص الأنواع / type checking
npm run lint # فحص الكود / linting
npm run gen:icon # توليد الأيقونات / generate icons
npm run dist # بناء AppImage / build AppImage
التحميل / Download
من صفحة Releases: نزّل أحدث ملف gpg-key-manager-<version>.AppImage، اجعله قابلاً للتنفيذ وشغّله.
From the Releases page: download the latest gpg-key-manager-<version>.AppImage, make it executable and run it.
chmod +x gpg-key-manager-*.AppImage
./gpg-key-manager-*.AppImage
الاستخدام / Usage
- إنشاء مفتاح: زر «مفتاح جديد» → اكتب الاسم والبريد (اختيارياً كلمة مرور وتاريخ انتهاء وملاحظات). / Create a key: "New key" button → enter name and email (optionally passphrase, expiry date and notes).
- عرض/تصدير: اضغط على أي صف لفتح التفاصيل، ثم صدّر العام/السرّي/شهادة الإبطال أو انسخ البصمة. / View/export: click any row for details, then export public/secret/revocation or copy the fingerprint.
- الخزنة: من «الإعدادات» فعّل كلمة مرور رئيسية لتشفير المفاتيح السرّية على القرص. / Vault: in "Settings", enable a master password to encrypt secret keys at rest.
- اللغة والثيم: بدّل العربية/الإنجليزية أو الثيم (النظام/فاتح/داكن) من أسفل الشريط الجانبي. / Language and theme: switch Arabic/English or the theme (system/light/dark) at the bottom of the sidebar.
أين تُخزَّن البيانات؟ / Where is data stored?
في مجلد بيانات التطبيق (userData) / In the app data folder (userData):
~/.config/gpg-key-manager/
├── index.json # فهرس المفاتيح (بيانات وصفية فقط) / key index (metadata only)
├── settings.json # اللغة + إعدادات الخزنة / language + vault settings
└── keys/<id>/
├── public.asc # المفتاح العام (نص عادي) / public key (plaintext)
├── secret.asc # المفتاح السرّي (أو secret.enc عند تفعيل الخزنة) / secret key (or secret.enc with vault)
└── revocation.asc # شهادة الإبطال (أو revocation.enc) / revocation certificate (or revocation.enc)
الأمان / Security
- المفاتيح السرّية اختيارياً مشفّرة بكلمة مرور رئيسية (AES-256-GCM، مفتاح مشتق بـ scrypt N=16384). / Secret keys are optionally encrypted with a master password (AES-256-GCM, scrypt-derived key N=16384).
- عند تفعيل الخزنة، تُقفل عند كل تشغيل وتتطلب كلمة المرور لفتحها. / With the vault enabled, it locks on every launch and requires the password to unlock.
- شهادة الإبطال تُعامل كسرّ (من يملكها يستطيع إبطال المفتاح). / The revocation certificate is treated as a secret.
- بيئة العرض معزولة (
contextIsolation+sandbox، بدونnodeIntegration). / The renderer is isolated (contextIsolation+sandbox, nonodeIntegration).
هيكل المشروع / Project structure
src/
├── main/ # العملية الرئيسية (توليد المفاتيح، التخزين، الخزنة، IPC) / main process (key generation, storage, vault, IPC)
│ ├── index.ts # إعداد النافذة / window setup
│ ├── ipc.ts # معالجات IPC / IPC handlers
│ ├── pgp.ts # توليد مفاتيح OpenPGP / OpenPGP key generation
│ ├── ssh.ts # توليد مفاتيح SSH / SSH key generation
│ ├── keyStore.ts# ملفات المفتاح / key files
│ ├── store.ts # فهرس JSON + الإعدادات / JSON index + settings
│ └── vault.ts # تشفير الخزنة / vault encryption
├── preload/ # جسر contextBridge / contextBridge bridge
├── shared/ # الأنواع المشتركة / shared types
└── renderer/ # واجهة React / React UI
└── src/
├── components/ # Sidebar, KeysPage, modals, Settings… / Sidebar, KeysPage, modals, Settings…
├── locales/ # ar.ts / en.ts
└── styles/ # global.css (نظام التصميم) / global.css (design system)
الإصدار / Releases
الإصدارات عبر سكربت الإصدار — يرفع النسخة، يحدّث CHANGELOG، يضع tag ويرفعه؛ الـ CI يبني AppImage وينشره. Releases go through the release script — it bumps the version, updates the CHANGELOG, tags and pushes; CI builds and publishes the AppImage.
npm run release:patch # إصلاحات / fixes
npm run release:minor # ميزة جديدة / new feature
npm run release:major # تغيير كاسر / breaking change
الترخيص / License
هذا العمل مرخّص تحت CC BY-NC-SA 4.0 — استخدام غير تجاري مع مشاركة بالمثل. This work is licensed under CC BY-NC-SA 4.0 — non-commercial, share-alike.