I work mostly in the terminal but found myself constantly switching to bloated GUIs like SSMS only for the simple task of browsing tables and run queries. And I didn't find Existing SQL TUIs intuitive, having to read documentation to learn keybindings and CLI flags to connect. Given I had recently switched to linux, I found myself using vs code's sql database extension. Something was awfully wrong.
I wanted something like lazygit for databases – run it, connect, and query and frankly just make it enjoyable to access data.
Sqlit is a keyboard-driven SQL TUI with:
- Context-based keybindings (always visible)
- Neovim-like interface with normal and insert mode for query editing
- Browse databases, tables, views, stored procedures
- Adapters for SQL Server, SQLite, PostgreSQL, Turso & more
- SSH tunneling support
- Themes (Tokyo Night, Nord, Gruvbox etc.)
Inspired by lazygit, neovim and lazysql. Built with Python/Textual.
Feedback welcome – especially on which adapters to prioritize next. My vision of sqlit is to make a tool that makes it easy to connect and query data, and to do that, and that thing only, really well.tanin3 days ago
I've built a similar app but for desktop GUI. The UI is very similar to this app because I like TUI style UI due to the efficient use of UI space.
It focuses more on editing and exploring data for power users. UI space is utilized well. Exploring millions of rows is a breeze. Writing SQLs and managing them is pleasant with the multi-tab approach.
I'm working through adding the shortcuts and modal mode. I want to make it more like vim where you just use shortcuts to do things.
It supports postgres, click house, and sqlite
I'm looking for early beta users. If you are interested in a GUI version, here: https://github.com/tanin47/backdoor
caminanteblanco3 days ago
This looks awesome! Is there a way to log in some way that doesn't leave your credentials saved in a text file or your bash history? I would use this at work, but I think my sysadmin would eat me alive if I was storing the login credentials in plaintext
MaxTeabagop2 days ago
That's a really good point.
I am going to implement the option to leave the password blank, so you'll get prompted for a password on connection every time, so nothing will get stored.
In the next release I am going to use Keyring to store credentials on the operating system's credential store. Stay tuned :)
nodesocket2 days ago
Agree, the ability to define an in-memory only connection seems super useful.
vinshoo2 days ago
Looks great! It seems that sqlit still relies on arrow keys for getting around. Would it be possible to add options for more vim style on these places?
- Browse explorer tree with jk
- Next/Prev autocomplete suggestion with ^+j,^+k
- Browse Results with hjkl
Some other suggestions:
- Filter tables (f.e. press / and start typing to filter down tables)
- Ability to edit cell value
Otherwise it feels great, thanks for it :) UI looks much nicer than on lazysql and toggleable sidebar is great.
MaxTeabagop2 days ago
Thanks! Those are really good suggestions, the next release is going to have more vim keys :)
tracker12 days ago
Definitely cool to see... Lost of new TUI applications, but seems to be more than a handful of DB UIs at this point. Was half surprised it wasn't another Rust+Ratatui application. Not that there's anything wrong with that either.
Maybe I'm just a little jaded at seeing a lot of the same type of thing rehashed multiple times a week lately.
This isn't meant to detract from this author, or any other... You have an itch and scratched it. This is what makes open-source work.
yoavm3 days ago
Looks great, congrats! Also check out https://github.com/achristmascarl/rainfrog which seems to have similar goals, though is Postgres only.
kej3 days ago
It looks like rainfrog has branched out from just postgres, but still doesn't cover the range that sqlit does.
no_news_is4 days ago
Very nice, works well.
It seems you put some menu items behind what I'll call "[space] mode," where you you have to press the spacebar first to open the command menu, then use the command.
This is not reflected properly in the help text shown when you press ? and that was a source of confusion for me.
Especially since I managed to activate the fullscreen mode for one pane AND turn it off, but then couldn't figure out how I did it; and also, I did not find the space-Q option to Quit at first.)
Edit to add, I prefer installing with pipx.
These commands worked for me, to get Postgresql and MariaDB database plugins:
pipx install sqlit-tui
cd ~/.local/pipx/venvs/sqlit-tui
source bin/activate
bin/python3 -m pip install psycopg2
sudo apt-get install -y libmariadb-dev # On Debian
bin/python3 -m pip install mariadb
I didn't try installing system-wide as per the GitHub instructions, I don't know if that would have worked just as well with pipx or not.zahlman3 days ago
> These commands worked for me, to get Postgresql and MariaDB database plugins:
I haven't tried this, but I'm familiar with pipx. It provides a higher-level interface, so something like this should work:
pipx install sqlit-tui
sudo apt-get install -y libmariadb-dev
pipx inject sqlit-tui psycopg2 mariadb
Ref.: https://pipx.pypa.io/stable/#inject-a-package> I don't know if that would have worked just as well with pipx or not.
I don't actually see anything in the GitHub instructions about system-wide installation? But yes, since version 1.5 (https://pipx.pypa.io/stable/changelog/#150-2024-03-29) Pipx can do a `--global` install that by default puts the managed venv in /opt and executable symlink in /usr/local/bin.
MaxTeabagop2 days ago
Great UX feedback, that's going to be sorted out in the next release.
Also the pipx comment made me decide to put much more thought into how sqlit helps with package installation on runtime, and I'm going to suggest pipx by default and it's also going to give the correct commands for every popular package manager.
Thanks!
oulipo22 days ago
Using uv you can do
uvx --with psycopg2-binary --from sqlit-tui sqlit
lgas3 days ago
I was surprised to find that I could not run it with uvx:
% uvx sqlit
Built unicodecsv==0.14.1
Built sqlit==0.1.6
Installed 2 packages in 1ms
Traceback (most recent call last):
File "/Users/john/.cache/uv/archive-v0/AP7XgAQ1v0HpPxXUi-hs4/bin/sqlit", line 7, in <module>
from sqlit.main import main
File "/Users/john/.cache/uv/archive-v0/AP7XgAQ1v0HpPxXUi-hs4/lib/python3.12/site-packages/sqlit/main.py", line 125
print sql
^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?hiichbindermax3 days ago
That's not the same package. You should try sqlit-tui
mrbump2 days ago
Yes, for uvx you need to do "uvx --from sqlit-tui sqlit"
lgas2 days ago
Ah, thanks. This worked great. I was fooled by the package name.
debarshri3 days ago
One of the feedback i have heard from people using SSMS is that it has all the admin operations available in the UI as compared to doing it yourself. Lot of admins i deal with day to day do not want to use the terminal or sqlcmd.
I'm wondering if thats true.
baq3 days ago
Admins don’t ever close the tool, it’s always open on some RDP. Devs have different usage patterns.
SSMS is super duper nice if you’re an admin or a power SQL server user/dev. Nothing I’ve seen in Postgres world is comparable.
tracker12 days ago
The only thing I wish they'd do with SSMS is add scaling support to the app... It's a bit small for my usage most of the time.
I've started using the extensions for VS Code a lot since they killed the separate code based SQL studio app. I also use a SQLite extension, though I wish the SQLite extension worked a bit more like the MS SQL extension does. Overall they're both nice.
Definitely different workflows for Devs vs DBAs though.. and you're right, DBAs don't really close SSMS, that said, I think the VS Code extension(s) are better for most dev usage.
debarshri3 days ago
What you are describing is access via a PAM. Via RDP is one way to accessing it.
mrbump2 days ago
Congrats, looks fantastic! I have been looking for something like that. Maybe I have missed it, but one feature I would really love is support for temporary connections - e.g. being able to do something like "sqlit --db-type sqlite --file-path db.sqlite3" to quickly inspect a DB without having to set up a connection first.
MaxTeabagop2 days ago
That's a great suggestion, thanks! I'll be updating the CLI in the next release.
waterTanuki3 days ago
Tried it out on a local test postgres db.
First error: "Connection failed, no module named 'psycopg2'"
lgas2 days ago
You need to install psycopg2, or perhaps more likely psycopg2-binary to access postgres databases. After hiichbindermax and mrbump helped me out upthread, I was able to get it working via:
uvx --from sqlit-tui --with psycopg2-binary sqlit
If you're not using uv, then you'll need to install psycopg2-binary in whatever environment you're using (probably via `pip install psycopg2-binary`).slimebot804 days ago
This looks lovely.... does it support remote D1?
MaxTeabagop2 days ago
It will be added in the next release :)
ruicraveiro2 days ago
There's only one thing I can say about this: THANK YOU!!!!! Really cool!
MaxTeabagop2 days ago
Thanks! I'm glad you liked it.
oulipo23 days ago
What would be the main differences with Harlequin?
NSPG9112 days ago
I asked the same thing on Discord where he also showcased it. He answered the question with this.
> I wanted to make something that makes intuitive sense to me, and I wanted to make a sql version of what lazygit does, namely you can just jump in and there's no need for external documentation. To navigate the harlequin with keyboard only you have to learn the keybindings. Also I though it was quite hard to connect to databases via the cli and install adapters (again, documentation necessary). I wanted to have a tool that you can just run and its intuitive. There's definitely more features in harlequin and I went with more lightweight, though sqlit has SSH tunnels, which harlequin lacks.
When I linked lazysql[0], he replied with this
> That was my original inspiration. Same problem with harlequin, I didn't feel like it was intutive and to follow the "lazy" mindset of lazydocker and lazygit, it should just be easy and not require looking up keybindings. Lazysql ended up with too many features for my taste to the point it was difficult to use
jbstack2 days ago
I've recently been trying to find a good SQL TUI client, and one of the ones I tried was Harlequin. The main disadvantage, which every other SQL TUI I tried also suffers from, is that they don't comprehensively show every type of database object in the browser pane (e.g. tables, views, indexes, procedures). For example Harlequin only shows tables. This means that when you want to view one of the missing ones, you have to run a query. This means that you have to already know that the object you are looking for exists: there's no way to get a good overview of what you have in the database just by glancing at the browser. For me this sort of defeats the point of having a TUI in the first place.
It seems like the OP's offering has the same problem, although it does offer more objects than Harlequin. I'll be bookmarking it to see how it develops.
MaxTeabagop2 days ago
Appreciate that take!
I'm looking into indexes/triggers/sequences. That will be added in a near-future release, I hope you can benefit from it once I release it :)
jbstacka day ago
Great. If you added those this would probably become my go-to SQL client.
le-mark3 days ago
What tool is used to make the gifs of the ui?
ursula_gren3 days ago
I know that licecap(https://www.cockos.com/licecap/) can be used to accomplish that.
Not sure if this is what is being used here though.
talideon2 days ago
asciinema should do the job. It has GIF generation support via its 'agg' tool: https://docs.asciinema.org/manual/agg/
alsetmusic4 days ago
Very attractive design.
onemoresoop3 days ago
Looks fantastic.
bpiroman3 days ago
dude, this looks so cool!!!
[deleted]4 days agocollapsed