Skip to content

Repository files navigation

ShellQL

ShellQL is a database manager TUI for developers.

It is Vim- and tmux-inspired, built for ergonomic SQL workflows and database management from the terminal. If you know Vim and SQL, you will feel right at home.


Beta status

ShellQL is currently in beta.

It is already usable for daily development workflows, but features and keybindings are still evolving. Expect frequent updates, UX refinements, and expansion of database support.


What ShellQL is

ShellQL is a keyboard-first terminal app for working with databases without leaving your shell.

It focuses on:

  • fast navigation
  • modal editing
  • composable layouts (tabs + panes + views)
  • practical data operations (filter, sort, edit, delete, insert, query)

ShellQL is intentionally not beginner-first. The payoff for learning the keybindings is high: once the workflow clicks, you can move very quickly.


Philosophy: tabs, panes, and views

ShellQL is designed like a dashboard you build yourself:

  • Tabs: separate work contexts (e.g. staging vs prod, or schema work vs query work)
  • Panes: split your current tab into focused working areas
  • Views: choose what each pane does (tables, table, schema, editor, results)

A common setup:

  • left pane: table list
  • top-right pane: table view
  • bottom-right pane: SQL editor/results

This makes it easy to inspect data, write SQL, and validate outcomes side-by-side.


Core capabilities

  • Connection management in TUI and CLI
  • Supported engines: Postgres, MySQL, SQLite
  • Vim-like SQL editor (normal/insert/visual, operators, motions, yank/paste)
  • Context-aware autocomplete (commands + editor SQL/table completion)
  • Table view workflows: browse, filter, sort, edit, delete, staged inserts
  • Schema exploration per table
  • Query execution + multi-result view
  • Multi-tab, multi-pane workspace

Installation

Homebrew (custom tap)

brew tap amaduswaray/tap
brew install shellql

Homebrew setup details: docs/homebrew.md

Cargo

cargo install shellql

Build from source

git clone https://github.com/amaduswaray/ShellQL.git
cd shellql
cargo build --release
./target/release/shql

Quick start

Launch TUI:

shql

CLI examples:

# Add a saved connection
shql db add --name dev --engine postgres --url 'postgres://user:pass@localhost:5432/mydb'# List saved connections
shql db list
# Delete a saved connection
shql db delete --name dev
# Interactive connect flow
shql connect --interactive

Demos

Recorded terminal demos from docs/demos/.

1) ShellQL overview

ShellQL overview demo

2) Add connection flow

Add connection demo

3) Pane workflows (split + navigate)

Panes demo

4) Tab workflows

Tabs demo

5) Column search

Column search demo

6) Filter rows with :where

Where sort demo

7) Sort rows with :order

Order by demo

8) Column projection with :select

Select projection demo

9) Query editor: multiple SELECTs

Multiple selects demo

10) Cmdline SQL execution (:!)

Cmdline SQL demo


Keybindings (quick guide)

Home

  • j / k or ↓ / ↑ — move
  • Enter — connect
  • a — add connection
  • d — delete connection (with confirm)
  • : — open command line
  • ? — help
  • q — quit

Dashboard

  • h j k l or arrows — navigate
  • Ctrl+h/j/k/l — move pane focus
  • : — command line
  • / and ? — search forward/backward
  • n / N — next/prev match
  • i — edit cell (TableView) / insert mode (Editor)
  • v / V / Ctrl+v — visual selections
  • dd — stage row delete (TableView)
  • o / O — stage insert row below/above
  • u — undo staged change
  • :w — commit staged changes
  • Tab / Shift+Tab — next/previous result set (Results view)

Query editor (Vim-inspired)

  • Normal/Insert/Visual behavior
  • Motions, operators, text objects, yank/delete/change
  • Examples: dd, dw, dG, dgg, yy, yG, ygg, p, P
  • SQL and table-name autocomplete while typing

Cmdline commands (quick reference)

General navigation/layout:

  • :new tab
  • :new pane [tables|table|schema|editor|results]
  • :split, :vsplit, :hsplit
  • :tab <id|next|prev|close>
  • :q, :close, :full

View switching:

  • :tables
  • :table <name>
  • :schema [table]
  • :editor
  • :results

Data actions (TableView only):

  • :where <expr>
  • :order [by] <col> [asc|desc]
  • :select <cols>
  • :insert [above|below]
  • :reset
  • :w

Other:

  • :! <sql>
  • :connect
  • :disconnect
  • :back, :forward
  • :resize <direction> <amount>
  • :noh

Full docs: see docs/documentation.md


Use cases

  • Quickly inspect rows in a production-like environment from SSH sessions
  • Triaging data issues while coding (no context switch to heavy GUI tools)
  • Running one-off SQL updates with immediate side-by-side validation
  • Keyboard-only data workflows for Vim/tmux users

Inspiration

ShellQL draws inspiration from terminal-native tools and SQL TUIs, including:

  • sqlit
  • lazydb / lazysql style workflows
  • the broader Vim + tmux ecosystem

Respect to the maintainers and communities behind these projects.


Documentation

For a more complete guide (views, workflows, keybindings, commands), see:


Versioning & releases

ShellQL release tags follow GitHub-recommended v prefixes.

Current beta track:

  • v0.1.x-beta
  • Increase x for each new beta release (v0.1.0-beta, v0.1.1-beta, v0.1.2-beta, ...)

Version sync rule:

  • Cargo.toml version should match the tag without the v prefix.
    • Example: tag v0.1.2-betaversion = "0.1.2-beta"

Release flow:

  • Merges/pushes to main automatically create a new beta release.
    • The workflow bumps 0.1.x-beta0.1.(x+1)-beta
    • Commits Cargo.toml + Cargo.lock
    • Creates and pushes tag v0.1.(x+1)-beta
    • Builds binaries and publishes a GitHub pre-release

Manual options are still available:

# trigger release by pushing a tag yourself
git tag -a v0.1.2-beta -m "Release v0.1.2-beta"
git push origin v0.1.2-beta

Or use Actions → Release → Run workflow and pass a tag.

Tags containing -beta are automatically marked as pre-releases.


Contributing

Contributions are welcome.


License

MIT

About

Database manager TUI

Topics

Resources

Contributing

Stars

31 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - amaduswaray/shellql: Database manager TUI · GitHub
Skip to content

