{"id":41564086,"url":"https://github.com/joinery-labs/joinery","last_synced_at":"2026-01-25T22:01:41.516Z","repository":{"id":333178169,"uuid":"1134692756","full_name":"joinery-labs/joinery","owner":"joinery-labs","description":"Privacy-first local data analytics powered by DuckDB.","archived":false,"fork":false,"pushed_at":"2026-01-17T19:11:47.000Z","size":408,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-18T05:31:36.082Z","etag":null,"topics":["data-analytics","duckdb","sql","sql-workbench"],"latest_commit_sha":null,"homepage":"https://joinery-labs.github.io/joinery/","language":"JavaScript","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/joinery-labs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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-01-15T04:11:23.000Z","updated_at":"2026-01-17T20:48:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/joinery-labs/joinery","commit_stats":null,"previous_names":["joinery-labs/joinery"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/joinery-labs/joinery","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joinery-labs%2Fjoinery","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joinery-labs%2Fjoinery/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joinery-labs%2Fjoinery/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joinery-labs%2Fjoinery/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joinery-labs","download_url":"https://codeload.github.com/joinery-labs/joinery/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joinery-labs%2Fjoinery/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28760642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T20:56:06.009Z","status":"ssl_error","status_checked_at":"2026-01-25T20:54:48.203Z","response_time":113,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["data-analytics","duckdb","sql","sql-workbench"],"created_at":"2026-01-24T06:00:13.405Z","updated_at":"2026-01-25T22:01:41.504Z","avatar_url":"https://github.com/joinery-labs.png","language":"JavaScript","funding_links":[],"categories":["DuckDB Clients and UIs"],"sub_categories":["Web Clients (WebAssembly)"],"readme":"# Joinery\n\nPrivacy-first local data analytics powered by DuckDB. Run SQL queries on your files instantly in your browser or desktop app with an intuitive interface.\n\n**[Try the web version](https://joinery-labs.github.io/joinery/)**\n\n## ✨ Features\n\n- **🦆 DuckDB-Powered Analytics:** Full-featured SQL engine running in WebAssembly (web) or native Rust client (desktop).\n- **🔒 Privacy-First Architecture:** All data processing happens locally on your device. Zero cloud uploads.\n- **📁 Multi-Format Support:** Import and query CSV, Excel, JSON, Parquet, and more.\n- **🎨 Modern SQL Editor:** Monaco-based editor with syntax highlighting, IntelliSense, and auto-completion.\n- **📑 Tabbed \u0026 Concurrent Workflow:** Open multiple tabs and run multiple queries per tab. Desktop edition supports true concurrent query execution.\n- **⚡ Fast Query Execution:** Leverages DuckDB's columnar engine and Apache Arrow for performance.\n- **📊 Rich Results Interface:** Paginated, sortable, and filterable result tables with save and export options.\n- **🔄 Parameterized Saved Queries:** Save and reuse queries with `{{variable}}` placeholders for repeatable workflows.\n- **🗄️ Multi-Database Management:** Create, import, export, and switch between multiple databases.\n- **💾 Persistent Storage:** Auto-saves databases to browser storage (web) or local filesystem (desktop).\n- **🚀 Quick Actions:** Options to quickly copy database schemas, export table data, rename tables, change table schemas, and more.\n- **🌙 Dark Mode:** Polished light and dark themes.\n\n## 🎯 Why Joinery?\n\n**SQL excels at data transformations with transparent, modifiable code.** For tasks like pivoting, unpivoting, complex filtering, and sophisticated aggregations, SQL, especially DuckDB, provides built-in functions that are faster to write, easier to modify, and more reproducible than clicking through menus. When you ask AI for help with a spreadsheet task, you get step-by-step instructions to click through dialogs. When you ask for a SQL query, you get code you can instantly modify and rerun.\n\n**Modern AI has made SQL accessible to everyone.** Copy your database schema from Joinery, describe what you need in plain English to LLMs like Gemini, Claude, or ChatGPT, and get working queries back. SQL's readable syntax makes validation straightforward. You can see exactly what's happening to your data. LLMs can understand what data they're dealing with from the schema and sample data, making the process smoother.\n\n**Build reusable workflows.** Save queries with `{{parameters}}` for processes you run repeatedly. Need to run the same analysis on new data each week? Use the runtime parameters to update the query and execute. Chain multiple queries together for complex workflows that run end-to-end with one click.\n\n**Everything runs locally on your device.** Use it in your browser with no installation, or download the desktop app for native performance. Your data never leaves your machine. DuckDB delivers impressive performance for analytical queries, and Joinery is completely free and open-source.\n\n## 🚀 Quick Start\n\n### 🌐 Web Version\n\nRun Joinery in your browser:\n\n```bash\n# Clone the repository\ngit clone https://github.com/joinery-labs/joinery.git\ncd joinery\n\n# Install dependencies\nnpm install\n\n# Start development server\nnpm run dev\n```\n\nOpen [http://localhost:5173](http://localhost:5173) in your browser.\n\n**Build for production:**\n```bash\nnpm run build\n```\n\n### 💻 Desktop App (Tauri)\n\nGet the native desktop experience with better performance.\n\n**Prerequisites:** Ensure you have Rust and platform-specific dependencies installed. See the [Tauri Prerequisites Guide](https://v2.tauri.app/start/prerequisites/).\n\n```bash\n# Install dependencies\nnpm install\n\n# Run in development mode\nnpm run tauri dev\n\n# Build distributable application\nnpm run tauri build\n```\n\nThe built application will be in `src-tauri/target/release/`.\n\n## 📁 Project Structure\n\n```\njoinery/\n├── src/\n│   ├── css/\n│   │   ├── base/               # Theme variables, typography, utilities\n│   │   ├── components/         # Reusable UI components (buttons, modals, etc.)\n│   │   ├── features/           # Feature-specific styling\n│   │   └── layout/             # Layout structures (toolbar, masonry, etc.)\n│   ├── js/\n│   │   ├── core/               # Database engine, event bus, backends\n│   │   ├── editor/             # Monaco editor integration\n│   │   ├── features/           # Main application features\n│   │   │   ├── export-import/\n│   │   │   ├── file-upload/\n│   │   │   ├── query-editor/\n│   │   │   ├── results/\n│   │   │   └── table-manager/\n│   │   ├── platform/           # Web vs. Tauri platform abstraction\n│   │   │   ├── backends/\n│   │   ├── ui/                 # UI components\n│   │   └── utils/              # Helper functions and utilities\n│   └── index.html\n├── src-tauri/                  # Desktop application\n│   ├── src/                    # Rust application code\n│   ├── capabilities/           # Tauri capabilities configuration\n│   └── tauri.conf.json         # Tauri configuration\n├── README.md\n├── CONTRIBUTING.md\n├── LICENSE\n├── package.json\n└── vite.config.js\n```\n\n## 🤝 Contributing\n\nWe welcome contributions! Whether you're fixing bugs, adding features, or improving documentation, your help makes Joinery better.\n\n**Before contributing:**\n- Read our [Contributing Guide](./CONTRIBUTING.md).\n- Check existing [Issues](https://github.com/joinery-labs/joinery/issues).\n- For major changes, please open an issue or a discussion for prior review.\n\n## 🗺️ Roadmap\n\nThe following major features are planned. Minor improvements and bug fixes will continue on an ongoing basis.\n\n- **Multi-window support:** Pop out tabs into separate windows for flexible layouts.\n- **Declarative charting:** Create visualizations through simple, declarative configuration.\n\n## 🙏 Acknowledgments\n\n- **[DuckDB WASM](https://github.com/duckdb/duckdb-wasm)** and **[DuckDB Rust](https://github.com/duckdb/duckdb-rs)** for SQL database.\n- **[Bootstrap](https://github.com/twbs/bootstrap)** for UI components and styling.\n- **[Tauri](https://github.com/tauri-apps/tauri)** for desktop framework.\n- **[Monaco Editor](https://github.com/microsoft/monaco-editor)** for code editor.\n- **[Apache Arrow](https://github.com/apache/arrow)** for columnar data format.\n- **[SheetJS](https://sheetjs.com/)** for Excel file processing.\n- **[Sql-formatter](https://github.com/sql-formatter-org/sql-formatter)** for SQL formatting.\n- **[Day.js](https://github.com/iamkun/dayjs)** for date manipulation.\n- **[JSZip](https://github.com/Stuk/jszip)** for ZIP file handling.\n- **[Inter Font](https://github.com/rsms/inter)** for UI typography.\n\n## 🆘 Support\n\n- 🐛 **Bug Reports:** [GitHub Issues](https://github.com/joinery-labs/joinery/issues)\n- 💡 **Feature Requests:** [GitHub Discussions](https://github.com/joinery-labs/joinery/discussions)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoinery-labs%2Fjoinery","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoinery-labs%2Fjoinery","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoinery-labs%2Fjoinery/lists"}