{"id":48963679,"url":"https://github.com/stoolap/stoolap-desktop","last_synced_at":"2026-04-18T03:01:52.228Z","repository":{"id":352105708,"uuid":"1213847957","full_name":"stoolap/stoolap-desktop","owner":"stoolap","description":"A visual database management application for Stoolap","archived":false,"fork":false,"pushed_at":"2026-04-17T23:00:46.000Z","size":727,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T23:32:22.517Z","etag":null,"topics":["database","database-management","sql"],"latest_commit_sha":null,"homepage":"https://stoolap.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stoolap.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-17T20:34:02.000Z","updated_at":"2026-04-17T23:00:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stoolap/stoolap-desktop","commit_stats":null,"previous_names":["stoolap/stoolap-desktop"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/stoolap/stoolap-desktop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stoolap%2Fstoolap-desktop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stoolap%2Fstoolap-desktop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stoolap%2Fstoolap-desktop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stoolap%2Fstoolap-desktop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stoolap","download_url":"https://codeload.github.com/stoolap/stoolap-desktop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stoolap%2Fstoolap-desktop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31954736,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","database-management","sql"],"created_at":"2026-04-18T03:01:51.340Z","updated_at":"2026-04-18T03:01:52.220Z","avatar_url":"https://github.com/stoolap.png","language":"TypeScript","readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"src-tauri/icons/icon.png\" alt=\"Stoolap Desktop\" width=\"120\"\u003e\n\n  \u003ch1\u003eStoolap Desktop\u003c/h1\u003e\n\n  \u003cp\u003eNative desktop database manager for \u003ca href=\"https://github.com/stoolap/stoolap\"\u003eStoolap\u003c/a\u003e.\u003c/p\u003e\n\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/stoolap/stoolap-desktop/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/stoolap/stoolap-desktop/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/stoolap/stoolap-desktop/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/stoolap/stoolap-desktop\" alt=\"Latest release\"\u003e\u003c/a\u003e\n    \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-blue.svg\" alt=\"License\"\u003e\u003c/a\u003e\n    \u003cimg src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey\" alt=\"Platforms\"\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\nStoolap Desktop is a lightweight native database client for the [Stoolap](https://github.com/stoolap/stoolap) embedded SQL engine. It embeds the Rust engine directly — no server, no bundled Chromium, no Node runtime — so the app stays under 15 MB and talks to your database at in-process speed.\n\nBuilt with [Tauri 2](https://v2.tauri.app/) (Rust backend + WebKit/WebView2 frontend) and React.\n\n## Why Stoolap Desktop?\n\n- **Truly native** — Tauri wraps the system WebView; the whole app is ~12 MB binary + 5 MB DMG instead of the 100+ MB a typical Electron database client ships.\n- **In-process engine** — `stoolap` is linked as a Rust crate. There is no IPC to a driver, no \"connector\" to misconfigure, and transactions run at the same latency the underlying engine gives you.\n- **Full Stoolap feature surface** — time-travel queries (`AS OF TIMESTAMP`), HNSW vector search, multi-column indexes, MVCC transactions, and rich DDL are first-class in the UI, not bolted on.\n- **Native feel on macOS** — overlay title bar, system accent color, system appearance follows light/dark, native context menus and file dialogs.\n- **Auto-update built in** — code-signed updater ships new versions over a GitHub Releases feed.\n\n## Screenshots\n\n\u003e *(add screenshots here: SQL editor, data grid, vector search dialog, schema tree)*\n\n## Features\n\n### SQL Editor\n- Multi-tab CodeMirror editor with a Stoolap SQL dialect (keywords, types, built-in functions)\n- Schema-aware autocomplete (table and column names)\n- Execute with `Cmd/Ctrl+Enter`; run `EXPLAIN` with `Cmd/Ctrl+E`\n- Multi-statement execution with automatic `BEGIN`/`COMMIT` wrapping for DML, preserving open transactions across runs\n- Query history per session\n\n### Schema Browser\n- Sidebar tree of every table and view with filter\n- Expandable columns (type, PK, FK, nullability, default), indexes, foreign keys\n- Row counts per table\n- Right-click actions: View Data, `SELECT *`, Show DDL, Insert Row, Create Index, Alter, Truncate, Drop\n- FK indicators with one-click navigation into the referenced row\n\n### Data Viewer\n- Virtualized grid (hundreds of thousands of rows without lag)\n- Column sorting (server-side), resizing, and in-grid search\n- Inline cell editing, row insertion and deletion\n- Filter panel with `=`, `!=`, `\u003e`, `\u003c`, `LIKE`, `IN`, `IS NULL`, and vector-distance operators\n- Time travel: run queries at any point in the table's history via `AS OF TIMESTAMP`\n- Export current page or the entire (filtered) table to CSV / JSON — streamed straight to disk so multi-GB tables don't OOM the UI\n- CSV / JSON import via the engine's `COPY FROM` (no client-side batching)\n\n### Vector Database\n- `VECTOR(N)` columns with dimension presets (128 – 1536)\n- HNSW index creation with configurable `m`, `ef_construction`, and distance metric (`cosine`, `l2`, `ip`)\n- Dedicated Vector Search dialog: pick a table + column, paste or pick a query vector, set `k`, add `WHERE` filters, preview the generated SQL, run inline\n- Distance columns auto-detected in results with color-gradient bars\n- Vector cells abbreviated in the grid; click to expand into a dimension-by-dimension heatmap\n\n### Index Management\n- Create standard (BTree, Hash, Bitmap) or HNSW indexes via dialog\n- Multi-column indexes, `UNIQUE` option, named constraints\n- k-NN search template generation from any HNSW index\n\n### Table \u0026 View Management\n- Create tables with a visual dialog: column types, constraints (`PRIMARY KEY`, `NOT NULL`, `UNIQUE`, `AUTO_INCREMENT`, `CHECK`), foreign keys with `ON DELETE` / `ON UPDATE` actions, and defaults\n- Alter tables (add / modify / drop columns)\n- Create and drop views\n- DDL preview before any destructive action\n\n### Backup \u0026 Restore\n- One-shot SQL dump export — tables, data, views, indexes, `DROP IF EXISTS` guards, FK-dependency-ordered\n- Streams chunks directly to disk; safe for databases larger than RAM\n- Restore from any SQL dump with per-statement progress and optional transaction wrapping\n- HNSW index parameters (`metric`, `m`, `ef_construction`) are preserved in the backup and re-applied on restore\n\n### Native Integration\n- macOS: overlay title bar with hidden title, system accent color live-tracked, native context menus, proper app menu with `About`, `Check for Updates…`, services submenu, quit\n- System notifications on long-running operations (backup complete, export finished, import complete)\n- Native file / folder dialogs via the OS picker\n- Window state persistence — size, position, and maximized state restore on next launch\n- Single-process: the engine is linked in, not spawned\n\n### Theming \u0026 Accessibility\n- Follows system light / dark appearance\n- Accent color pulled from the OS (macOS `NSColor.controlAccentColor`)\n- Keyboard navigation throughout; full shortcut sheet via `Cmd/Ctrl + ?`\n\n### Auto-Update\n- Bundled `tauri-plugin-updater` checks a signed `latest.json` feed on GitHub Releases\n- User sees a dialog with the version, release notes, progress bar, and \"Install \u0026 Restart\"\n- Every update bundle is ed25519-signed with the maintainer's private key; the app refuses to install anything that doesn't verify against the public key baked into the binary\n\n## Installation\n\n### macOS\n\nDownload `Stoolap Desktop_\u003cversion\u003e_aarch64.dmg` (Apple Silicon) or `…_x64.dmg` (Intel) from the [latest release](https://github.com/stoolap/stoolap-desktop/releases/latest), open the DMG, and drag Stoolap Desktop to `/Applications`.\n\nIf the app isn't notarized yet, right-click → **Open** the first time to bypass Gatekeeper.\n\n### Linux\n\nDownload the `.AppImage` (portable) or `.deb` (for Debian / Ubuntu) from the [latest release](https://github.com/stoolap/stoolap-desktop/releases/latest).\n\n```sh\n# AppImage\nchmod +x \"Stoolap Desktop_*.AppImage\"\n./\"Stoolap Desktop_*.AppImage\"\n\n# .deb\nsudo dpkg -i stoolap-desktop_*_amd64.deb\n```\n\n### Windows\n\nDownload the `.msi` installer from the [latest release](https://github.com/stoolap/stoolap-desktop/releases/latest) and run it.\n\n## Getting Started\n\n1. **Launch** the app. The sidebar is empty on first run.\n2. **Open or create a database.** Use the toolbar's **Connect** button or `File → Open Database` to point at an existing Stoolap folder, or `File → New In-Memory Database` to spin up a scratch DB.\n3. **Try the example database.** `File → Load Example Database` seeds a memory DB with customers / products / orders, a vector `knowledge_base` table, and a tab of ready-to-run queries — including vector k-NN and hybrid search.\n4. **Browse.** Expand tables in the sidebar to see columns, indexes, foreign keys, and DDL. Click a table to open a data view in a new tab.\n5. **Query.** `Cmd/Ctrl+T` opens a new editor tab; `Cmd/Ctrl+Enter` runs.\n\n## Keyboard Shortcuts\n\n| Shortcut | Action |\n|----------|--------|\n| `Cmd/Ctrl + Enter` | Execute query (current selection or whole buffer) |\n| `Cmd/Ctrl + E` | Explain query plan |\n| `Cmd/Ctrl + Shift + F` | Format SQL |\n| `Cmd/Ctrl + T` | New editor tab |\n| `Cmd/Ctrl + W` | Close tab |\n| `Ctrl + Tab` / `Ctrl + Shift + Tab` | Next / previous tab |\n| `Cmd/Ctrl + B` | Toggle sidebar |\n| `Cmd/Ctrl + F` | Search in results grid |\n| `Cmd/Ctrl + C` | Copy selected cells |\n| `Cmd/Ctrl + O` | Open database |\n| `Cmd/Ctrl + N` | New in-memory database |\n| `Cmd/Ctrl + Shift + S` | Backup database |\n| `Cmd/Ctrl + ?` | Show this help |\n\n## Building from Source\n\n### Prerequisites\n\n- **Rust** stable (`rustup install stable`)\n- **Node.js** 20+\n- **Platform toolchains:**\n  - macOS: Xcode Command Line Tools (`xcode-select --install`)\n  - Linux: `libwebkit2gtk-4.1-dev libgtk-3-dev librsvg2-dev libayatana-appindicator3-dev patchelf`\n  - Windows: [Microsoft Visual Studio C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/)\n- **Stoolap engine** checked out next to this repo (the desktop app uses a path dependency):\n  ```\n  ~/src/\n  ├── stoolap-desktop/\n  └── stoolap/\n  ```\n\n  ```sh\n  git clone https://github.com/stoolap/stoolap.git\n  ```\n\n### Run in Development\n\n```sh\ngit clone https://github.com/stoolap/stoolap-desktop.git\ncd stoolap-desktop\nnpm install\nnpm run dev\n```\n\nTauri spawns the Vite dev server and opens a native window with hot-reload.\n\n### Production Build\n\n```sh\nnpm run build\n```\n\nOutputs:\n- **macOS** — `src-tauri/target/release/bundle/macos/Stoolap Desktop.app` + `…/dmg/*.dmg`\n- **Linux** — `…/appimage/*.AppImage` + `…/deb/*.deb`\n- **Windows** — `…/msi/*.msi`\n\n### Linting\n\n```sh\n# Frontend type check + production build\nnpx tsc --noEmit\nnpm run vite:build\n\n# Rust strict clippy\n(cd src-tauri \u0026\u0026 cargo clippy --all-targets --all-features -- -D warnings)\n```\n\n## Architecture\n\n```\n┌────────────────────────────────────────────┐\n│  React + TypeScript UI (src/renderer)      │\n│  CodeMirror · TanStack Query / Table /     │\n│  Virtual · Zustand · shadcn/radix          │\n└──────────────────┬─────────────────────────┘\n                   │  Tauri invoke / event\n┌──────────────────┴─────────────────────────┐\n│  Rust Tauri backend (src-tauri/src)        │\n│  ├── commands::connection                  │\n│  ├── commands::query                       │\n│  ├── commands::schema                      │\n│  ├── commands::data                        │\n│  └── commands::system                      │\n└──────────────────┬─────────────────────────┘\n                   │  direct Rust API\n┌──────────────────┴─────────────────────────┐\n│  stoolap engine (crate, embedded)          │\n│  MVCC · columnar storage · HNSW · optimizer│\n└────────────────────────────────────────────┘\n```\n\n- **`src/renderer/`** — React 19 + TypeScript UI. State is a mix of Zustand stores (connections, editor tabs) and TanStack Query (schema, row data). Styling is Tailwind 4 with shadcn/radix primitives.\n- **`src-tauri/`** — Rust. `DbManager` holds one `Arc\u003cDatabase\u003e` per open connection so transactions persist across IPC calls while cross-connection queries run concurrently. All SQL paths parameterize user input via `?` placeholders.\n- **`stoolap`** — the database engine itself; see its [repo](https://github.com/stoolap/stoolap) for engine docs.\n\n### Plugin Inventory\n\n| Plugin | Purpose |\n|--------|---------|\n| `tauri-plugin-dialog` | Native open / save / confirm dialogs |\n| `tauri-plugin-fs` | Scoped filesystem access for export / import |\n| `tauri-plugin-notification` | System notifications |\n| `tauri-plugin-window-state` | Persist window size / position across launches |\n| `tauri-plugin-updater` | Signed auto-update via GitHub Releases |\n| `tauri-plugin-process` | Relaunch after applying an update |\n\n## Releasing (maintainers)\n\nReleases are driven by `.github/workflows/release.yml`, which triggers on any `v*` tag.\n\n### One-time setup\n\n1. Generate an updater signing keypair (already done for this repo):\n   ```sh\n   npx tauri signer generate -w ~/.tauri/stoolap-desktop.key\n   ```\n   Keep the private key safe — **lose it and no update can ever reach existing installs**.\n2. Add repository secrets (`Settings → Secrets and variables → Actions`):\n\n   **Required for auto-update:**\n   - `TAURI_SIGNING_PRIVATE_KEY` — contents of `~/.tauri/stoolap-desktop.key`\n   - `TAURI_SIGNING_PRIVATE_KEY_PASSWORD` — empty if no password\n\n   **Optional (macOS code signing + notarization):**\n   - `APPLE_CERTIFICATE` (base64 of Developer ID `.p12`)\n   - `APPLE_CERTIFICATE_PASSWORD`\n   - `APPLE_SIGNING_IDENTITY` (e.g. `Developer ID Application: Your Name (TEAMID)`)\n   - `APPLE_ID`, `APPLE_PASSWORD` (app-specific), `APPLE_TEAM_ID`\n\n### Cutting a release\n\n1. Bump `version` in `package.json`, `src-tauri/tauri.conf.json`, and `src-tauri/Cargo.toml`.\n2. Commit, tag, push:\n   ```sh\n   git commit -am \"Release v0.4.1\"\n   git tag v0.4.1\n   git push origin main v0.4.1\n   ```\n3. CI builds the matrix (macOS arm64 / Intel, Linux x64, Windows x64), signs updater artifacts, uploads a draft release with all DMGs / AppImages / MSIs, and generates `latest.json`.\n4. The `publish-release` job flips the draft to published and pulls commit messages into the release notes.\n\nInstalled apps hit `https://github.com/stoolap/stoolap-desktop/releases/latest/download/latest.json` on **Check for Updates…** and prompt the user to install.\n\n## Contributing\n\nIssues and PRs welcome. Before opening a PR:\n\n```sh\nnpx tsc --noEmit\n(cd src-tauri \u0026\u0026 cargo clippy --all-targets --all-features -- -D warnings)\n```\n\nBoth should pass cleanly.\n\n## License\n\n[Apache License 2.0](LICENSE) — same as the Stoolap engine.\n\n## Related Projects\n\n- **[stoolap](https://github.com/stoolap/stoolap)** — the embedded SQL engine\n- **[stoolap-studio](https://github.com/stoolap/stoolap-studio)** — a browser-based sibling of this app (Next.js + WebAssembly / driver)\n- Drivers: [stoolap-python](https://github.com/stoolap/stoolap-python) · [stoolap-node](https://github.com/stoolap/stoolap-node) · [stoolap-java](https://github.com/stoolap/stoolap-java) · [stoolap-swift](https://github.com/stoolap/stoolap-swift) · [stoolap-csharp](https://github.com/stoolap/stoolap-csharp) · [stoolap-ruby](https://github.com/stoolap/stoolap-ruby) · [stoolap-php](https://github.com/stoolap/stoolap-php)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstoolap%2Fstoolap-desktop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstoolap%2Fstoolap-desktop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstoolap%2Fstoolap-desktop/lists"}