Repository files navigation

ShellQL

ShellQL is a database manager TUI for developers.

It is Vim- and tmux-inspired, built for ergonomic SQL workflows and database management from the terminal. If you know Vim and SQL, you will feel right at home.


Beta status

ShellQL is currently in beta.

It is already usable for daily development workflows, but features and keybindings are still evolving. Expect frequent updates, UX refinements, and expansion of database support.


What ShellQL is

ShellQL is a keyboard-first terminal app for working with databases without leaving your shell.

It focuses on:

  • fast navigation
  • modal editing
  • composable layouts (tabs + panes + views)
  • practical data operations (filter, sort, edit, delete, insert, query)

ShellQL is intentionally not beginner-first. The payoff for learning the keybindings is high: once the workflow clicks, you can move very quickly.


Philosophy: tabs, panes, and views

ShellQL is designed like a dashboard you build yourself:

  • Tabs: separate work contexts (e.g. staging vs prod, or schema work vs query work)
  • Panes: split your current tab into focused working areas
  • Views: choose what each pane does (tables, table, schema, editor, results)

A common setup:

  • left pane: table list
  • top-right pane: table view
  • bottom-right pane: SQL editor/results

This makes it easy to inspect data, write SQL, and validate outcomes side-by-side.


Core capabilities

  • Connection management in TUI and CLI
  • Supported engines: Postgres, MySQL, SQLite
  • Vim-like SQL editor (normal/insert/visual, operators, motions, yank/paste)
  • Context-aware autocomplete (commands + editor SQL/table completion)
  • Table view workflows: browse, filter, sort, edit, delete, staged inserts
  • Schema exploration per table
  • Query execution + multi-result view
  • Multi-tab, multi-pane workspace

Installation

Homebrew (custom tap)

brew tap amaduswaray/tap
brew install shellql

Homebrew setup details: docs/homebrew.md

Cargo

cargo install shellql

Build from source

git clone https://github.com/amaduswaray/ShellQL.git
cd shellql
cargo build --release
./target/release/shql

Quick start

Launch TUI:

shql

CLI examples:

# Add a saved connection
shql db add --name dev --engine postgres --url 'postgres://user:pass@localhost:5432/mydb'# List saved connections
shql db list
# Delete a saved connection
shql db delete --name dev
# Interactive connect flow
shql connect --interactive

Demos

Recorded terminal demos from docs/demos/.

1) ShellQL overview

ShellQL overview demo

2) Add connection flow

Add connection demo

3) Pane workflows (split + navigate)

Panes demo

4) Tab workflows

Tabs demo

5) Column search

Column search demo

6) Filter rows with :where

Where sort demo

7) Sort rows with :order

Order by demo

8) Column projection with :select

Select projection demo

9) Query editor: multiple SELECTs

Multiple selects demo

10) Cmdline SQL execution (:!)

Cmdline SQL demo


Keybindings (quick guide)

Home

  • j / k or ↓ / ↑ — move
  • Enter — connect
  • a — add connection
  • d — delete connection (with confirm)
  • : — open command line
  • ? — help
  • q — quit

Dashboard

  • h j k l or arrows — navigate
  • Ctrl+h/j/k/l — move pane focus
  • : — command line
  • / and ? — search forward/backward
  • n / N — next/prev match
  • i — edit cell (TableView) / insert mode (Editor)
  • v / V / Ctrl+v — visual selections
  • dd — stage row delete (TableView)
  • o / O — stage insert row below/above
  • u — undo staged change
  • :w — commit staged changes
  • Tab / Shift+Tab — next/previous result set (Results view)

Query editor (Vim-inspired)

  • Normal/Insert/Visual behavior
  • Motions, operators, text objects, yank/delete/change
  • Examples: dd, dw, dG, dgg, yy, yG, ygg, p, P
  • SQL and table-name autocomplete while typing

Cmdline commands (quick reference)

General navigation/layout:

  • :new tab
  • :new pane [tables|table|schema|editor|results]
  • :split, :vsplit, :hsplit
  • :tab <id|next|prev|close>
  • :q, :close, :full

View switching:

  • :tables
  • :table <name>
  • :schema [table]
  • :editor
  • :results

Data actions (TableView only):

  • :where <expr>
  • :order [by] <col> [asc|desc]
  • :select <cols>
  • :insert [above|below]
  • :reset
  • :w

Other:

  • :! <sql>
  • :connect
  • :disconnect
  • :back, :forward
  • :resize <direction> <amount>
  • :noh

Full docs: see docs/documentation.md


Use cases

  • Quickly inspect rows in a production-like environment from SSH sessions
  • Triaging data issues while coding (no context switch to heavy GUI tools)
  • Running one-off SQL updates with immediate side-by-side validation
  • Keyboard-only data workflows for Vim/tmux users

Inspiration

ShellQL draws inspiration from terminal-native tools and SQL TUIs, including:

  • sqlit
  • lazydb / lazysql style workflows
  • the broader Vim + tmux ecosystem

Respect to the maintainers and communities behind these projects.


Documentation

For a more complete guide (views, workflows, keybindings, commands), see:


Versioning & releases

ShellQL release tags follow GitHub-recommended v prefixes.

Current beta track:

  • v0.1.x-beta
  • Increase x for each new beta release (v0.1.0-beta, v0.1.1-beta, v0.1.2-beta, ...)

Version sync rule:

  • Cargo.toml version should match the tag without the v prefix.
    • Example: tag v0.1.2-betaversion = "0.1.2-beta"

Release flow:

  • Merges/pushes to main automatically create a new beta release.
    • The workflow bumps 0.1.x-beta0.1.(x+1)-beta
    • Commits Cargo.toml + Cargo.lock
    • Creates and pushes tag v0.1.(x+1)-beta
    • Builds binaries and publishes a GitHub pre-release

Manual options are still available:

# trigger release by pushing a tag yourself
git tag -a v0.1.2-beta -m "Release v0.1.2-beta"
git push origin v0.1.2-beta

Or use Actions → Release → Run workflow and pass a tag.

Tags containing -beta are automatically marked as pre-releases.


Contributing

Contributions are welcome.


License

MIT

About

Database manager TUI

Topics

Resources

Contributing

Stars

31 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - amaduswaray/shellql: Database manager TUI · GitHub
Skip to content

