Show HN: Sqlit – A lazygit-style TUI for SQL databases

Posted by MaxTeabag 1 day ago

Counter137Comment21OpenOriginal

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.

https://github.com/Maxteabag/sqlit

Comments

Comment by tanin 6 hours 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

Comment by caminanteblanco 9 hours 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

Comment by lgas 7 hours 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(...)?

Comment by hiichbindermax 6 hours ago

That's not the same package. You should try sqlit-tui

Comment by mrbump 20 minutes ago

Yes, for uvx you need to do "uvx --from sqlit-tui sqlit"

Comment by debarshri 11 hours 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.

Comment by baq 10 hours 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.

Comment by debarshri 9 hours ago

What you are describing is access via a PAM. Via RDP is one way to accessing it.

Comment by yoavm 11 hours ago

Looks great, congrats! Also check out https://github.com/achristmascarl/rainfrog which seems to have similar goals, though is Postgres only.

Comment by kej 9 hours ago

It looks like rainfrog has branched out from just postgres, but still doesn't cover the range that sqlit does.

Comment by no_news_is 1 day 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.

Comment by zahlman 10 hours 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.

Comment by slimebot80 1 day ago

This looks lovely.... does it support remote D1?

Comment by waterTanuki 2 hours ago

Tried it out on a local test postgres db.

First error: "Connection failed, no module named 'psycopg2'"

Comment by le-mark 9 hours ago

What tool is used to make the gifs of the ui?

Comment by ursula_gren 5 hours 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.

Comment by onemoresoop 8 hours ago

Looks fantastic.

Comment by alsetmusic 1 day ago

Very attractive design.

Comment by oulipo2 8 hours ago

What would be the main differences with Harlequin?

Comment by NSPG911 7 minutes 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

[0]: https://github.com/jorgerojas26/lazysql

Comment by bpiroman 6 hours ago

dude, this looks so cool!!!

Comment by 1 day ago