|
| 1 | +# Prapory |
| 2 | + |
| 3 | +> Візуальний редактор конфігурацій [flagd](https://flagd.dev/) feature flags — десктоп-застосунок і веб. |
| 4 | +> |
| 5 | +> *"Prapory" (Прапори) means "flags" in Ukrainian.* |
| 6 | +
|
| 7 | + |
| 8 | + |
| 9 | +[](https://stand-with-ukraine.pp.ua) |
| 10 | +[](../../actions/workflows/build.yml) |
| 11 | +[](../../releases) |
| 12 | +[](LICENSE) |
| 13 | + |
| 14 | +This project is made in Ukraine. We stand for freedom and democracy. |
| 15 | + |
| 16 | +--- |
| 17 | + |
| 18 | +## Українською |
| 19 | + |
| 20 | +Візуальний редактор для конфігурацій [flagd](https://flagd.dev/) — open-source демона feature flags з проєкту [OpenFeature](https://openfeature.dev/). Дозволяє створювати, редагувати та керувати feature flags через зручний інтерфейс замість ручного редагування JSON. |
| 21 | + |
| 22 | +### Можливості |
| 23 | + |
| 24 | +- **Список прапорців** — бокова панель з пошуком, додаванням та видаленням |
| 25 | +- **Редактор прапорця** — форма для редагування ключа, стану, типу, варіантів, правил таргетингу та метаданих |
| 26 | +- **JSON панель** — Monaco Editor з двосторонньою синхронізацією (зміни у формі оновлюють JSON і навпаки) |
| 27 | +- **Імпорт/Експорт** — завантаження та вивантаження flagd JSON файлів |
| 28 | +- **Валідація** — перевірка конфігурації в реальному часі |
| 29 | +- **Таргетинг** — візуальний конструктор правил if/then/else з операторами (`==`, `!=`, `in`, `ends_with`, `starts_with`, `sem_ver`) |
| 30 | +- **Fractional rollout** — розподіл трафіку між варіантами за вагою |
| 31 | +- **$evaluators** — глобальні фрагменти правил таргетингу |
| 32 | + |
| 33 | +### Завантаження |
| 34 | + |
| 35 | +Готові інсталятори для macOS (ARM / Intel), Windows та Linux доступні на сторінці [Releases](../../releases). |
| 36 | + |
| 37 | +#### Примітка для macOS |
| 38 | + |
| 39 | +Застосунок не підписаний сертифікатом Apple Developer. macOS Gatekeeper може заблокувати його при першому запуску. Щоб відкрити: |
| 40 | + |
| 41 | +- **Варіант А**: Правий клік на застосунок > **Відкрити** > **Відкрити** у діалозі |
| 42 | +- **Варіант Б**: Виконати в терміналі: |
| 43 | + ```bash |
| 44 | + xattr -cr /Applications/Prapory.app |
| 45 | + ``` |
| 46 | + |
| 47 | +### Технології |
| 48 | + |
| 49 | +React 18, TypeScript, Vite, Tailwind CSS v4, Zustand, Monaco Editor, Tauri v2. |
| 50 | + |
| 51 | +### Запуск локально |
| 52 | + |
| 53 | +Вимоги: [Bun](https://bun.sh/) >= 1.0, [Rust](https://rustup.rs/) stable (для десктоп-збірки). |
| 54 | + |
| 55 | +```bash |
| 56 | +bun install # встановити залежності |
| 57 | +bun run dev # веб dev-сервер на http://localhost:1420 |
| 58 | +bun run tauri:dev # десктоп-застосунок з hot-reload |
| 59 | +bun run tauri:build # зібрати десктоп-інсталятор |
| 60 | +bun run build # зібрати веб-версію в dist/ |
| 61 | +``` |
| 62 | + |
| 63 | +### Використання |
| 64 | + |
| 65 | +1. Натисніть **+ Add Flag** щоб створити новий прапорець |
| 66 | +2. Редагуйте ключ, стан, тип та варіанти у формі |
| 67 | +3. Додайте правила таргетингу через конструктор або ввімкніть fractional rollout |
| 68 | +4. JSON оновлюється автоматично у правій панелі — можна також редагувати JSON напряму |
| 69 | +5. **Import** — завантажте існуючий flagd JSON файл |
| 70 | +6. **Export** — скачайте конфігурацію як `flagd.json` |
| 71 | + |
| 72 | +--- |
| 73 | + |
| 74 | +## English |
| 75 | + |
| 76 | +A visual GUI editor for [flagd](https://flagd.dev/) — an open-source feature flag daemon from the [OpenFeature](https://openfeature.dev/) project. Create, edit and manage feature flags through a convenient interface instead of hand-editing JSON. |
| 77 | + |
| 78 | +### Features |
| 79 | + |
| 80 | +- **Flag list** — sidebar with search, add and delete |
| 81 | +- **Flag editor** — form for key, state, type, variants, targeting rules and metadata |
| 82 | +- **JSON panel** — Monaco Editor with two-way sync (form changes update JSON and vice versa) |
| 83 | +- **Import / Export** — load and save flagd JSON files |
| 84 | +- **Validation** — real-time configuration checks |
| 85 | +- **Targeting** — visual rule builder with if/then/else and operators (`==`, `!=`, `in`, `ends_with`, `starts_with`, `sem_ver`) |
| 86 | +- **Fractional rollout** — split traffic between variants by weight |
| 87 | +- **$evaluators** — global reusable targeting rule fragments |
| 88 | + |
| 89 | +### Download |
| 90 | + |
| 91 | +Ready-made installers for **macOS** (ARM / Intel), **Windows** and **Linux** are available on the [Releases](../../releases) page. |
| 92 | + |
| 93 | +#### macOS note |
| 94 | + |
| 95 | +The app is not code-signed with an Apple Developer certificate. macOS Gatekeeper may block it on first launch. To open: |
| 96 | + |
| 97 | +- **Option A**: Right-click the app > **Open** > **Open** in the dialog |
| 98 | +- **Option B**: Run in terminal: |
| 99 | + ```bash |
| 100 | + xattr -cr /Applications/Prapory.app |
| 101 | + ``` |
| 102 | + |
| 103 | +### Tech stack |
| 104 | + |
| 105 | +React 18, TypeScript, Vite, Tailwind CSS v4, Zustand, Monaco Editor, Tauri v2. |
| 106 | + |
| 107 | +### Getting started |
| 108 | + |
| 109 | +Prerequisites: [Bun](https://bun.sh/) >= 1.0, [Rust](https://rustup.rs/) stable (for desktop builds). |
| 110 | + |
| 111 | +```bash |
| 112 | +bun install # install dependencies |
| 113 | +bun run dev # web dev server at http://localhost:1420 |
| 114 | +bun run tauri:dev # desktop app with hot-reload |
| 115 | +bun run tauri:build # build desktop installer |
| 116 | +bun run build # build web version to dist/ |
| 117 | +``` |
| 118 | + |
| 119 | +### Usage |
| 120 | + |
| 121 | +1. Click **+ Add Flag** to create a new flag |
| 122 | +2. Edit key, state, type and variants in the form |
| 123 | +3. Add targeting rules or enable fractional rollout |
| 124 | +4. JSON updates automatically in the right panel — you can also edit JSON directly |
| 125 | +5. **Import** — load an existing flagd JSON file |
| 126 | +6. **Export** — download configuration as `flagd.json` |
| 127 | + |
| 128 | +--- |
| 129 | + |
| 130 | +## License |
| 131 | + |
| 132 | +[MIT](LICENSE) |
0 commit comments