Repository files navigation

ShellQL

ShellQL is a database manager TUI for developers.

It is Vim- and tmux-inspired, built for ergonomic SQL workflows and database management from the terminal. If you know Vim and SQL, you will feel right at home.


Beta status

ShellQL is currently in beta.

It is already usable for daily development workflows, but features and keybindings are still evolving. Expect frequent updates, UX refinements, and expansion of database support.


What ShellQL is

ShellQL is a keyboard-first terminal app for working with databases without leaving your shell.

It focuses on:

  • fast navigation
  • modal editing
  • composable layouts (tabs + panes + views)
  • practical data operations (filter, sort, edit, delete, insert, query)

ShellQL is intentionally not beginner-first. The payoff for learning the keybindings is high: once the workflow clicks, you can move very quickly.


Philosophy: tabs, panes, and views

ShellQL is designed like a dashboard you build yourself:

  • Tabs: separate work contexts (e.g. staging vs prod, or schema work vs query work)
  • Panes: split your current tab into focused working areas
  • Views: choose what each pane does (tables, table, schema, editor, results)

A common setup:

  • left pane: table list
  • top-right pane: table view
  • bottom-right pane: SQL editor/results

This makes it easy to inspect data, write SQL, and validate outcomes side-by-side.


Core capabilities

  • Connection management in TUI and CLI
  • Supported engines: Postgres, MySQL, SQLite
  • Vim-like SQL editor (normal/insert/visual, operators, motions, yank/paste)
  • Context-aware autocomplete (commands + editor SQL/table completion)
  • Table view workflows: browse, filter, sort, edit, delete, staged inserts
  • Schema exploration per table
  • Query execution + multi-result view
  • Multi-tab, multi-pane workspace

Installation

Homebrew (custom tap)

brew tap amaduswaray/tap
brew install shellql

Homebrew setup details: docs/homebrew.md

Cargo

cargo install shellql

Build from source

git clone https://github.com/amaduswaray/ShellQL.git
cd shellql
cargo build --release
./target/release/shql

Quick start

Launch TUI:

shql

CLI examples:

# Add a saved connection
shql db add --name dev --engine postgres --url 'postgres://user:pass@localhost:5432/mydb'# List saved connections
shql db list
# Delete a saved connection
shql db delete --name dev
# Interactive connect flow
shql connect --interactive

Demos

Recorded terminal demos from docs/demos/.

1) ShellQL overview

ShellQL overview demo

2) Add connection flow

Add connection demo

3) Pane workflows (split + navigate)

Panes demo

4) Tab workflows

Tabs demo

5) Column search

Column search demo

6) Filter rows with :where

Where sort demo

7) Sort rows with :order

Order by demo

8) Column projection with :select

Select projection demo

9) Query editor: multiple SELECTs

Multiple selects demo

10) Cmdline SQL execution (:!)

Cmdline SQL demo


Keybindings (quick guide)

Home

  • j / k or ↓ / ↑ — move
  • Enter — connect
  • a — add connection
  • d — delete connection (with confirm)
  • : — open command line
  • ? — help
  • q — quit

Dashboard

  • h j k l or arrows — navigate
  • Ctrl+h/j/k/l — move pane focus
  • : — command line
  • / and ? — search forward/backward
  • n / N — next/prev match
  • i — edit cell (TableView) / insert mode (Editor)
  • v / V / Ctrl+v — visual selections
  • dd — stage row delete (TableView)
  • o / O — stage insert row below/above
  • u — undo staged change
  • :w — commit staged changes
  • Tab / Shift+Tab — next/previous result set (Results view)

Query editor (Vim-inspired)

  • Normal/Insert/Visual behavior
  • Motions, operators, text objects, yank/delete/change
  • Examples: dd, dw, dG, dgg, yy, yG, ygg, p, P
  • SQL and table-name autocomplete while typing

Cmdline commands (quick reference)

General navigation/layout:

  • :new tab
  • :new pane [tables|table|schema|editor|results]
  • :split, :vsplit, :hsplit
  • :tab <id|next|prev|close>
  • :q, :close, :full

View switching:

  • :tables
  • :table <name>
  • :schema [table]
  • :editor
  • :results

Data actions (TableView only):

  • :where <expr>
  • :order [by] <col> [asc|desc]
  • :select <cols>
  • :insert [above|below]
  • :reset
  • :w

Other:

  • :! <sql>
  • :connect
  • :disconnect
  • :back, :forward
  • :resize <direction> <amount>
  • :noh

Full docs: see docs/documentation.md


Use cases

  • Quickly inspect rows in a production-like environment from SSH sessions
  • Triaging data issues while coding (no context switch to heavy GUI tools)
  • Running one-off SQL updates with immediate side-by-side validation
  • Keyboard-only data workflows for Vim/tmux users

Inspiration

ShellQL draws inspiration from terminal-native tools and SQL TUIs, including:

  • sqlit
  • lazydb / lazysql style workflows
  • the broader Vim + tmux ecosystem

Respect to the maintainers and communities behind these projects.


Documentation

For a more complete guide (views, workflows, keybindings, commands), see:


Versioning & releases

ShellQL release tags follow GitHub-recommended v prefixes.

Current beta track:

  • v0.1.x-beta
  • Increase x for each new beta release (v0.1.0-beta, v0.1.1-beta, v0.1.2-beta, ...)

Version sync rule:

  • Cargo.toml version should match the tag without the v prefix.
    • Example: tag v0.1.2-betaversion = "0.1.2-beta"

Release flow:

  • Merges/pushes to main automatically create a new beta release.
    • The workflow bumps 0.1.x-beta0.1.(x+1)-beta
    • Commits Cargo.toml + Cargo.lock
    • Creates and pushes tag v0.1.(x+1)-beta
    • Builds binaries and publishes a GitHub pre-release

Manual options are still available:

# trigger release by pushing a tag yourself
git tag -a v0.1.2-beta -m "Release v0.1.2-beta"
git push origin v0.1.2-beta

Or use Actions → Release → Run workflow and pass a tag.

Tags containing -beta are automatically marked as pre-releases.


Contributing

Contributions are welcome.


License

MIT

About

Database manager TUI

Topics

Resources

Contributing

Stars

31 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - amaduswaray/shellql: Database manager TUI · GitHub
Skip to content

