{"id":51646343,"url":"https://github.com/developer82/spiral","last_synced_at":"2026-07-13T23:01:31.298Z","repository":{"id":369038898,"uuid":"1278088734","full_name":"developer82/Spiral","owner":"developer82","description":"A cross-platform database client and administration tool for SQL and NoSQL databases, featuring interactive ERD visualizers, visual execution plans, database profiling, schema comparison, and a local AI query generator.","archived":false,"fork":false,"pushed_at":"2026-07-03T10:06:57.000Z","size":12019,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-03T10:28:58.467Z","etag":null,"topics":["database-client","db-administration","developer-tools","erd","execution-plan","mongodb","mssql","multi-database","mysql","nosql","postgresql","profiling","redis","schema-comparison","sql","sqlite"],"latest_commit_sha":null,"homepage":"http://spiral.susita.com","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/developer82.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"agents.md","dco":null,"cla":null}},"created_at":"2026-06-23T13:00:52.000Z","updated_at":"2026-07-03T10:07:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/developer82/Spiral","commit_stats":null,"previous_names":["developer82/spiral"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/developer82/Spiral","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/developer82%2FSpiral","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/developer82%2FSpiral/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/developer82%2FSpiral/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/developer82%2FSpiral/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/developer82","download_url":"https://codeload.github.com/developer82/Spiral/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/developer82%2FSpiral/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35439213,"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-07-13T02:00:06.543Z","response_time":119,"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-client","db-administration","developer-tools","erd","execution-plan","mongodb","mssql","multi-database","mysql","nosql","postgresql","profiling","redis","schema-comparison","sql","sqlite"],"created_at":"2026-07-13T23:01:30.191Z","updated_at":"2026-07-13T23:01:31.289Z","avatar_url":"https://github.com/developer82.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"src/renderer/src/assets/logo.png\" alt=\"Spiral logo\" width=\"120\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eSPIRAL\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\u003cem\u003e\u003csub\u003eA modern multi-database client for SQL, Redis, and MongoDB — built with Electron, React, and TypeScript.\u003c/sub\u003e\u003c/em\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/banner.png\" alt=\"Spiral banner\" width=\"100%\" /\u003e\n\u003c/p\u003e\n\n## About\n\nSpiral is a cross-platform desktop client for managing and querying multiple database engines from one app. It pairs a lazy-loaded schema explorer with full CRUD tooling for tables, views, stored procedures, users, and more — plus dedicated dialogs for backup/restore, schema comparison, and an embedded AI assistant for writing SQL.\n\nDeveloped by [Ophir Oren](https://www.linkedin.com/in/ophiroren/) using AI agents, for educational purposes. Main motivation: after moving to macOS, lacked a good tool to manage databases, create ERD diagrams, and do database profiling.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"screenshots/spiral-main-solar.png\" alt=\"Spiral - Solar theme\" width=\"30%\" /\u003e\n  \u0026nbsp;\n  \u003cimg src=\"screenshots/spiral-main-dark.png\" alt=\"Spiral - Dark theme\" width=\"30%\" /\u003e\n  \u0026nbsp;\n  \u003cimg src=\"screenshots/spiral-main-glass.png\" alt=\"Spiral - Glass theme\" width=\"30%\" /\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Multi-database support** — SQL Server, MySQL, PostgreSQL, SQLite, MongoDB, and Redis (standalone, cluster, and sentinel modes), via a pluggable provider architecture.\n- **Explorer** — lazy-loaded database tree (tables, views, stored procedures, functions, types, columns, keys, constraints, triggers, indexes, statistics) with full CRUD dialogs for tables, views, stored procedures, table types, and collections.\n- **Query Editor** — Monaco-based SQL/JSON/Redis-command editor with execution plans, client statistics, and result grids; MongoDB shell-style and JSON command syntax.\n- **Interactive Tables** — query results render as editable grids: sort, create, and delete rows directly, with an enhanced look \u0026 feel. Auto-disabled for connections marked as a Critical environment to prevent accidental edits.\n- **SQL Profiler** — dedicated profiling page with execution plan visualization, client statistics, and query result export.\n- **User \u0026 Security Management** — per-provider user/role management (SQL Server logins \u0026 roles, MySQL server/database privileges, MongoDB roles, Redis ACL users).\n- **Backup \u0026 Restore** — native or pure-JS engines per provider (SQL Server, MySQL, PostgreSQL, SQLite, MongoDB, Redis) with compression, scope, and conflict-resolution options.\n- **Compare** — save source/target comparison configs, run schema \u0026 row-level diff reports, generate sync scripts, and execute (or revert) syncs directly against a target database.\n- **Redis Dashboard** — live server `INFO` snapshot (memory, stats, persistence, replication, cache efficiency) with safe and destructive maintenance commands.\n- **MongoDB Tooling** — document editor (EJSON, all BSON types), aggregation pipeline builder with live preview, and schema validation rule editor/tester.\n- **AI Assistant** — local, embedded AI (SQLCoder via node-llama-cpp) for SQL help inside the Explorer.\n- **Smart Execution Documentation (SED)** — task-driven panel for guided multi-step database operations.\n- **Internationalization** — English and Hebrew (full RTL support), extensible via i18n locale files.\n- **Connection Management** — environments (Production/QA/Dev) with color tagging, critical-environment query safeguards, SSH tunneling, TLS/SSL, auto-connect, and background schema auto-refresh.\n- **Customization** — dark/light themes, resizable panels, native-feeling toolbars (macOS capsule style / Windows \u0026 Linux flat style), and a Tips \u0026 Tricks notification system.\n- **Auto-Update** — built-in release checking and update flow.\n\n\u003e [!NOTE]\n\u003e **macOS users:** Spiral is now signed and notarized by Apple. As a result, **auto-update does not work on macOS** — you'll need to **manually download** the latest release from the [releases page](https://github.com/developer82/Spiral/releases) and reinstall to update.\n\n### AI Assistant *(experimental)*\n\n\u003cimg src=\"screenshots/spiral-ai.png\" align=\"left\" width=\"45%\" alt=\"Spiral AI assistant\" /\u003e\n\nChat with your data and build queries using natural language. The assistant runs on a **local model** — nothing leaves your machine, no data is ever sent to a remote provider, so your databases stay private. Model management (download, switch, remove) lives in **Settings → AI**, and more models are coming soon. This feature is experimental and still evolving.\n\n\u003cbr clear=\"left\"/\u003e\n\n### ERD Scheme\n\n\u003cimg src=\"screenshots/spiral-erd-glass.png\" align=\"right\" width=\"45%\" alt=\"Spiral ERD diagram\" /\u003e\n\nVisualize your database schema as an interactive entity-relationship diagram. Tables and their relationships are laid out automatically in a modern, draggable editor — customize the layout, annotate diagrams with notes, and export them for documentation or sharing.\n\n\u003cbr clear=\"right\"/\u003e\n\n### Query Statistics \u0026 Execution Plan\n\n\u003cimg src=\"screenshots/spiral-client-statistics.png\" align=\"left\" width=\"45%\" alt=\"Spiral client statistics\" /\u003e\n\nSee exactly what a query costs and where the time goes. The **Execution Plan** view renders SQL Server's query plan as an interactive graph — operators, cost percentages, and row estimates per step — making it easy to spot scans, missing indexes, or expensive joins. **Client Statistics** complements it with runtime numbers (execution time, rows returned, bytes sent), so you can compare runs and confirm a change actually made a query faster, not just guess.\n\n\u003cbr clear=\"left\"/\u003e\n\n\u003cimg src=\"screenshots/spiral-execution-plan.png\" width=\"60%\" alt=\"Spiral execution plan\" /\u003e\n\n### Database Environments\n\n\u003cimg src=\"screenshots/spiral-environments.png\" align=\"right\" width=\"45%\" alt=\"Spiral environments\" /\u003e\n\nKeep Production, QA, and Development apart at a glance. Create your own named environments, give each a color, and assign them to saved connections — the color shows up throughout the Explorer so it's always clear what you're connected to. Mark sensitive environments as **Critical** to get extra guardrails: non-read-only queries prompt for confirmation before running, and Interactive Tables are automatically disabled to prevent accidental edits.\n\n\u003cbr clear=\"right\"/\u003e\n\n### Native Shells\n\n\u003cimg src=\"screenshots/spiral-mongo-shell.png\" align=\"left\" width=\"45%\" alt=\"Spiral native Mongo shell\" /\u003e\n\nFor MongoDB and Redis, the query tab acts as a native shell rather than a translated query builder. Write real `db.collection.method(...)` MongoDB shell syntax or plain Redis commands (`GET`, `HGETALL`, etc.) and run them directly against the database — no abstraction layer in between, no SQL-shaped compromise. Results come back structured (document cards for Mongo, normalized tables for Redis) so you still get a readable view on top of the raw command output.\n\n\u003cbr clear=\"left\"/\u003e\n\n### Personal \u0026 Secure\n\n\u003cimg src=\"screenshots/spiral-user-profile.png\" align=\"right\" width=\"30%\" alt=\"Spiral user profile\" /\u003e\n\nSet up a user profile — name and avatar — so the app feels like yours, not a generic tool. More importantly: everything stays local. Your profile, connections, passwords, and queries are stored on your machine and never leave it — no account, no telemetry-backed cloud sync, no remote server in the loop.\n\n\u003cbr clear=\"right\"/\u003e\n\n#### Password Protected\n\n\u003cimg src=\"screenshots/spiral-password.png\" align=\"left\" width=\"30%\" alt=\"Spiral password protection\" /\u003e\n\nSpiral manages your saved database connections, and can remember their passwords for you. To keep that safe, you can set an application password — doing so also **encrypts every stored connection password** on disk, not just the app itself.\n\nOnce a password is set, **Auto-Lock** options control when Spiral locks itself: *Lock on Startup* (require the password every time the app launches) and *Lock on Inactivity* (lock automatically after a configurable idle timeout). When locked, a full-screen lock screen blocks access to the app until the correct password is entered — also triggered on OS suspend or screen-lock events.\n\nThere is no password recovery: forgetting it means clearing the app's user data directory to regain access.\n\n\u003cbr clear=\"left\"/\u003e\n\n## Project Setup\n\n### Install\n\n```bash\n$ npm install\n```\n\n### Development\n\n```bash\n$ npm run dev\n```\n\n### Build\n\n```bash\n# For windows\n$ npm run build:win\n\n# For macOS\n$ npm run build:mac\n\n# For Linux\n$ npm run build:linux\n```\n\n## Contributing\n\nSpiral grows with help from people who use it. Whether it's a bug, a rough edge, or an idea for a feature — open an [issue](https://github.com/developer82/Spiral/issues) and let's talk about it. Pull requests are very welcome too. Every contribution, big or small, is genuinely appreciated.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeveloper82%2Fspiral","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeveloper82%2Fspiral","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeveloper82%2Fspiral/lists"}