A terminal UI database browser for SQL style datastores.
- Browse database tables, views, materialized views, functions, and triggers
- View table schemas with column details (data types, nullability, defaults, constraints)
- Browse table data with pagination (500 rows per page)
- Edit cell values inline
- Search and filter tables by name
- Search within table data (content search)
- JSON viewer with expandable/collapsible tree structure
- Copy values to clipboard
- Navigate between tables and maintain history
- Customizable key bindings via configuration file
- Debug mode with real-time logging
go install github.com/someshkoli/dessertfrog@latestOr build from source:
git clone https://github.com/someshkoli/dessertfrog.git
cd dessertfrog
go builddessertfrog --driver postgres --host localhost --port 5432 --username postgres --password yourpass --database mydb --schema public| Flag | Short | Default | Description |
|---|---|---|---|
--config-file |
-c |
~/.config/dessertfrog/config.yaml |
Path to configuration file |
--driver |
-d |
postgres |
Database driver (postgres, mariadb) |
--host |
localhost |
Database host | |
--port |
-p |
5432/3306 | Database port (depends on driver) |
--username |
-u |
postgres/root | Database username (depends on driver) |
--password |
-P |
Database password | |
--database |
-n |
postgres/mysql | Database name (depends on driver) |
--schema |
-s |
public | Database schema (PostgreSQL only) |
↑/↓ork/j- Navigate tablesCtrl+D- Page down (jump down by half viewport)Ctrl+U- Page up (jump up by half viewport)g/G- Jump to first/last tableEnter- View table data/- Inline searchCtrl+P- Open search popup (search all entities)Ctrl+H- Navigate back in historyCtrl+L- Navigate forward in historys- Open SQL query editorq- Quit
↑/↓/←/→orh/j/k/l- Navigate cellsCtrl+D- Page down (jump down by half viewport)Ctrl+U- Page up (jump up by half viewport)g/G- Jump to first/last roww/b- Jump forward/backward between cellsv- View cell value (opens popup for large values)V- View record (opens popup for entire row)i- Edit cell valuey- Copy cell value to clipboardY- Copy record (entire row) to clipboardn/p- Next/previous page (500 rows)/- Search within table dataCtrl+P- Open search popup to switch tablesCtrl+H- Navigate back in historyCtrl+L- Navigate forward in historys- Open SQL query editorEsc- Clear filter or return to table listq- Quit
↑/↓ork/j- Scroll (or navigate JSON tree)g/G- Jump to first/last itemh/lor←/→- Collapse/expand JSON nodeEnter- Toggle JSON node expansionEscorq- Close popup
↑/↓ork/j- Navigate through fieldsg/G- Jump to first/last fieldv- View selected field value (opens cell popup)Escorq- Close popup
F12- Toggle debug overlayF11- Clear debug logs (when debug mode is active)F10- Focus/unfocus debug panel (enables navigation)
When debug panel is focused:
Tab- Switch between App State and Debug Logs sectionsj/kor↑/↓- Navigate through log entriesg/G- Jump to first/last log entryEnterorSpace- Open detail popup for selected itemEsc- Unfocus debug panel
The debug overlay displays:
- Connection information
- Current view state and mode flags
- Table/data statistics
- Navigation history info
- Window dimensions
- Real-time debug logs with timestamps
- Visual selection highlighting when focused
- Expandable detail view for any log entry or full app state
dessertfrog supports configuration through a YAML file. By default, the application looks for a config file at ~/.config/dessertfrog/config.yaml. If the file doesn't exist, built-in defaults are used.
You can generate a configuration file with all default key bindings using the built-in command:
# Generate config at default location (~/.config/dessertfrog/config.yaml)
dessertfrog generate-config
# Generate config at a custom location
dessertfrog generate-config --output /path/to/config.yaml
# Overwrite existing config file
dessertfrog generate-config --forceYou can specify a custom config file location when starting the application:
dessertfrog --config-file /path/to/config.yaml --driver postgres ...Alternatively, you can manually copy the sample configuration file from the repository:
mkdir -p ~/.config/dessertfrog
cp config.yaml.sample ~/.config/dessertfrog/config.yamlThe configuration file allows you to customize key bindings without modifying the code. Key bindings defined in the config file override the default bindings.
Example configuration structure:
keybindings:
# Global bindings (work in all modes)
global:
- key: "f12"
command: "toggle_debug"
- key: "ctrl+c"
command: "quit"
# Normal mode (table list view)
normal:
- key: "j"
command: "navigate_down"
- key: "ctrl+h"
command: "history_back"
# Table view mode
table_view:
- key: "ctrl+d"
command: "page_down"
- key: "ctrl+u"
command: "page_up"Available Commands:
- Navigation:
navigate_up,navigate_down,navigate_left,navigate_right,page_up,page_down,go_to_top,go_to_bottom,history_back,history_forward - Actions:
confirm,cancel,quit,back - View:
open_table,open_search,open_sql_query,open_command_mode,inline_search - Table:
next_page,previous_page,edit_cell,copy_cell_value,copy_row,open_cell_popup,open_record_view,filter_content - Debug:
toggle_debug,clear_debug_logs,toggle_debug_focus - Popup:
toggle_json_node,switch_debug_section
Key Format Examples:
- Single keys:
"j","k","g","G","enter","esc","tab" - Arrow keys:
"up","down","left","right" - Ctrl combinations:
"ctrl+h","ctrl+l","ctrl+d","ctrl+p" - Alt combinations:
"alt+left","alt+right" - Function keys:
"f1","f12"
Binding Modes:
global- Work in any modenormal- Table list viewtable_view- Table data viewsearch- Search popupinline_search- Inline search modecommand_mode- Command inputcell_edit- Cell editingsql_query- SQL query inputcell_popup- Cell value popuprecord_view- Record view popupdebug_panel- Debug panel
- PostgreSQL
- MariaDB (not supported yet)
- Clickhouse
- bubbletea - TUI framework
- lipgloss - Terminal styling
- pgx - PostgreSQL driver
- cobra - CLI framework
- clipboard - Clipboard operations
See LICENSE file for details.