Repository files navigation

ShellQL

ShellQL is a database manager TUI for developers.

It is Vim- and tmux-inspired, built for ergonomic SQL workflows and database management from the terminal. If you know Vim and SQL, you will feel right at home.


Beta status

ShellQL is currently in beta.

It is already usable for daily development workflows, but features and keybindings are still evolving. Expect frequent updates, UX refinements, and expansion of database support.


What ShellQL is

ShellQL is a keyboard-first terminal app for working with databases without leaving your shell.

It focuses on:

  • fast navigation
  • modal editing
  • composable layouts (tabs + panes + views)
  • practical data operations (filter, sort, edit, delete, insert, query)

ShellQL is intentionally not beginner-first. The payoff for learning the keybindings is high: once the workflow clicks, you can move very quickly.


Philosophy: tabs, panes, and views

ShellQL is designed like a dashboard you build yourself:

  • Tabs: separate work contexts (e.g. staging vs prod, or schema work vs query work)
  • Panes: split your current tab into focused working areas
  • Views: choose what each pane does (tables, table, schema, editor, results)

A common setup:

  • left pane: table list
  • top-right pane: table view
  • bottom-right pane: SQL editor/results

This makes it easy to inspect data, write SQL, and validate outcomes side-by-side.


Core capabilities

  • Connection management in TUI and CLI
  • Supported engines: Postgres, MySQL, SQLite
  • Vim-like SQL editor (normal/insert/visual, operators, motions, yank/paste)
  • Context-aware autocomplete (commands + editor SQL/table completion)
  • Table view workflows: browse, filter, sort, edit, delete, staged inserts
  • Schema exploration per table
  • Query execution + multi-result view
  • Multi-tab, multi-pane workspace

Installation

Homebrew (custom tap)

brew tap amaduswaray/tap
brew install shellql

Homebrew setup details: docs/homebrew.md

Cargo

cargo install shellql

Build from source

git clone https://github.com/amaduswaray/ShellQL.git
cd shellql
cargo build --release
./target/release/shql

Quick start

Launch TUI:

shql

CLI examples:

# Add a saved connection
shql db add --name dev --engine postgres --url 'postgres://user:pass@localhost:5432/mydb'# List saved connections
shql db list
# Delete a saved connection
shql db delete --name dev
# Interactive connect flow
shql connect --interactive

Demos

Recorded terminal demos from docs/demos/.

1) ShellQL overview

ShellQL overview demo

2) Add connection flow

Add connection demo

3) Pane workflows (split + navigate)

Panes demo

4) Tab workflows

Tabs demo

5) Column search

Column search demo

6) Filter rows with :where

Where sort demo

7) Sort rows with :order

Order by demo

8) Column projection with :select

Select projection demo

9) Query editor: multiple SELECTs

Multiple selects demo

10) Cmdline SQL execution (:!)

Cmdline SQL demo


Keybindings (quick guide)

Home

  • j / k or ↓ / ↑ — move
  • Enter — connect
  • a — add connection
  • d — delete connection (with confirm)
  • : — open command line
  • ? — help
  • q — quit

Dashboard

  • h j k l or arrows — navigate
  • Ctrl+h/j/k/l — move pane focus
  • : — command line
  • / and ? — search forward/backward
  • n / N — next/prev match
  • i — edit cell (TableView) / insert mode (Editor)
  • v / V / Ctrl+v — visual selections
  • dd — stage row delete (TableView)
  • o / O — stage insert row below/above
  • u — undo staged change
  • :w — commit staged changes
  • Tab / Shift+Tab — next/previous result set (Results view)

Query editor (Vim-inspired)

  • Normal/Insert/Visual behavior
  • Motions, operators, text objects, yank/delete/change
  • Examples: dd, dw, dG, dgg, yy, yG, ygg, p, P
  • SQL and table-name autocomplete while typing

Cmdline commands (quick reference)

General navigation/layout:

  • :new tab
  • :new pane [tables|table|schema|editor|results]
  • :split, :vsplit, :hsplit
  • :tab <id|next|prev|close>
  • :q, :close, :full

View switching:

  • :tables
  • :table <name>
  • :schema [table]
  • :editor
  • :results

Data actions (TableView only):

  • :where <expr>
  • :order [by] <col> [asc|desc]
  • :select <cols>
  • :insert [above|below]
  • :reset
  • :w

Other:

  • :! <sql>
  • :connect
  • :disconnect
  • :back, :forward
  • :resize <direction> <amount>
  • :noh

Full docs: see docs/documentation.md


Use cases

  • Quickly inspect rows in a production-like environment from SSH sessions
  • Triaging data issues while coding (no context switch to heavy GUI tools)
  • Running one-off SQL updates with immediate side-by-side validation
  • Keyboard-only data workflows for Vim/tmux users

Inspiration

ShellQL draws inspiration from terminal-native tools and SQL TUIs, including:

  • sqlit
  • lazydb / lazysql style workflows
  • the broader Vim + tmux ecosystem

Respect to the maintainers and communities behind these projects.


Documentation

For a more complete guide (views, workflows, keybindings, commands), see:


Versioning & releases

ShellQL release tags follow GitHub-recommended v prefixes.

Current beta track:

  • v0.1.x-beta
  • Increase x for each new beta release (v0.1.0-beta, v0.1.1-beta, v0.1.2-beta, ...)

Version sync rule:

  • Cargo.toml version should match the tag without the v prefix.
    • Example: tag v0.1.2-betaversion = "0.1.2-beta"

Release flow:

  • Merges/pushes to main automatically create a new beta release.
    • The workflow bumps 0.1.x-beta0.1.(x+1)-beta
    • Commits Cargo.toml + Cargo.lock
    • Creates and pushes tag v0.1.(x+1)-beta
    • Builds binaries and publishes a GitHub pre-release

Manual options are still available:

# trigger release by pushing a tag yourself
git tag -a v0.1.2-beta -m "Release v0.1.2-beta"
git push origin v0.1.2-beta

Or use Actions → Release → Run workflow and pass a tag.

Tags containing -beta are automatically marked as pre-releases.


Contributing

Contributions are welcome.


License

MIT

About

Database manager TUI

Topics

Resources

Contributing

Stars

