Skip to content

Commit ea3de80

Browse files
author
ruslan.terekhov
committed
Prapory v1.0.0 — visual editor for flagd feature flag configurations
Desktop app (Tauri v2) and web editor for flagd — an open-source feature flag daemon from the OpenFeature project. Features: - Flag list with search, add and delete - Flag editor for key, state, type, variants, targeting rules and metadata - Monaco Editor JSON panel with two-way sync - Import/Export flagd JSON files - Real-time validation - Visual targeting rule builder (if/then/else with operators) - Fractional rollout support - $evaluators — reusable targeting rule fragments Tech stack: React 18, TypeScript, Vite, Tailwind CSS v4, Zustand, Monaco Editor, Tauri v2. Installers available for macOS (ARM/Intel), Windows and Linux.
0 parents  commit ea3de80

93 files changed

Lines changed: 12757 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build.yml

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
name: Build Tauri App
2+
3+
on:
4+
push:
5+
branches: [main]
6+
tags: ['v*']
7+
pull_request:
8+
branches: [main]
9+
workflow_dispatch:
10+
11+
jobs:
12+
build:
13+
strategy:
14+
fail-fast: false
15+
matrix:
16+
include:
17+
- platform: macos-latest
18+
args: --target aarch64-apple-darwin
19+
rust_target: aarch64-apple-darwin
20+
- platform: macos-latest
21+
args: --target x86_64-apple-darwin
22+
rust_target: x86_64-apple-darwin
23+
- platform: windows-latest
24+
args: ''
25+
- platform: ubuntu-22.04
26+
args: ''
27+
28+
runs-on: ${{ matrix.platform }}
29+
30+
steps:
31+
- uses: actions/checkout@v4
32+
33+
- name: Install Rust stable
34+
uses: dtolnay/rust-toolchain@stable
35+
with:
36+
targets: ${{ matrix.rust_target }}
37+
38+
- name: Rust cache
39+
uses: swatinem/rust-cache@v2
40+
with:
41+
workspaces: src-tauri
42+
43+
- name: Install Linux dependencies
44+
if: matrix.platform == 'ubuntu-22.04'
45+
run: |
46+
sudo apt-get update
47+
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
48+
49+
- name: Install Bun
50+
uses: oven-sh/setup-bun@v2
51+
52+
- name: Install frontend dependencies
53+
run: bun install
54+
55+
- name: Build Tauri app
56+
uses: tauri-apps/tauri-action@v0
57+
env:
58+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
59+
with:
60+
args: ${{ matrix.args }}
61+
tagName: ${{ github.ref_name }}
62+
releaseName: 'Prapory ${{ github.ref_name }}'
63+
releaseDraft: true
64+
prerelease: false
65+
66+
- name: Upload artifacts
67+
if: "!startsWith(github.ref, 'refs/tags/v')"
68+
uses: actions/upload-artifact@v4
69+
with:
70+
name: binaries-${{ matrix.platform }}-${{ matrix.rust_target || 'default' }}
71+
path: |
72+
src-tauri/target/**/release/bundle/**/*.dmg
73+
src-tauri/target/**/release/bundle/**/*.app
74+
src-tauri/target/**/release/bundle/**/*.deb
75+
src-tauri/target/**/release/bundle/**/*.AppImage
76+
src-tauri/target/**/release/bundle/**/*.msi
77+
src-tauri/target/**/release/bundle/**/*.exe

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
node_modules
2+
dist
3+
.vite
4+
*.local
5+
src-tauri/target

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 Ruslan Terekhov
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# Prapory
2+
3+
> Візуальний редактор конфігурацій [flagd](https://flagd.dev/) feature flags — десктоп-застосунок і веб.
4+
>
5+
> *"Prapory" (Прапори) means "flags" in Ukrainian.*
6+
7+
![Prapory Screenshot](screenshot.png)
8+
9+
[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://stand-with-ukraine.pp.ua)
10+
[![Build](../../actions/workflows/build.yml/badge.svg)](../../actions/workflows/build.yml)
11+
[![Release](https://img.shields.io/github/v/release/AsyncLegs/prapory?include_prereleases)](../../releases)
12+
[![License](https://img.shields.io/github/license/AsyncLegs/prapory)](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)

app-icon.png

431 KB
Loading

0 commit comments

Comments
 (0)