factcircuit
FactCircuit는 불변 출처와 단계별 검증, 제한된 검색, 재현 가능한 평가를 제공하는 감사 가능한 주장·증거 검증 루프입니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A lightweight but feature-rich desktop database client for PostgreSQL and MySQL. 100% Rust, with a native GPU-rendered UI built on GPUI Kit. No webview. Free: no trial, no license key, no account.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A lightweight but feature-rich desktop database client for PostgreSQL and MySQL. 100% Rust, with a native GPU-rendered UI built on GPUI Kit. No webview.
Free: no trial, no license key, no account.
Download for macOS, Windows or Linux · Website · Documentation
See docs/PLAN.md for the roadmap and docs/adr/ for architecture decisions.
• Rust stable (rustup)
• Linux only: libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libvulkan-dev libfontconfig-dev libx11-xcb-dev libssl-dev
• Docker, for the test databasesREADME 전문 보기 ↗A lightweight but feature-rich desktop database client for PostgreSQL and MySQL. 100% Rust, with a native GPU-rendered UI built on GPUI Kit. No webview.
Free: no trial, no license key, no account.
Download for macOS, Windows or Linux · Website · Documentation
See docs/PLAN.md for the roadmap and docs/adr/ for architecture decisions.
| Path | What |
|---|---|
crates/savoia-app | The app binary (savoia-studio): GPUI views, theme, icon assets |
crates/savoia-core | Domain types, connection config + URL import, driver traits, errors; no UI dependency |
crates/savoia-pg | PostgreSQL driver (tokio-postgres, rustls) |
crates/savoia-mysql | MySQL/MariaDB driver (mysql_async, rustls) |
crates/savoia-store | Saved connections (SQLite) and secrets (a user-only 0600 file) |
crates/savoia-tunnel | SSH tunnels (russh) with known_hosts verification |
crates/savoia-transfer | Dump and import: external client tools and the built-in engine |
docs/site | The website: landing page (landing/) and user documentation (mdBook, src/), published to GitHub Pages |
rustup)libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libvulkan-dev libfontconfig-dev libx11-xcb-dev libssl-devcargo run -p savoia-app # run the app
cargo build -p savoia-app --release
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
npm run docs # the website and docs on http://localhost:3000, rebuilt on change (needs mdbook)
docker compose up -d --wait # Postgres 17 :54317 (TLS on), MySQL 8.4 :33084, SSH bastion :2222 — all savoia/savoia
scripts/dev.sh rebuilds and restarts the app whenever a source file changes, then reconnects the data source you used last. Set SAVOIA_DEV_OPEN=schema.table to also reopen that table's data view:
SAVOIA_DEV_OPEN=it_rel.orders scripts/dev.sh
It is a restart, not an in-place hot reload: GPUI has no hot-patching, so window state other than the reconnect and the data view starts fresh. A failed build leaves the running app as it was. brew install watchexec makes it react faster; without it the script polls once a second.
Driver, tunnel and UI integration tests talk to the compose services. Without these variables they return early and report as passed, so set them when you want real coverage:
SAVOIA_PG_URL=postgres://savoia:[email protected]:54317/savoia \
SAVOIA_MYSQL_URL=mysql://savoia:[email protected]:33084/savoia \
SAVOIA_SSH_TEST=1 cargo test --workspace
scripts/bench.sh startup and scripts/bench.sh scroll (with SAVOIA_PG_URL) measure the release budgets in a real window. Results are in docs/benchmarks/.
samples/ has a Serie A 2025-26 database for trying the explorer, ER diagram and console by hand. Clubs and stadiums are real (figures approximate); every person is invented. It has 20 clubs, 490 players, 380 fixtures (20 matchdays played, so later scores are NULL), views, a function, a procedure, and 150,000 match_events rows for paging and cancel.
docker exec -i savoia-db-postgres-17-1 psql -U savoia -d savoia < samples/serie_a.postgres.sql # schema serie_a
docker exec -i savoia-db-mysql-8.4-1 mysql -uroot -psavoia < samples/serie_a.mysql.sql # database serie_a
To change the data, edit samples/generate_serie_a.py and run it; it rewrites both files with the same rows.
crates/savoia-app/src/theme.rs; don't hard-code colors in views.crates/savoia-app/src/assets.rs, otherwise they render blank.savoia-app depends on gpui-kit. Keep database, dump and storage logic in UI-free crates.Add a changeset to PRs users will notice (npm ci, then npx changeset); merging the generated "Release Savoia Studio" PR tags and builds the release. See docs/RELEASING.md.
Licensed under either of MIT or Apache-2.0, at your option.