31 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - amaduswaray/shellql: Database manager TUI · GitHub
Skip to content

Repository files navigation

ShellQL

ShellQL is a database manager TUI for developers.

It is Vim- and tmux-inspired, built for ergonomic SQL workflows and database management from the terminal. If you know Vim and SQL, you will feel right at home.


Beta status

ShellQL is currently in beta.

It is already usable for daily development workflows, but features and keybindings are still evolving. Expect frequent updates, UX refinements, and expansion of database support.


What ShellQL is

ShellQL is a keyboard-first terminal app for working with databases without leaving your shell.

It focuses on:

  • fast navigation
  • modal editing
  • composable layouts (tabs + panes + views)
  • practical data operations (filter, sort, edit, delete, insert, query)

ShellQL is intentionally not beginner-first. The payoff for learning the keybindings is high: once the workflow clicks, you can move very quickly.


Philosophy: tabs, panes, and views

ShellQL is designed like a dashboard you build yourself:

  • Tabs: separate work contexts (e.g. staging vs prod, or schema work vs query work)
  • Panes: split your current tab into focused working areas
  • Views: choose what each pane does (tables, table, schema, editor, results)

A common setup:

  • left pane: table list
  • top-right pane: table view
  • bottom-right pane: SQL editor/results

This makes it easy to inspect data, write SQL, and validate outcomes side-by-side.


Core capabilities

  • Connection management in TUI and CLI
  • Supported engines: Postgres, MySQL, SQLite
  • Vim-like SQL editor (normal/insert/visual, operators, motions, yank/paste)
  • Context-aware autocomplete (commands + editor SQL/table completion)
  • Table view workflows: browse, filter, sort, edit, delete, staged inserts
  • Schema exploration per table
  • Query execution + multi-result view
  • Multi-tab, multi-pane workspace

Installation

Homebrew (custom tap)

brew tap amaduswaray/tap
brew install shellql

Homebrew setup details: docs/homebrew.md

Cargo

cargo install shellql

Build from source

git clone https://github.com/amaduswaray/ShellQL.git
cd shellql
cargo build --release
./target/release/shql

Quick start

Launch TUI:

shql

CLI examples:

# Add a saved connection
shql db add --name dev --engine postgres --url 'postgres://user:pass@localhost:5432/mydb'# List saved connections
shql db list
# Delete a saved connection
shql db delete --name dev
# Interactive connect flow
shql connect --interactive

Demos

Recorded terminal demos from docs/demos/.

1) ShellQL overview

ShellQL overview demo

2) Add connection flow

Add connection demo

3) Pane workflows (split + navigate)

Panes demo

4) Tab workflows

Tabs demo

5) Column search

Column search demo

6) Filter rows with :where

Where sort demo

7) Sort rows with :order

Order by demo

8) Column projection with :select

Select projection demo

9) Query editor: multiple SELECTs

Multiple selects demo

10) Cmdline SQL execution (:!)

Cmdline SQL demo


Keybindings (quick guide)

Home

  • j / k or ↓ / ↑ — move
  • Enter — connect
  • a — add connection
  • d — delete connection (with confirm)
  • : — open command line
  • ? — help
  • q — quit

Dashboard

  • h j k l or arrows — navigate
  • Ctrl+h/j/k/l — move pane focus
  • : — command line
  • / and ? — search forward/backward
  • n / N — next/prev match
  • i — edit cell (TableView) / insert mode (Editor)
  • v / V / Ctrl+v — visual selections
  • dd — stage row delete (TableView)
  • o / O — stage insert row below/above
  • u — undo staged change
  • :w — commit staged changes
  • Tab / Shift+Tab — next/previous result set (Results view)

Query editor (Vim-inspired)

  • Normal/Insert/Visual behavior
  • Motions, operators, text objects, yank/delete/change
  • Examples: dd, dw, dG, dgg, yy, yG, ygg, p, P
  • SQL and table-name autocomplete while typing

Cmdline commands (quick reference)

General navigation/layout:

  • :new tab
  • :new pane [tables|table|schema|editor|results]
  • :split, :vsplit, :hsplit
  • :tab <id|next|prev|close>
  • :q, :close, :full

View switching:

  • :tables
  • :table <name>
  • :schema [table]
  • :editor
  • :results

Data actions (TableView only):

  • :where <expr>
  • :order [by] <col> [asc|desc]
  • :select <cols>
  • :insert [above|below]
  • :reset
  • :w

Other:

  • :! <sql>
  • :connect
  • :disconnect
  • :back, :forward
  • :resize <direction> <amount>
  • :noh

Full docs: see docs/documentation.md


Use cases

  • Quickly inspect rows in a production-like environment from SSH sessions
  • Triaging data issues while coding (no context switch to heavy GUI tools)
  • Running one-off SQL updates with immediate side-by-side validation
  • Keyboard-only data workflows for Vim/tmux users

Inspiration

ShellQL draws inspiration from terminal-native tools and SQL TUIs, including:

  • sqlit
  • lazydb / lazysql style workflows
  • the broader Vim + tmux ecosystem

Respect to the maintainers and communities behind these projects.


Documentation

For a more complete guide (views, workflows, keybindings, commands), see:


Versioning & releases

ShellQL release tags follow GitHub-recommended v prefixes.

Current beta track:

  • v0.1.x-beta
  • Increase x for each new beta release (v0.1.0-beta, v0.1.1-beta, v0.1.2-beta, ...)

Version sync rule:

  • Cargo.toml version should match the tag without the v prefix.
    • Example: tag v0.1.2-betaversion = "0.1.2-beta"

Release flow:

  • Merges/pushes to main automatically create a new beta release.
    • The workflow bumps 0.1.x-beta0.1.(x+1)-beta
    • Commits Cargo.toml + Cargo.lock
    • Creates and pushes tag v0.1.(x+1)-beta
    • Builds binaries and publishes a GitHub pre-release

Manual options are still available:

# trigger release by pushing a tag yourself
git tag -a v0.1.2-beta -m "Release v0.1.2-beta"
git push origin v0.1.2-beta

Or use Actions → Release → Run workflow and pass a tag.

Tags containing -beta are automatically marked as pre-releases.


Contributing

Contributions are welcome.


License

MIT

About

Database manager TUI

Topics

Resources

Contributing

Stars

