{"id":42702048,"url":"https://github.com/synle/sqlui-native","last_synced_at":"2026-05-12T01:05:03.232Z","repository":{"id":352064895,"uuid":"1210756561","full_name":"synle/sqlui-native","owner":"synle","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-20T03:21:37.000Z","size":17315,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-20T04:49:06.496Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/synle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","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},"funding":{"github":"synle"}},"created_at":"2026-04-14T18:16:22.000Z","updated_at":"2026-04-20T03:21:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/synle/sqlui-native","commit_stats":null,"previous_names":["synle/sqlui-native"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/synle/sqlui-native","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synle%2Fsqlui-native","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synle%2Fsqlui-native/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synle%2Fsqlui-native/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synle%2Fsqlui-native/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/synle","download_url":"https://codeload.github.com/synle/sqlui-native/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/synle%2Fsqlui-native/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32123638,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T00:31:26.853Z","status":"online","status_checked_at":"2026-04-22T02:00:05.693Z","response_time":58,"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":["azure","azure-storage","cassandra","cockroachdb","cosmosdb","mongodb","mssql","mysql","postgresql","redis","sql","sqlite","sqlui-native","sqluinative"],"created_at":"2026-01-29T14:22:01.397Z","updated_at":"2026-05-12T01:05:03.208Z","avatar_url":"https://github.com/synle.png","language":"TypeScript","funding_links":["https://github.com/sponsors/synle"],"categories":[],"sub_categories":[],"readme":"[![build-main](https://github.com/synle/sqlui-native/actions/workflows/build-main.yml/badge.svg)](https://github.com/synle/sqlui-native/actions/workflows/build-main.yml)\n\n# [sqlui-native](https://github.com/synle/sqlui-native)\n\n![64](https://user-images.githubusercontent.com/3792401/160178384-638de88f-1712-4419-aed4-b1ef79e5d82a.png)\n\n`sqlui-native` is a cross-platform desktop SQL/NoSQL database client and REST API client built with Tauri v2 and a Node.js sidecar. It supports MySQL, MariaDB, Microsoft SQL Server, PostgreSQL, SQLite, Cassandra, MongoDB, Redis, Azure CosmosDB, Azure Table Storage, Salesforce (SFDC), and REST APIs (curl/fetch).\n\nIt supports multiple windows, so you can run different sets of queries and connections side by side. Connections and queries are stored locally and persist across sessions.\n\n## Downloads\n\n[Sqlui Native Homepage](https://synle.github.io/sqlui-native)\n\n## Supported Platforms\n\n- [Windows 10/11 (x64 Installer)](https://synle.github.io/sqlui-native/installation#windows)\n- [macOS (Apple Silicon M1–M4)](https://synle.github.io/sqlui-native/installation#mac) — see [quarantine troubleshooting](#mac-apple-silicon-m-series---app-is-damaged-error)\n- [macOS (Intel x64)](https://synle.github.io/sqlui-native/installation#mac)\n- [Ubuntu / Debian / Linux Mint (.deb)](https://synle.github.io/sqlui-native/installation#ubuntu--debian)\n- [Linux Other Distros (AppImage)](https://synle.github.io/sqlui-native/installation#linux-other-distro-appimage)\n\n## Portal Mode (Web)\n\nRun sqlui-native as a self-contained **web portal** — phpMyAdmin / sqlite-web style — no desktop install needed. One Node script, one port, every supported dialect.\n\nRequires **Node.js 22+** on the host.\n\n### Quick start (download from a release)\n\n**One tarball, two flows.** The release ships a single `sqlui-portal.tar.gz` whose contents work for both `curl | tar` and `npx`. Pick whichever you prefer — same file, same result:\n\n#### Option A — `npx` (auto-cached, single command, Windows-friendly)\n\n```bash\nnpx https://github.com/synle/sqlui-native/releases/latest/download/sqlui-portal.tar.gz ./mydata.sqlite\n```\n\n`npx` downloads the tarball, caches it under `~/.npm/_npx/`, and runs in one step. Subsequent invocations are instant. npm/pacote strips the top-level `portal/` directory and finds the `package.json` at the root, so `.tar.gz` works just like `.tgz` would.\n\n#### Option B — `curl | tar` (no npm involved)\n\n```bash\ncurl -fsSL https://github.com/synle/sqlui-native/releases/latest/download/sqlui-portal.tar.gz \\\n  | tar -xz \\\n  \u0026\u0026 ./portal/sqlui-portal ./mydata.sqlite\n```\n\n#### Pin a specific version\n\nThe `latest/download/sqlui-portal.tar.gz` URL is a versionless alias that always resolves to the current release. To pin to a specific tag, put the tag in the URL — the filename stays the same:\n\n```bash\nVERSION=3.1.6\n# Either flow:\nnpx \"https://github.com/synle/sqlui-native/releases/download/v${VERSION}/sqlui-portal.tar.gz\" ./mydata.sqlite\ncurl -fsSL \"https://github.com/synle/sqlui-native/releases/download/v${VERSION}/sqlui-portal.tar.gz\" | tar -xz \\\n  \u0026\u0026 ./portal/sqlui-portal ./mydata.sqlite\n```\n\n### Build from source\n\n```bash\ngit clone https://github.com/synle/sqlui-native\ncd sqlui-native\nnpm install\nnpm run build:portal\n```\n\nThis produces three files under `dist/portal/`:\n\n- `sqlui-portal.js` — the bundled server (~6.6 MB, all deps inlined)\n- `sqlui-portal-assets.json` — embedded React frontend (~22 MB, decoded at runtime)\n- `sqlui-portal` — bash launcher (locates Node and execs the bundle)\n\nCopy the whole `dist/portal/` directory anywhere; it has no other dependencies besides a system Node.js 22+.\n\n### Run\n\n```bash\n# Open a SQLite file (auto-opens browser at http://127.0.0.1:19378)\n./portal/sqlui-portal ./mydata.sqlite\n\n# Multiple connections, any dialect, in one shot\n./portal/sqlui-portal \\\n  ./work.sqlite \\\n  postgres://user:pass@db.example.com:5432/mydb \\\n  mongodb://localhost:27017 \\\n  redis://localhost:6379\n```\n\nOn boot, the portal:\n\n1. Adds each input as a connection (deduped by canonical connection string — running twice is a no-op)\n2. Prints the URL it's running on (e.g. `http://127.0.0.1:19378`)\n3. Opens your default browser\n\n### Options\n\n| Flag                       | Default           | Description                                                                                                              |\n| -------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------ |\n| `--port \u003cn\u003e`               | `19378`           | Listen port. Falls back to a random port if the requested one is busy. `0` = random.                                     |\n| `--host \u003ch\u003e`               | `127.0.0.1`       | Bind host. Use `0.0.0.0` to expose on the LAN.                                                                           |\n| `--home-dir \u003cpath\u003e`        | `~/.sqlui-portal` | Storage directory override. Highest priority.                                                                            |\n| `--config-path \u003cpath\u003e`     | —                 | Alias for `--home-dir`.                                                                                                  |\n| `--use-desktop-storage`    | —                 | Share storage with the desktop app (`~/.sqlui-native`). Connections show up in the desktop app under a \"Portal\" session. |\n| `--no-open`                | —                 | Don't auto-open the browser.                                                                                             |\n| `-h`, `--help`, `-?`, `/?` | —                 | Show full usage with examples and exit.                                                                                  |\n\n### Dialect support\n\nPortal mode supports every dialect the desktop app does — SQLite, PostgreSQL, MySQL, MariaDB, Microsoft SQL Server, Cassandra, MongoDB, Redis, Azure CosmosDB, Azure Table Storage, Salesforce (SFDC), REST, and GraphQL. Pass connection strings in their native format (`postgres://…`, `mongodb://…`, `aztable://DefaultEndpointsProtocol=…`, etc.).\n\nA bare path like `./mydata.sqlite` is auto-resolved to `sqlite:///\u003cabsolute-path\u003e`.\n\n### Storage\n\nPortal mode keeps its data in **`~/.sqlui-portal/`** so it never touches the desktop app's `~/.sqlui-native/` — true regardless of how it's launched (npx, curl-tar, raw `node sqlui-portal.js`).\n\nOverride priority (highest first):\n\n1. `--home-dir \u003cpath\u003e` (or `--config-path \u003cpath\u003e`) CLI flag\n2. `--use-desktop-storage` (sugar for `--home-dir ~/.sqlui-native`)\n3. `SQLUI_HOME_DIR` environment variable\n4. `~/.sqlui-portal` (default)\n\n```bash\n# Per-invocation, throwaway session\n./portal/sqlui-portal --home-dir /tmp/work-session ./mydata.sqlite\n\n# Share with the desktop app — connections appear in your .app under a \"Portal\" session\n./portal/sqlui-portal --use-desktop-storage ./mydata.sqlite\n\n# Or via env var (handy for shell aliases)\nSQLUI_HOME_DIR=/tmp/work-session ./portal/sqlui-portal ./mydata.sqlite\n\n# Or fully isolated, never persists\n./portal/sqlui-portal --home-dir \"$(mktemp -d)\" ./mydata.sqlite\n```\n\nRun `sqlui-portal --help` for the full list of flags, examples, and dialect-specific connection-string formats.\n\n### When to use portal vs desktop\n\n- **Desktop app** — full multi-window experience, native menus, OS integration. Best for daily use.\n- **Portal** — quick \"open this DB in a browser tab\" workflow, server/cloud machines without a GUI, sharing a UI on a LAN with `--host 0.0.0.0`, ephemeral throwaway sessions.\n\n## Supported Database Adapters\n\nRefer to the [query guides](https://synle.github.io/sqlui-native/guides) for dialect-specific syntax and examples.\n\n- [MySQL](https://synle.github.io/sqlui-native/guides#mysql)\n- [MariaDB](https://synle.github.io/sqlui-native/guides#mariadb)\n- [Microsoft SQL Server](https://synle.github.io/sqlui-native/guides#mssql)\n- [PostgreSQL](https://synle.github.io/sqlui-native/guides#postgres)\n- [CockroachDB](https://github.com/synle/sqlui-native#cockroachdb-limitations) (limited support via PostgreSQL driver)\n- [SQLite](https://synle.github.io/sqlui-native/guides#sqlite)\n- [Cassandra](https://synle.github.io/sqlui-native/guides#cassandra) (limited support)\n- [MongoDB](https://synle.github.io/sqlui-native/guides#mongodb) (limited support)\n- [Redis](https://synle.github.io/sqlui-native/guides#redis) (limited support)\n- [Azure CosmosDB](https://synle.github.io/sqlui-native/guides#cosmosdb) (limited support)\n- [Azure Table Storage](https://synle.github.io/sqlui-native/guides#aztable) (limited support)\n- [Salesforce (SFDC)](https://synle.github.io/sqlui-native/guides#sfdc) (limited support)\n- REST API (curl / fetch) — Postman-like API client with `{{variable}}` interpolation\n\n## Features\n\n### Overall Demo\n\n![demo-full](https://user-images.githubusercontent.com/3792401/151750703-419b66f2-938b-4edd-b852-97bfdfa12efd.gif)\n\n### Import and Export\n\nImport and Export can be used to share connections across different machines and users. Below is a sample import config.\n\n```\n[\n  {\n    \"_type\": \"connection\",\n    \"id\": \"connection.1643485516220.4798705129674932\",\n    \"connection\": \"postgres://postgres:password@localhost:5432\",\n    \"name\": \"sy postgres\"\n  },\n  {\n    \"_type\": \"query\",\n    \"id\": \"query.1643561715854.5278536054107370\",\n    \"name\": \"Employee Query on Postgres\",\n    \"sql\": \"SELECT\\n  *\\nFROM\\n  employees\\nLIMIT\\n  10\",\n    \"connectionId\": \"connection.1643485516220.4798705129674932\",\n    \"databaseId\": \"music_store\"\n  }\n]\n```\n\nYou can also drag and drop the file directly into sqlui-native application. At the moment, we only support drag and drop for a single file.\n\n![demo-import-export](https://user-images.githubusercontent.com/3792401/151750721-9ea1ab38-e185-40dd-ba4d-71d28f3ae1d6.gif)\n\n### Session Management\n\nThe app supports multiple windows and instances. Each session persists its own connections and queries locally, so you can pick up where you left off.\n\n![demo-session](https://user-images.githubusercontent.com/3792401/151750740-10ff3497-11b4-4026-bd39-c34b80bc1e3a.gif)\n\n### Dark Mode\n\nDark mode will be turned on automatically with respect to your OS Preference. You can update settings to prefer Dark Mode or Light Mode if desired.\n\n![demo-darkmode](https://user-images.githubusercontent.com/3792401/151746840-e4889ae1-cab9-4ade-b56b-5a4dbb654712.gif)\n\n### Query Tabs\n\n#### Query Tab Orientation\n\nWhen there are more than 20 tabs, the query tabs wrap vertically.\n\n![image](https://user-images.githubusercontent.com/3792401/152028900-400605a2-0cb0-48df-9249-8ce060d3a256.png)\n\n#### Reordering Query Tabs\n\nDrag and drop query tabs to reorder them.\n\n![tab-ordering](https://user-images.githubusercontent.com/3792401/153722628-ea28a940-e33a-4f66-983d-eb3e824e2a1c.gif)\n\n#### Resizing the Sidebar\n\nDrag the divider between the sidebar and the query editor to resize the sidebar.\n\n![sidebar-resize](https://user-images.githubusercontent.com/3792401/153722656-10529ff3-e818-4b6d-954c-7bdf57631d11.gif)\n\n### Command Palette\n\nOpen the command palette with `Cmd+P` (Mac) or `Ctrl+P` (Windows/Linux) to quickly access commands.\n\n![image](https://user-images.githubusercontent.com/3792401/152029205-5798c53d-6304-40dc-b9d8-11700bfc03f2.png)\n\n### Connection Hints\n\nClick `Show Connection Hints` on the New/Edit Connection page to see sample URI connection strings. Click any sample to use it as a starting point.\n\n![image](https://user-images.githubusercontent.com/3792401/152658433-74fdb868-293c-46b4-8bc3-ec0008f32b2d.png)\n\n### Settings\n\nAccess settings via the menu icon in the top right corner to configure editor preferences, color theme, and more.\n\n![image](https://user-images.githubusercontent.com/3792401/152658383-10a204b8-ab45-46be-87f3-03084cc2ae7a.png)\n\n![image](https://user-images.githubusercontent.com/3792401/167707497-82546e72-4a7f-4724-bf1e-8c36836d685d.png)\n\n### SQLite-based Storage\n\nApplication data (connections, queries, sessions, settings, caches) is stored in a single SQLite database file (`sqlui-native-storage.db`) in the app data directory. This makes import/export simpler compared to the previous approach of many individual JSON files.\n\nOn first launch after upgrading, existing JSON storage files are automatically migrated into the SQLite database. The original JSON files are moved to a `backup/` subdirectory (not deleted) so you can restore them if needed by moving them back to the parent directory.\n\n### Data Migration\n\nUse `Data Migration` to move data between database engines. Access it from the top right hamburger menu. You can migrate from:\n\n- An existing connection (queries the source and generates scripts for the target engine)\n- Raw JSON data\n\n![image](https://user-images.githubusercontent.com/3792401/176089071-ddfe9c67-46bb-4261-9e2b-0978fa25eee2.png)\n\n![image](https://user-images.githubusercontent.com/3792401/176088421-5b0e6e48-0e44-41ab-b98f-0677feff70d1.png)\n\n#### Migration of Real Existing Connection\n\nUse this data migration option to move data from an existing connection\n\n![image](https://user-images.githubusercontent.com/3792401/176088688-eaba3a95-0bf9-4efa-8513-e7b4c534074f.png)\n\n#### Migration of Raw JSON Data\n\nUse this data migration option to move raw JSON data\n\n![image](https://user-images.githubusercontent.com/3792401/176088775-385777a8-a89b-460c-878d-8bb64af20f84.png)\n\n### Bookmarks\n\nThe system allows you to bookmark connections and queries. Bookmarked items can be applied to any workspace.\n\n#### Adding a Bookmark\n\nRight-click a connection name or query tab and choose `Add to Bookmark`. Enter a name and click Save.\n\n![image](https://user-images.githubusercontent.com/3792401/176319082-d6091511-8cee-4482-a0df-81e11af8f5ec.png)\n\n![image](https://user-images.githubusercontent.com/3792401/176326012-855b02ec-e87b-4c8e-a2f2-961bc2c76296.png)\n\n#### Opening a Bookmark\n\nOpen the hamburger menu (top right) \u003e `Bookmarks`, then click a bookmark name to apply it.\n\n![image](https://user-images.githubusercontent.com/3792401/176320070-f1194574-94d8-4626-95a8-4743f8b7eeb7.png)\n\n![image](https://user-images.githubusercontent.com/3792401/176325971-fabcb3ad-efe3-4b19-8383-becc58b9d287.png)\n\n#### Recycle Bin\n\nDeleted connections and closed queries are moved to the recycle bin. Access it via the hamburger menu (top right) \u003e `Recycle Bin`.\n\n- **Restore** — recover individual items\n- **Delete** — permanently remove individual items\n- **Empty Trash** — permanently remove all items\n\n![image](https://user-images.githubusercontent.com/3792401/176087950-36a3ec82-c975-43c8-b225-b044bd81248e.png)\n\n![image](https://user-images.githubusercontent.com/3792401/176088031-63c7bdfb-16a1-481c-9ca3-615043d5f362.png)\n\n##### Hard Delete\n\nTo bypass the recycle bin and permanently delete items immediately, set `Delete Mode` to hard delete in Settings.\n\n![image](https://user-images.githubusercontent.com/3792401/176343562-0f4400b2-881d-4a55-becc-3ad82c564bc6.png)\n\n### Relationship Chart (FK Visualization)\n\nVisualize foreign key relationships for relational databases (MySQL, MariaDB, MSSQL, PostgreSQL, SQLite). Right-click a table name and choose `Show Relationships`.\n\n- **Diagram view** — interactive chart with tables as nodes and FK edges (zoom, pan, drag)\n- **Table view** — sortable FK list\n- Toggle horizontal/vertical layout, expand/collapse edge labels, export as PNG\n\n### Code Snippets\n\nGenerate ready-to-use connection code snippets for your database in **Java**, **JavaScript**, and **Python**. Access code snippets from the query script dropdown for any connection.\n\n### Record Pages\n\n#### New Record Page\n\n1. Click `New Record` below the query editor\n2. Select the Connection, Database, and Table\n3. Fill in the form fields\n4. Click `Generate Script` to generate the INSERT query\n\n![image](https://user-images.githubusercontent.com/3792401/176941021-dad33a56-55d3-439b-a3a5-600f68f7e049.png)\n\n![image](https://user-images.githubusercontent.com/3792401/176941201-460bd80e-6aa5-467d-987a-7a20637ad807.png)\n\n#### Record Details / Edit Record Page\n\nClick any row in the query results to open the Record Detail page. Toggle edit mode to modify fields, then click `Generate Script` to generate the UPDATE query.\n\n## Contributing\n\n- [Repo](https://github.com/synle/sqlui-native)\n\n### Dev Notes\n\nSee [CONTRIBUTING.md](https://github.com/synle/sqlui-native/blob/main/CONTRIBUTING.md) for how to run the app locally and contribute.\n\n### Adding a New Database Adapter\n\nWant to add support for a new database engine? The project uses an adapter pattern where each database engine implements a standard interface (`IDataAdapter`). A starter template is provided at [`src/common/adapters/_SampleDataAdapter_/`](https://github.com/synle/sqlui-native/tree/main/src/common/adapters/_SampleDataAdapter_).\n\nThe high-level steps are:\n\n1. Add a new dialect to `typings/index.ts`\n2. Copy the sample adapter template and implement the adapter class (`index.ts`) and script generator (`scripts.ts`)\n3. Register your adapter in `DataAdapterFactory.ts` and `DataScriptFactory.ts`\n4. Add a dialect icon PNG in your adapter directory and import it in `scripts.ts`\n5. Add snapshot tests in `DataScriptFactory.spec.ts`\n\nFor the full step-by-step guide with code examples, see the [Adding new adapters](https://github.com/synle/sqlui-native/blob/main/CONTRIBUTING.md#adding-new-adapters) section in CONTRIBUTING.md.\n\n## Roadmap\n\n- [ ] Query autocomplete\n- [ ] Auto-update\n- [ ] Microsoft Store distribution\n- [ ] AWS Redshift adapter\n\n## Troubleshooting\n\n### Mac Apple Silicon (M-Series) - \"App is damaged\" Error\n\nOn macOS 26+ with Apple Silicon (M1/M2/M3/M4), you may see the following error when attempting to open the app:\n\n\u003e \"sqlui-native.app\" is damaged and can't be opened. You should move it to the Trash.\n\u003e \u003cimg width=\"866\" height=\"999\" alt=\"image\" src=\"https://github.com/user-attachments/assets/9a1c12fd-2936-4b77-87a5-217c461ebd56\" /\u003e\n\nThis is caused by macOS quarantine attributes applied to unsigned apps. To fix this, open Terminal and run:\n\n```\nxattr -cr /Applications/sqlui-native.app\n```\n\nAfter running the command, you should be able to open sqlui-native normally.\n\n## Limitations\n\n### SQLite Limitations\n\nSQLite does not support multiple statements in a single query. Use bulk insert syntax instead:\n\n```sql\nINSERT INTO\n  art (Name)\nVALUES\n  ('Queen'),\n  ('Kiss'),\n  ('Spyro Gyra')\n```\n\n### CockroachDB Limitations\n\nCockroachDB connects via the PostgreSQL driver. Replace `?sslmode=require` with `?sslmode=no-verify` in the connection string:\n\n```\npostgres://demo:demo26472@127.0.0.1:26257/movr?sslmode=no-verify\n```\n\n### Cassandra Limitations\n\nCassandra keyspaces map to sqlui-native databases, and column families map to tables.\n\n#### CosmosDB with Cassandra API Connection String\n\nGo to `Connection String` in the Azure CosmosDB Cassandra resource:\n\n![image](https://user-images.githubusercontent.com/3792401/181765317-6a63b300-ee0e-4041-a49c-e4ec6a698b39.png)\n\n##### Sample Connection String\n\n```\ncassandra://USERNAME:PRIMARY PASSWORD@CONTACT POINT:PORT\n```\n\n### MongoDB Limitations\n\nMongoDB collections map to sqlui-native tables. The schema is inferred by scanning the first 5 documents.\n\n#### Create a New MongoDB Database\n\n```js\ndb.createDatabase(\"new-database-name\");\n```\n\n### Redis Limitations\n\nNot all keys are displayed due to potentially large key sets. For SSL connections, use the `rediss://` scheme.\n\n#### Azure Redis Cache Connection String\n\nGo to `Access Keys` in the Azure Redis Cache resource:\n![image](https://user-images.githubusercontent.com/3792401/183109606-5c07c993-fed7-4877-be31-798a1ea9676d.png)\n\nFormat: `rediss://\u003cusername\u003e:\u003cpassword\u003e@\u003chost\u003e:\u003cport\u003e`\n\nThe username field must be a non-empty string (any value works):\n\n```\nrediss://azure:Primary_Or_Secondary_Access_Key@syredis1.redis.cache.windows.net:6380\n```\n\n### Azure CosmosDB Limitations\n\nCosmosDB databases map to sqlui-native databases, and containers map to tables. The schema is inferred by scanning the first 5 items. Tested with CosmosDB Core SQL API.\n\n#### CosmosDB Core SQL API Connection String\n\nOpen your CosmosDB resource \u003e `Keys`, then copy the `PRIMARY CONNECTION STRING` or `SECONDARY CONNECTION STRING`:\n\n![image](https://user-images.githubusercontent.com/3792401/168092880-28d066ad-725f-429a-8ebf-92bb7f4f6d68.png)\n![image](https://user-images.githubusercontent.com/3792401/168093067-fe0aa98c-297c-4f11-a16e-8c60797de800.png)\n\n##### Sample Connection String\n\n```\ncosmosdb://\u003cyour_primary_or_secondary_connection_string\u003e\n```\n\n### Salesforce (SFDC) Limitations\n\nSalesforce SObjects are mapped to sqlui-native Tables, and Salesforce Fields are mapped to sqlui-native Columns. Each connection represents a single Salesforce Org (mapped as a single database).\n\nThe adapter supports three query modes:\n\n- **SOQL** (read-only) -- Queries starting with `SELECT` are executed as SOQL\n- **SOSL** (read-only search) -- Queries starting with `FIND` are executed as SOSL\n- **JS API** (mutations) -- Queries containing `conn.` are executed as JavaScript for create, update, delete, and upsert operations\n\n#### Setting up connection string\n\n1. Sign up for a free Developer Org at [developer.salesforce.com/signup](https://developer.salesforce.com/signup)\n2. Get your Security Token: **Avatar \u003e Settings \u003e My Personal Information \u003e Reset My Security Token**\n3. Use JSON format for the connection string:\n\n```\nsfdc://{\"username\":\"you@yourcompany.dev\",\"password\":\"your_password\",\"securityToken\":\"your_token\",\"loginUrl\":\"login.salesforce.com\"}\n```\n\n- `loginUrl` defaults to `login.salesforce.com` if omitted. Use `test.salesforce.com` for sandbox orgs.\n- `securityToken` can be omitted if your IP is whitelisted.\n\n#### OAuth2 Client Credentials Flow\n\nFor orgs using Connected Apps, you can authenticate without a username/password by providing `clientId` and `clientSecret`:\n\n```\nsfdc://{\"clientId\":\"your_connected_app_client_id\",\"clientSecret\":\"your_connected_app_client_secret\",\"loginUrl\":\"your-org.my.salesforce.com\"}\n```\n\nSessions are automatically refreshed when they expire — no manual reconnection needed.\n\n#### Sample queries\n\n```sql\n-- SOQL: Select accounts\nSELECT Id, Name, Industry FROM Account LIMIT 10\n\n-- SOSL: Search across objects\nFIND {keyword} IN ALL FIELDS RETURNING Account(Id, Name), Contact(Id, Name) LIMIT 20\n```\n\n```js\n// JS API: Insert a record\nconn.sobject(\"Account\").create({ Name: \"New Account\", Industry: \"Technology\" });\n\n// JS API: Update a record\nconn.sobject(\"Account\").update({ Id: \"001xxx\", Name: \"Updated Name\" });\n\n// JS API: Delete a record\nconn.sobject(\"Account\").destroy(\"001xxx\");\n```\n\n### Azure Table Storage Limitations\n\nAzure Table Storage tables map to sqlui-native tables. The schema is inferred by scanning the first 5 items.\n\n#### Setting Up Connection String\n\n![image](https://user-images.githubusercontent.com/3792401/168092476-02b0ddb6-5cff-41fe-9b6a-8a212325999a.png)\n![image](https://user-images.githubusercontent.com/3792401/168092539-451ca459-3429-4030-9729-2894a5bbf259.png)\n\n```\naztable://\u003cyour_connection_string\u003e\n```\n\n### REST API Features\n\n- Dual syntax: auto-detects `curl` and `fetch()` input (paste from Chrome DevTools).\n- `{{VAR}}` variable interpolation with 4-layer priority (folder \u003e collection \u003e global), plus dynamic variables (`{{$timestamp}}`, `{{$randomUUID}}`).\n- Warns on unresolved `{{VAR}}` placeholders after variable resolution.\n- Supports proxy (`-x`/`--proxy`), timeouts (`--max-time`, `--connect-timeout`), basic auth (`-u`), SSL bypass (`-k`), redirects (`-L`), and file uploads (`-F`).\n- Code snippet generation for JavaScript (fetch), Python (requests), and Java (HttpClient).\n- Import from HAR files and Postman Collection v2.1; export as Postman Collection.\n- Response viewer with tabs for Body, Headers, Cookies, Timing, and Raw JSON download.\n\n### REST API Limitations\n\n- Requires `curl` installed on the system (pre-installed on macOS and most Linux distributions).\n- Uses curl/fetch syntax in the editor — not a visual form builder like Postman.\n- No persistent connection — each request is a standalone `curl` subprocess.\n- `{{VAR}}` variable interpolation is case-sensitive.\n- Connection string format: `rest://{\"HOST\":\"https://httpbin.org\"}` (also accepts legacy `restapi://`).\n- Folder nesting is limited to 2 levels (Connection → Folder → Request), matching the database/table model.\n\n## Feedback\n\n[File a bug or suggestion](https://github.com/synle/sqlui-native/issues/new)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsynle%2Fsqlui-native","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsynle%2Fsqlui-native","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsynle%2Fsqlui-native/lists"}