sqlui-native
sqlui-native
is a simple UI client for most SQL Engines written in Electron. It is compatible with most desktop OS’s and support most dialects of RDBMS like MySQL, Microsoft SQL Server, Postgres, SQLite, Cassandra, MongoDB, Redis, Azure CosmosDB and Azure Storage Table.
It supports multiple Windows, so you can have different sets of queries and connections side by side. The connections and queries are all stored locally, so you can continue where you left off in later visits.
Downloads
Refer to the following link for download information.
Supported OS’s
- Windows (Tested on Windows 10 and 11)
- Mac OS (Tested on Mac OS Monterey)
- Debian / Ubuntu
- Redhat / CentOS / Fedora : Refer to this link for Installation Instructions
- [Arch Linux] (Tested on Steam Deck)(https://synle.github.io/sqlui-native/installation#arch-linux-with-pacman)
Supported Database Adapters
The list below are supported data stores. You can also refer to this link for General Queries
- MySQL
- MariaDB
- Microsoft
- PostgresSQL
- CockroachDB (Limited Supported by using PostgresSQL driver)
- SQLite
- Cassandra (Limited Supported)
- MongoDB (Limited Supported)
- Redis (Limited Supported)
- Azure CosmosDB (Limited Supported)
- Azure Table Storage (Azure Table) (Limited Supported)
Features
Overall Demo
Import and Export
Import and Export can be used to share connections across different machines and users. Below is a sample import config.
[
{
"_type": "connection",
"id": "connection.1643485516220.4798705129674932",
"connection": "postgres://postgres:password@localhost:5432",
"name": "sy postgres"
},
{
"_type": "query",
"id": "query.1643561715854.5278536054107370",
"name": "Employee Query on Postgres",
"sql": "SELECT\n *\nFROM\n employees\nLIMIT\n 10",
"connectionId": "connection.1643485516220.4798705129674932",
"databaseId": "music_store"
}
]
You 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.
Session Management
This application supports multiple windows / instances. Sessions are used to control which instances it persist the data with. Also these sessions, and the associated connections and queries are persisted locally. So you can continue where you left off in the future.
Dark Mode
Dark 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.
Query Tabs
Query Tab Orientation
When there is more than 20 tabs, the query tabs will be wrapped vertically.
Reordering Query Tabs
Query tabs can be re-ordered by drag and drop the query tabs bar.
Resizing the sidebar
The left sidebar can be resized by clicking and dragging the small section between the sidebar and the query box.
Command Palette
Similar to VS Code and Sublime Text, sqlui-native comes with a command palette that lets you reach your mostly used command via a key combo CMD + P
or Ctrl + P
on Windows.
Connection Hints
Sample URI connection string can be accessed by clicking on the Show Connection Hints
on New / Edit Connection Page. Then you can click on the sample URI connection to use that sample connection string as a starting place.
Settings
Settings can be accessed via the top right menu icon. It allows you to set up preferred settings for things like Editor and Color Theme, etc…
Data Migration
If you happens to work with different database engine, there’s a chance you want to move data from one engine to another engine. You can use Data Migration
to craft a query to pull in data from the old engine and select a destination to generate the new schema / data for the new engine.
Data Migration
can be accessed from the top right hamburger icon- From there, you have 2 options to migrate data. Either by a raw JSON or by data from an existing connection.
Migration of Real Existing Connection
Use this data migration option to move data from an existing connection
Migration of Raw JSON Data
Use this data migration option to move raw JSON data
Bookmarks
The system allows you to bookmark connections and queries. Bookmarked items can be applied to any workspace.
Adding new bookmark
- To bookmark a connection or query, open the context menu on the Connection name or Query tab name and choose
Add to Bookmark
. - Give the bookmarked item a
name
and hit Save.
Open a bookmark
You can select and apply a bookmarked item from bookmarks page which can be accessed via the hamburger menu bar on the top right and select Bookmarks
- From there, you can click on the bookmarked name to apply that bookmark item.
Recycle bin
By default, all closed queries and deleted connections will be stored inside of a recycle bin which you can always restore at a later. To access the recycle bin, click on the hamburger menu bar on the top right and select Recycle Bin
.
- From there you can choose to
Restore
the deleted connections or closed queries. - To permanently delete the items from sqlui-native, you can choose either
Empty Trash
orDelete
individual items permanently.
Hard Delete
If you want to permanently delete those and not put it in the recycle bin, you can set the Delete Mode
to be hard delete.
Record Pages
New Record Page
- New record page can be opened using the
New Record
button underneath the query editor. - There you need to select Connection / Database / Table you want to create a new record for.
- The form will render where you need to fill out the form data.
- Click on
Generate Script
to generate the query for the insert.
Record Details / Edit Record Page
- Clicking on any record on the query results will bring up the Record Detail page
- There you can toggle the edit mode.
- The form will render where you need to fill out the form data.
- Click on
Generate Script
to generate the query for the insert.
Contributing
Dev Note
Here is the link where you can find information about how run this application locally.
Features / TODO’s:
- Consolidate the interface for mocked server and the main.ts page.
- Make a build for Windows and Darwin.
- Added Basic CI/CD to package electron
- Make a build for other systems like Debian / Ubuntu and Redhat.
- Add a configuration / option page for color mode.
- Enhance the table with pagination.
- Enhance the table for result with sorting, and searching.
- Add quick query queries (such as select from a table or do update / insert).
- Add quick query to recreate the table definition (Create Table), Drop Table, etc….
- Add a full screen mode (F11)
- Add ability to save CSV / JSON / Table to files.
- Add ability to support multiple windows and sessions..
- Add ability to import and export connections and queries.
- Add ability to work with multiple instances.
- Add autocomplete tokens for the query.
- Add dark theme (Dark mode respect system color theme).
- Add auto update features.
- Push a build to Microsoft Store.
- Add supports for Cassandra.
- Add supports for Azure CosmosDB.
- Add supports for Azure Table (Azure Table storage).
- Add supports for AWS Redshift.
Limitations
sqlite Limitations
sqlite doesn’t support multiple statements. So if you have multiple inserts or updates in a single query, it will not work. Refer to this Stackoverflow post for more details related to sqlite.
If you want to do bulk inserts, use bulk inserts API instead.
INSERT INTO
art (Name)
VALUES
('Queen'),
('Kiss'),
('Spyro Gyra')
CockroachDB Limitations
CockroachDB can be connected using postgresSQL. Replace ?sslmode=require
with sslmode=no-verify
Sample connection will look like this
postgres://demo:demo26472@127.0.0.1:26257/movr?sslmode=no-verify
Cassandra Limitations
Cassandra Keyspaces are mapped to sqlui-native databases. And Cassandra Column Families are mapped to sqlui-native table.
How to get connection string for CosmosDB with Cassandra API?
- Go to
Connection String
of the Azure CosmosDB Cassandra
Sample CosmosDB with Cassandra API Connection String
It will look something like this.
cassandra://USERNAME:PRIMARY PASSWORD@CONTACT POINT:PORT
MongoDB Limitations
MongoDB Collections is mapped to sqlui-native table. We scan the first 5 Documents to come up with the schema for the columns.
Create new MongoDB Database
As of now (v1.27.0), you can create new mongodb using the following syntax
db.createDatabase('new-database-name');
Redis Limitations
Due to the size of keys within Redis connection, we will not show all keys in the Redis cache.
- As for SSL Redis support, use the
rediss://
connection scheme.
How to get connection string for Azure Redis Cache?
- Go to
Access Keys
on Azure Redis Cache. - Connection will look like
rediss://<username>:<password>@<your_redis_host>:<redis_port>
- Sample connection will look like this. Due to how the URL scheme is parsed, a non empty string is required for the username placeholder. It can be anything but empty string.
rediss://azure:Primary_Or_Secondary_Access_Key@syredis1.redis.cache.windows.net:6380
Azure CosmosDB Limitations
Azure CosmosDB Databases are mapped to sqlui-native Databases. And Azure CosmosDB Containers are mapped to sqlui-native Tables. We scan the first 5 items to come up with the schema for the columns.
Tested for Azure CosmosDB (with Core SQL).
How to get connection string for CosmosDB with Core SQL API?
Here’s how to set up the connection. Open your resource, and click on Keys
. Then copy and use either PRIMARY CONNECTION STRING
or SECONDARY CONNECTION STRING
Sample CosmosDB with Core SQL API Connection String
It will look something like this.
cosmosdb://<your_primary_connection_string>
or
cosmosdb://<your_secondary_connection_string>
Azure Table Storage Limitations
Azure Table Storage tables are mapped to sqlui-native Tables. We scan the first 5 items to come up with the schema for the columns.
Setting up connection string
Here’s how to set up the connection.
Sample connection will look like this
aztable://<your_connection_string>
Suggestion?
Use the following link to file a bug or a suggestion.