31 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - amaduswaray/shellql: Database manager TUI · GitHub
Skip to content

Repository files navigation

ShellQL

ShellQL is a database manager TUI for developers.

It is Vim- and tmux-inspired, built for ergonomic SQL workflows and database management from the terminal. If you know Vim and SQL, you will feel right at home.


Beta status

ShellQL is currently in beta.

It is already usable for daily development workflows, but features and keybindings are still evolving. Expect frequent updates, UX refinements, and expansion of database support.


What ShellQL is

ShellQL is a keyboard-first terminal app for working with databases without leaving your shell.

It focuses on:

  • fast navigation
  • modal editing
  • composable layouts (tabs + panes + views)
  • practical data operations (filter, sort, edit, delete, insert, query)

ShellQL is intentionally not beginner-first. The payoff for learning the keybindings is high: once the workflow clicks, you can move very quickly.


Philosophy: tabs, panes, and views

ShellQL is designed like a dashboard you build yourself:

  • Tabs: separate work contexts (e.g. staging vs prod, or schema work vs query work)
  • Panes: split your current tab into focused working areas
  • Views: choose what each pane does (tables, table, schema, editor, results)

A common setup:

  • left pane: table list
  • top-right pane: table view
  • bottom-right pane: SQL editor/results

This makes it easy to inspect data, write SQL, and validate outcomes side-by-side.


Core capabilities

  • Connection management in TUI and CLI
  • Supported engines: Postgres, MySQL, SQLite
  • Vim-like SQL editor (normal/insert/visual, operators, motions, yank/paste)
  • Context-aware autocomplete (commands + editor SQL/table completion)
  • Table view workflows: browse, filter, sort, edit, delete, staged inserts
  • Schema exploration per table
  • Query execution + multi-result view
  • Multi-tab, multi-pane workspace

Installation

Homebrew (custom tap)

brew tap amaduswaray/tap
brew install shellql

Homebrew setup details: docs/homebrew.md

Cargo

cargo install shellql

Build from source

git clone https://github.com/amaduswaray/ShellQL.git
cd shellql
cargo build --release
./target/release/shql

Quick start

Launch TUI:

shql

CLI examples:

# Add a saved connection
shql db add --name dev --engine postgres --url 'postgres://user:pass@localhost:5432/mydb'# List saved connections
shql db list
# Delete a saved connection
shql db delete --name dev
# Interactive connect flow
shql connect --interactive

Demos

Recorded terminal demos from docs/demos/.

1) ShellQL overview

ShellQL overview demo

2) Add connection flow

Add connection demo

3) Pane workflows (split + navigate)

Panes demo

4) Tab workflows

Tabs demo

5) Column search

Column search demo

6) Filter rows with :where

Where sort demo

7) Sort rows with :order

Order by demo

8) Column projection with :select

Select projection demo

9) Query editor: multiple SELECTs

Multiple selects demo

10) Cmdline SQL execution (:!)

Cmdline SQL demo


Keybindings (quick guide)

Home

  • j / k or ↓ / ↑ — move
  • Enter — connect
  • a — add connection
  • d — delete connection (with confirm)
  • : — open command line
  • ? — help
  • q — quit

Dashboard

  • h j k l or arrows — navigate
  • Ctrl+h/j/k/l — move pane focus
  • : — command line
  • / and ? — search forward/backward
  • n / N — next/prev match
  • i — edit cell (TableView) / insert mode (Editor)
  • v / V / Ctrl+v — visual selections
  • dd — stage row delete (TableView)
  • o / O — stage insert row below/above
  • u — undo staged change
  • :w — commit staged changes
  • Tab / Shift+Tab — next/previous result set (Results view)

Query editor (Vim-inspired)

  • Normal/Insert/Visual behavior
  • Motions, operators, text objects, yank/delete/change
  • Examples: dd, dw, dG, dgg, yy, yG, ygg, p, P
  • SQL and table-name autocomplete while typing

Cmdline commands (quick reference)

General navigation/layout:

  • :new tab
  • :new pane [tables|table|schema|editor|results]
  • :split, :vsplit, :hsplit
  • :tab <id|next|prev|close>
  • :q, :close, :full

View switching:

  • :tables
  • :table <name>
  • :schema [table]
  • :editor
  • :results

Data actions (TableView only):

  • :where <expr>
  • :order [by] <col> [asc|desc]
  • :select <cols>
  • :insert [above|below]
  • :reset
  • :w

Other:

  • :! <sql>
  • :connect
  • :disconnect
  • :back, :forward
  • :resize <direction> <amount>
  • :noh

Full docs: see docs/documentation.md


Use cases

  • Quickly inspect rows in a production-like environment from SSH sessions
  • Triaging data issues while coding (no context switch to heavy GUI tools)
  • Running one-off SQL updates with immediate side-by-side validation
  • Keyboard-only data workflows for Vim/tmux users

Inspiration

ShellQL draws inspiration from terminal-native tools and SQL TUIs, including:

  • sqlit
  • lazydb / lazysql style workflows
  • the broader Vim + tmux ecosystem

Respect to the maintainers and communities behind these projects.


Documentation

For a more complete guide (views, workflows, keybindings, commands), see:


Versioning & releases

ShellQL release tags follow GitHub-recommended v prefixes.

Current beta track:

  • v0.1.x-beta
  • Increase x for each new beta release (v0.1.0-beta, v0.1.1-beta, v0.1.2-beta, ...)

Version sync rule:

  • Cargo.toml version should match the tag without the v prefix.
    • Example: tag v0.1.2-betaversion = "0.1.2-beta"

Release flow:

  • Merges/pushes to main automatically create a new beta release.
    • The workflow bumps 0.1.x-beta0.1.(x+1)-beta
    • Commits Cargo.toml + Cargo.lock
    • Creates and pushes tag v0.1.(x+1)-beta
    • Builds binaries and publishes a GitHub pre-release

Manual options are still available:

# trigger release by pushing a tag yourself
git tag -a v0.1.2-beta -m "Release v0.1.2-beta"
git push origin v0.1.2-beta

Or use Actions → Release → Run workflow and pass a tag.

Tags containing -beta are automatically marked as pre-releases.


Contributing

Contributions are welcome.


License

MIT

About

Database manager TUI

Topics

Resources

Contributing

Stars

