factcircuit
FactCircuit: an auditable claim-and-evidence verification loop with immutable provenance, staged checks, bounded retrieval, and reproducible evaluation.
A native desktop client for PostgreSQL and MySQL. No trial, no license key, no account.
DataJavaScript · RustGitHub @joaoGabriel55OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
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.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
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 databasesRead the full 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.
| 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.