{"id":50380825,"url":"https://github.com/alexfp28/huginndb","last_synced_at":"2026-05-30T12:00:49.946Z","repository":{"id":358432866,"uuid":"1238020819","full_name":"Alexfp28/huginnDB","owner":"Alexfp28","description":"A fast, keyboard-friendly desktop database manager for PostgreSQL, MySQL, and SQLite. Built with Tauri + React.","archived":false,"fork":false,"pushed_at":"2026-05-17T10:21:49.000Z","size":1363,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-17T12:34:24.692Z","etag":null,"topics":["database","database-management","desktop-app","mysql","postgresql","react","rust","sqlite","tauri","typescript"],"latest_commit_sha":null,"homepage":"https://shion.es","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Alexfp28.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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-05-13T18:28:38.000Z","updated_at":"2026-05-17T10:21:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Alexfp28/huginnDB","commit_stats":null,"previous_names":["alexfp28/huginndb"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Alexfp28/huginnDB","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexfp28%2FhuginnDB","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexfp28%2FhuginnDB/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexfp28%2FhuginnDB/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexfp28%2FhuginnDB/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Alexfp28","download_url":"https://codeload.github.com/Alexfp28/huginnDB/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alexfp28%2FhuginnDB/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33691312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"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","desktop-app","mysql","postgresql","react","rust","sqlite","tauri","typescript"],"created_at":"2026-05-30T12:00:49.036Z","updated_at":"2026-05-30T12:00:49.929Z","avatar_url":"https://github.com/Alexfp28.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# HuginnDB\n\n**A fast, keyboard-friendly desktop database manager.**\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![Status: Alpha](https://img.shields.io/badge/status-alpha-orange.svg)](#status)\n[![Built with Tauri](https://img.shields.io/badge/built%20with-Tauri%202-24c8db)](https://v2.tauri.app)\n[![Made with Rust](https://img.shields.io/badge/Rust-stable-orange?logo=rust)](https://www.rust-lang.org)\n[![Frontend: React + TS](https://img.shields.io/badge/React-TypeScript-3178c6?logo=typescript)](https://www.typescriptlang.org)\n\nHuginnDB is a cross-platform desktop client for **PostgreSQL**, **MySQL**, and **SQLite**. It pairs a minimalist UI with a first-class cell editor and a Monaco-powered SQL workspace — the goal is to make routine database work feel as fluid as your text editor.\n\n\u003c/div\u003e\n\n---\n\n## Table of contents\n\n- [Why HuginnDB?](#why-huginn)\n- [Features](#features)\n- [Status](#status)\n- [Screenshots](#screenshots)\n- [Installation](#installation)\n  - [Prerequisites](#prerequisites)\n  - [From source](#from-source)\n- [Usage](#usage)\n  - [Connecting to a sample database](#connecting-to-a-sample-database)\n  - [Keyboard shortcuts](#keyboard-shortcuts)\n- [Architecture](#architecture)\n- [Security model](#security-model)\n- [Roadmap](#roadmap)\n- [Contributing](#contributing)\n- [License](#license)\n- [Acknowledgements](#acknowledgements)\n\n## Why HuginnDB?\n\nMost database GUIs are either heavyweight Java IDEs or web-based dashboards that fight you the moment you need to inspect a 50\u0026nbsp;KB JSON blob inside a column. HuginnDB picks a narrower scope:\n\n- **Inspecting and editing data is the primary job.** Every cell can be opened in a full Monaco editor with auto-detected syntax highlighting and validation.\n- **The SQL editor is a real editor.** Same component, same shortcuts, schema-aware autocomplete, query history.\n- **Keyboard-first, minimal chrome.** Dark mode by default, no nested toolbars, no popup soup.\n- **Credentials never touch disk in plaintext.** Passwords go to the OS keychain.\n\nIt's named after [Huginn](https://en.wikipedia.org/wiki/Huginn_and_Muninn), one of Odin's ravens — the one who fetches information.\n\n## Features\n\n- **Multi-driver connection manager.** PostgreSQL, MySQL, and SQLite, each with a per-driver dialog and the right defaults.\n- **Schema explorer.** Tree of databases → tables/views → columns (with type badges and primary-key indicators) and indexes.\n- **Data browser.** Paginated, sortable, filterable grid built on [TanStack Table](https://tanstack.com/table). Inline cell edits are routed through the backend with PK-based safety.\n- **Expanded cell editor.** Pop any cell into a Monaco editor with auto-detected JSON / XML / SQL highlighting, format/beautify, live JSON validation, and an `F11` fullscreen toggle.\n- **SQL workspace.** Monaco-based, self-hosted (no CDN dependency), with schema-aware autocomplete, `Ctrl+Enter` to run, and a per-connection history sidebar that survives restarts.\n- **Saved queries.** A local library with name, description, and tags. Open any entry into a fresh query tab.\n- **Themes.** Five built-in presets (HuginnDB Dark, HuginnDB Light, Dim, Solarized Dark, High Contrast) plus a visual colour editor. Editing a preset forks it into a new custom theme so the originals stay pristine.\n- **Resizable layout.** Both horizontal (sidebar) and vertical (editor / results) splits are draggable.\n\n## Status\n\n**Alpha.** The MVP is feature-complete for read/write workflows against the supported drivers, but the project hasn't been hardened by real-world use yet. Expect rough edges, occasional sharp corners around exotic column types, and a roadmap that still has open questions ([Roadmap](#roadmap)).\n\n## Screenshots\n\n\u003e **Note:** Screenshots will be added once the UI stabilises. In the meantime, the [Features](#features) list and [Usage](#usage) section describe the workflow.\n\n## Installation\n\n### From a release (Windows)\n\nDownload the latest `.msi` installer from the [Releases page](https://github.com/Alexfp28/huginnDB/releases) and run it.\n\n\u003e **Windows SmartScreen warning.** Because HuginnDB binaries are not yet signed with an Authenticode certificate, Windows Defender SmartScreen will show a blue *\"Windows protected your PC\"* dialog on first launch. This is the default behaviour for any unsigned executable from a publisher SmartScreen has not seen before — it is not a malware detection. To continue, click **More info** (*Más información*) and then **Run anyway** (*Ejecutar de todas formas*). Code signing is on the roadmap; in the meantime, you can verify the SHA-256 of the downloaded `.msi` against the digest published on the Releases page. The full source is in this repository and reproducible builds are encouraged.\n\n### Prerequisites\n\n| Tool                     | Why                                              | Install                                                                   |\n| ------------------------ | ------------------------------------------------ | ------------------------------------------------------------------------- |\n| **Node.js ≥ 20**         | Vite, TypeScript, frontend tooling.              | [nodejs.org](https://nodejs.org) or [`fnm`](https://github.com/Schniz/fnm) |\n| **pnpm ≥ 10**            | The only supported package manager.              | `npm i -g pnpm`                                                           |\n| **Rust (stable)**        | Compiles the Tauri backend.                       | [rustup.rs](https://rustup.rs)                                            |\n| **Platform Tauri prereqs** | Native build deps (compiler, webview, etc.). | See platform-specific list below.                                          |\n\n\u003e **Always use pnpm.** Do not invoke `npm` or `yarn` against this repository — the lockfile is pnpm-only.\n\n#### Windows\n\n1. **Visual Studio Build Tools 2022** with the *Desktop development with C++* workload.\n   ```powershell\n   winget install --id Microsoft.VisualStudio.2022.BuildTools -e --override \"--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --quiet --wait\"\n   ```\n2. **WebView2** is preinstalled on Windows 11. On Windows 10, install the [Evergreen Bootstrapper](https://developer.microsoft.com/microsoft-edge/webview2/).\n\n#### Linux\n\n```bash\nsudo apt install -y \\\n  libwebkit2gtk-4.1-dev build-essential curl wget file \\\n  libxdo-dev libssl-dev libayatana-appindicator3-dev \\\n  librsvg2-dev libsoup-3.0-dev libsecret-1-dev\n```\n\nEquivalent packages exist on Fedora, Arch, and Alpine — see the [Tauri prerequisites](https://v2.tauri.app/start/prerequisites/) for the per-distro names.\n\n#### macOS\n\n```bash\nxcode-select --install\n```\n\nmacOS is not a primary target yet but the build should work — please file an issue if you hit something.\n\n### From source\n\n```bash\ngit clone https://github.com/Alexfp28/huginnDB.git\ncd huginnDB\npnpm install\npnpm tauri:dev          # dev mode with HMR\n# or\npnpm tauri:build        # release bundle in src-tauri/target/release/bundle/\n```\n\nThe first `tauri:dev` is slow — Cargo compiles `sqlx` with three database drivers plus `keyring`, `tokio`, and friends. Plan for **5–10 minutes** on a typical laptop. Incremental rebuilds afterwards take well under 10 seconds.\n\nRelease bundles land under `src-tauri/target/release/bundle/`:\n\n- **Windows** — `.msi` installer.\n- **Linux** — `.deb` and `.AppImage`.\n\n## Usage\n\n### Connecting to a sample database\n\nThe fastest way to play with HuginnDB is the [Chinook](https://github.com/lerocha/chinook-database) sample database in SQLite — a single file you can point HuginnDB at:\n\n```bash\nmkdir -p sample-data\ncurl -L -o sample-data/chinook.db \\\n  https://github.com/lerocha/chinook-database/raw/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite\n```\n\nThen in HuginnDB:\n\n1. Click the **+** in the **Connections** panel.\n2. Pick **SQLite** as the driver.\n3. Paste the absolute path to `chinook.db` into **Database file path**.\n4. Test → Save → Connect.\n\nTables like `Album`, `Artist`, and `Invoice` should appear in the schema explorer. Try this query in a new query tab:\n\n```sql\nSELECT ar.Name AS artist,\n       COUNT(*) AS albums\nFROM Artist ar\nJOIN Album al ON al.ArtistId = ar.ArtistId\nGROUP BY ar.ArtistId\nORDER BY albums DESC\nLIMIT 10;\n```\n\n### Keyboard shortcuts\n\n| Action                          | Shortcut       |\n| ------------------------------- | -------------- |\n| Run the current query           | `Ctrl+Enter`   |\n| Expand the focused cell         | Double-click   |\n| Fullscreen the cell editor      | `F11`          |\n| Exit fullscreen / close editor  | `Esc`          |\n| Toggle light/dark mode          | Sun/moon icon  |\n| Open settings \u0026 theme editor    | Gear icon      |\n\n## Architecture\n\nHuginnDB is split into two cooperating processes:\n\n```\n┌─────────────────────────────┐         ┌──────────────────────────────┐\n│      Tauri webview          │         │       Rust backend           │\n│  React + TypeScript + Vite  │  invoke │  tauri::command handlers     │\n│  Zustand stores             │ \u003c─────\u003e │  sqlx (PG / MySQL / SQLite)  │\n│  TanStack Table + Monaco    │   IPC   │  keyring (OS keychain)       │\n└─────────────────────────────┘         └──────────────────────────────┘\n```\n\n- The **frontend** never opens a database connection. It calls `api.*` (a thin typed wrapper around Tauri's `invoke`) and renders whatever the backend returns.\n- The **backend** owns all live `sqlx` pools and resolves passwords against the OS keychain at the moment of use. Connection strings are never exposed to the webview.\n\nFor a deeper map of the code layout, read [`CONTRIBUTING.md`](CONTRIBUTING.md#project-layout). The two starter files are:\n\n- `src-tauri/src/lib.rs` — Rust entry point and command registry.\n- `src/App.tsx` — top-level React layout.\n\n### Tech stack\n\n- **Shell**: [Tauri 2](https://v2.tauri.app) (Rust + WebView).\n- **Frontend**: React 18, TypeScript (strict), Vite, Tailwind CSS, [shadcn-style](https://ui.shadcn.com) Radix primitives.\n- **State**: [Zustand](https://github.com/pmndrs/zustand) with `persist` middleware for theme, history, and saved queries.\n- **Data grid**: [TanStack Table v8](https://tanstack.com/table).\n- **Editor**: [Monaco](https://microsoft.github.io/monaco-editor/) (self-hosted; no CDN).\n- **Backend**: Rust, [sqlx](https://github.com/launchbadge/sqlx) (PostgreSQL, MySQL, SQLite), [keyring](https://crates.io/crates/keyring), [tokio](https://tokio.rs), [thiserror](https://crates.io/crates/thiserror).\n- **Bundling**: Tauri bundler — `.msi` (Windows), `.deb` / `.AppImage` (Linux).\n\n## Security model\n\nHuginnDB is a single-user desktop tool. The threat model is primarily a curious local user or a hostile database operator, not a remote attacker reaching the user's machine.\n\n- **Credentials**: stored in the OS keychain (Windows Credential Manager, libsecret on Linux, Keychain on macOS) via the [`keyring`](https://crates.io/crates/keyring) crate. The on-disk profile JSON contains only metadata (host, port, db, username, SSL toggle).\n- **Database I/O isolation**: all `sqlx` access lives in the Rust process. The frontend cannot reach a database directly.\n- **No telemetry**: the binary does not phone home.\n- **CSP**: currently disabled (`csp: null`) because Monaco needs to load its workers. Workers are bundled by Vite — not loaded from a CDN — so the relaxation is narrowly scoped. Tightening this is on the roadmap.\n- **Identifier quoting** in dynamic SQL is intended for catalog-sourced identifiers; user-supplied data always travels through bound parameters.\n\nIf you find a vulnerability, please follow [SECURITY.md](SECURITY.md).\n\n## Roadmap\n\nRoughly ordered by priority.\n\n- **SSH tunnel support** — the UI fields exist; the backend implementation is the next major feature.\n- **Bulk row insert / delete** in the data browser.\n- **Schema diff and export** (DDL extraction, side-by-side compare).\n- **More drivers** — Microsoft SQL Server, ClickHouse, DuckDB.\n- **Table structure editor** — visual ALTER TABLE.\n- **Tighter CSP** for the webview.\n- **Automated tests** — integration tests against ephemeral Postgres/MySQL containers, frontend interaction tests with Playwright.\n- **macOS bundle** with code signing.\n- **Visual query builder** (low-priority — the SQL editor is fast enough that most users probably don't want a builder).\n\nHave a different priority? Open a [feature request](.github/ISSUE_TEMPLATE/feature_request.md).\n\n## Contributing\n\nPRs welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) first — it covers the project layout, commit conventions, coding standards per language, and a recipe for adding a new database driver.\n\nNewcomer-friendly issues are labelled `good first issue`.\n\n## License\n\n[MIT](LICENSE). Use it, fork it, ship products with it.\n\n## Acknowledgements\n\nHuginnDB stands on the shoulders of giants:\n\n- [Tauri](https://v2.tauri.app) for the desktop runtime.\n- [sqlx](https://github.com/launchbadge/sqlx) for the async, type-safe SQL toolkit.\n- [Monaco Editor](https://microsoft.github.io/monaco-editor/) — VS Code's brain transplanted into a browser pane.\n- [TanStack Table](https://tanstack.com/table) for the data grid.\n- [shadcn/ui](https://ui.shadcn.com) for the design vocabulary and Radix primitive recipes.\n- [HeidiSQL](https://www.heidisql.com) and [DBeaver](https://dbeaver.io) — for showing what a great database client can look like.\n- The [Chinook](https://github.com/lerocha/chinook-database) sample database for making \"try HuginnDB in 60 seconds\" possible.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexfp28%2Fhuginndb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexfp28%2Fhuginndb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexfp28%2Fhuginndb/lists"}