31 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - amaduswaray/shellql: Database manager TUI · GitHub
Skip to content

Repository files navigation

ShellQL

ShellQL is a database manager TUI for developers.

It is Vim- and tmux-inspired, built for ergonomic SQL workflows and database management from the terminal. If you know Vim and SQL, you will feel right at home.


Beta status

ShellQL is currently in beta.

It is already usable for daily development workflows, but features and keybindings are still evolving. Expect frequent updates, UX refinements, and expansion of database support.


What ShellQL is

ShellQL is a keyboard-first terminal app for working with databases without leaving your shell.

It focuses on:

  • fast navigation
  • modal editing
  • composable layouts (tabs + panes + views)
  • practical data operations (filter, sort, edit, delete, insert, query)

ShellQL is intentionally not beginner-first. The payoff for learning the keybindings is high: once the workflow clicks, you can move very quickly.


Philosophy: tabs, panes, and views

ShellQL is designed like a dashboard you build yourself:

  • Tabs: separate work contexts (e.g. staging vs prod, or schema work vs query work)
  • Panes: split your current tab into focused working areas
  • Views: choose what each pane does (tables, table, schema, editor, results)

A common setup:

  • left pane: table list
  • top-right pane: table view
  • bottom-right pane: SQL editor/results

This makes it easy to inspect data, write SQL, and validate outcomes side-by-side.


Core capabilities

  • Connection management in TUI and CLI
  • Supported engines: Postgres, MySQL, SQLite
  • Vim-like SQL editor (normal/insert/visual, operators, motions, yank/paste)
  • Context-aware autocomplete (commands + editor SQL/table completion)
  • Table view workflows: browse, filter, sort, edit, delete, staged inserts
  • Schema exploration per table
  • Query execution + multi-result view
  • Multi-tab, multi-pane workspace

Installation

Homebrew (custom tap)

brew tap amaduswaray/tap
brew install shellql

Homebrew setup details: docs/homebrew.md

Cargo

cargo install shellql

Build from source

git clone https://github.com/amaduswaray/ShellQL.git
cd shellql
cargo build --release
./target/release/shql

Quick start

Launch TUI:

shql

CLI examples:

# Add a saved connection
shql db add --name dev --engine postgres --url 'postgres://user:pass@localhost:5432/mydb'# List saved connections
shql db list
# Delete a saved connection
shql db delete --name dev
# Interactive connect flow
shql connect --interactive

Demos

Recorded terminal demos from docs/demos/.

1) ShellQL overview

ShellQL overview demo

2) Add connection flow

Add connection demo

3) Pane workflows (split + navigate)

Panes demo

4) Tab workflows

Tabs demo

5) Column search

Column search demo

6) Filter rows with :where

Where sort demo

7) Sort rows with :order

Order by demo

8) Column projection with :select

Select projection demo

9) Query editor: multiple SELECTs

Multiple selects demo

10) Cmdline SQL execution (:!)

Cmdline SQL demo


Keybindings (quick guide)

Home

  • j / k or ↓ / ↑ — move
  • Enter — connect
  • a — add connection
  • d — delete connection (with confirm)
  • : — open command line
  • ? — help
  • q — quit

Dashboard

  • h j k l or arrows — navigate
  • Ctrl+h/j/k/l — move pane focus
  • : — command line
  • / and ? — search forward/backward
  • n / N — next/prev match
  • i — edit cell (TableView) / insert mode (Editor)
  • v / V / Ctrl+v — visual selections
  • dd — stage row delete (TableView)
  • o / O — stage insert row below/above
  • u — undo staged change
  • :w — commit staged changes
  • Tab / Shift+Tab — next/previous result set (Results view)

Query editor (Vim-inspired)

  • Normal/Insert/Visual behavior
  • Motions, operators, text objects, yank/delete/change
  • Examples: dd, dw, dG, dgg, yy, yG, ygg, p, P
  • SQL and table-name autocomplete while typing

Cmdline commands (quick reference)

General navigation/layout:

  • :new tab
  • :new pane [tables|table|schema|editor|results]
  • :split, :vsplit, :hsplit
  • :tab <id|next|prev|close>
  • :q, :close, :full

View switching:

  • :tables
  • :table <name>
  • :schema [table]
  • :editor
  • :results

Data actions (TableView only):

  • :where <expr>
  • :order [by] <col> [asc|desc]
  • :select <cols>
  • :insert [above|below]
  • :reset
  • :w

Other:

  • :! <sql>
  • :connect
  • :disconnect
  • :back, :forward
  • :resize <direction> <amount>
  • :noh

Full docs: see docs/documentation.md


Use cases

  • Quickly inspect rows in a production-like environment from SSH sessions
  • Triaging data issues while coding (no context switch to heavy GUI tools)
  • Running one-off SQL updates with immediate side-by-side validation
  • Keyboard-only data workflows for Vim/tmux users

Inspiration

ShellQL draws inspiration from terminal-native tools and SQL TUIs, including:

  • sqlit
  • lazydb / lazysql style workflows
  • the broader Vim + tmux ecosystem

Respect to the maintainers and communities behind these projects.


Documentation

For a more complete guide (views, workflows, keybindings, commands), see:


Versioning & releases

ShellQL release tags follow GitHub-recommended v prefixes.

Current beta track:

  • v0.1.x-beta
  • Increase x for each new beta release (v0.1.0-beta, v0.1.1-beta, v0.1.2-beta, ...)

Version sync rule:

  • Cargo.toml version should match the tag without the v prefix.
    • Example: tag v0.1.2-betaversion = "0.1.2-beta"

Release flow:

  • Merges/pushes to main automatically create a new beta release.
    • The workflow bumps 0.1.x-beta0.1.(x+1)-beta
    • Commits Cargo.toml + Cargo.lock
    • Creates and pushes tag v0.1.(x+1)-beta
    • Builds binaries and publishes a GitHub pre-release

Manual options are still available:

# trigger release by pushing a tag yourself
git tag -a v0.1.2-beta -m "Release v0.1.2-beta"
git push origin v0.1.2-beta

Or use Actions → Release → Run workflow and pass a tag.

Tags containing -beta are automatically marked as pre-releases.


Contributing

Contributions are welcome.


License

MIT

About

Database manager TUI

Topics

Resources

Contributing

Stars

31 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - amaduswaray/shellql: Database manager TUI · GitHub
Skip to content

Repository files navigation

ShellQL

ShellQL is a database manager TUI for developers.

It is Vim- and tmux-inspired, built for ergonomic SQL workflows and database management from the terminal. If you know Vim and SQL, you will feel right at home.


Beta status

ShellQL is currently in beta.

It is already usable for daily development workflows, but features and keybindings are still evolving. Expect frequent updates, UX refinements, and expansion of database support.


What ShellQL is

ShellQL is a keyboard-first terminal app for working with databases without leaving your shell.

It focuses on:

  • fast navigation
  • modal editing
  • composable layouts (tabs + panes + views)
  • practical data operations (filter, sort, edit, delete, insert, query)

ShellQL is intentionally not beginner-first. The payoff for learning the keybindings is high: once the workflow clicks, you can move very quickly.


Philosophy: tabs, panes, and views

ShellQL is designed like a dashboard you build yourself:

  • Tabs: separate work contexts (e.g. staging vs prod, or schema work vs query work)
  • Panes: split your current tab into focused working areas
  • Views: choose what each pane does (tables, table, schema, editor, results)

A common setup:

  • left pane: table list
  • top-right pane: table view
  • bottom-right pane: SQL editor/results

This makes it easy to inspect data, write SQL, and validate outcomes side-by-side.


Core capabilities

  • Connection management in TUI and CLI
  • Supported engines: Postgres, MySQL, SQLite
  • Vim-like SQL editor (normal/insert/visual, operators, motions, yank/paste)
  • Context-aware autocomplete (commands + editor SQL/table completion)
  • Table view workflows: browse, filter, sort, edit, delete, staged inserts
  • Schema exploration per table
  • Query execution + multi-result view
  • Multi-tab, multi-pane workspace

Installation

Homebrew (custom tap)

brew tap amaduswaray/tap
brew install shellql

Homebrew setup details: docs/homebrew.md

Cargo

cargo install shellql

Build from source

git clone https://github.com/amaduswaray/ShellQL.git
cd shellql
cargo build --release
./target/release/shql

Quick start

Launch TUI:

shql

CLI examples:

# Add a saved connection
shql db add --name dev --engine postgres --url 'postgres://user:pass@localhost:5432/mydb'# List saved connections
shql db list
# Delete a saved connection
shql db delete --name dev
# Interactive connect flow
shql connect --interactive

Demos

Recorded terminal demos from docs/demos/.

1) ShellQL overview

ShellQL overview demo

2) Add connection flow

Add connection demo

3) Pane workflows (split + navigate)

Panes demo

4) Tab workflows

Tabs demo

5) Column search

Column search demo

6) Filter rows with :where

Where sort demo

7) Sort rows with :order

Order by demo

8) Column projection with :select

Select projection demo

9) Query editor: multiple SELECTs

Multiple selects demo

10) Cmdline SQL execution (:!)

Cmdline SQL demo


Keybindings (quick guide)

Home

  • j / k or ↓ / ↑ — move
  • Enter — connect
  • a — add connection
  • d — delete connection (with confirm)
  • : — open command line
  • ? — help
  • q — quit

Dashboard

  • h j k l or arrows — navigate
  • Ctrl+h/j/k/l — move pane focus
  • : — command line
  • / and ? — search forward/backward
  • n / N — next/prev match
  • i — edit cell (TableView) / insert mode (Editor)
  • v / V / Ctrl+v — visual selections
  • dd — stage row delete (TableView)
  • o / O — stage insert row below/above
  • u — undo staged change
  • :w — commit staged changes
  • Tab / Shift+Tab — next/previous result set (Results view)

Query editor (Vim-inspired)

  • Normal/Insert/Visual behavior
  • Motions, operators, text objects, yank/delete/change
  • Examples: dd, dw, dG, dgg, yy, yG, ygg, p, P
  • SQL and table-name autocomplete while typing

Cmdline commands (quick reference)

General navigation/layout:

  • :new tab
  • :new pane [tables|table|schema|editor|results]
  • :split, :vsplit, :hsplit
  • :tab <id|next|prev|close>
  • :q, :close, :full

View switching:

  • :tables
  • :table <name>
  • :schema [table]
  • :editor
  • :results

Data actions (TableView only):

  • :where <expr>
  • :order [by] <col> [asc|desc]
  • :select <cols>
  • :insert [above|below]
  • :reset
  • :w

Other:

  • :! <sql>
  • :connect
  • :disconnect
  • :back, :forward
  • :resize <direction> <amount>
  • :noh

Full docs: see docs/documentation.md


Use cases

  • Quickly inspect rows in a production-like environment from SSH sessions
  • Triaging data issues while coding (no context switch to heavy GUI tools)
  • Running one-off SQL updates with immediate side-by-side validation
  • Keyboard-only data workflows for Vim/tmux users

Inspiration

ShellQL draws inspiration from terminal-native tools and SQL TUIs, including:

  • sqlit
  • lazydb / lazysql style workflows
  • the broader Vim + tmux ecosystem

Respect to the maintainers and communities behind these projects.


Documentation

For a more complete guide (views, workflows, keybindings, commands), see:


Versioning & releases

ShellQL release tags follow GitHub-recommended v prefixes.

Current beta track:

  • v0.1.x-beta
  • Increase x for each new beta release (v0.1.0-beta, v0.1.1-beta, v0.1.2-beta, ...)

Version sync rule:

  • Cargo.toml version should match the tag without the v prefix.
    • Example: tag v0.1.2-betaversion = "0.1.2-beta"

Release flow:

  • Merges/pushes to main automatically create a new beta release.
    • The workflow bumps 0.1.x-beta0.1.(x+1)-beta
    • Commits Cargo.toml + Cargo.lock
    • Creates and pushes tag v0.1.(x+1)-beta
    • Builds binaries and publishes a GitHub pre-release

Manual options are still available:

# trigger release by pushing a tag yourself
git tag -a v0.1.2-beta -m "Release v0.1.2-beta"
git push origin v0.1.2-beta

Or use Actions → Release → Run workflow and pass a tag.

Tags containing -beta are automatically marked as pre-releases.


Contributing

Contributions are welcome.


License

MIT

About

Database manager TUI

Topics

Resources

Contributing

Stars

31 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages