LIVE v1.8.2 What's new

The database tool phpMyAdmin should have been.

Drop a folder. Run the installer. Manage your databases. Zero dependencies, 20 themes, built-in 2FA, Docker support, and an editor that doesn't fight you. Pure PHP + vanilla JS.

users id BIGINT email VARCHAR(255) full_name VARCHAR(100) plan ENUM created_at DATETIME last_login DATETIME active TINYINT subscriptions id BIGINT FK user_id BIGINT plan VARCHAR(40) status ENUM renews_at DATETIME amount_cents INT currency CHAR(3) invoices id BIGINT FK user_id BIGINT FK subscription_id BIGINT total_cents INT issued_at DATETIME projects id BIGINT FK owner_id BIGINT name VARCHAR(120) created_at DATETIME tasks FK project_id BIGINT status ENUM
612
SQL Tokens
12
Security Layers
20
Themes
0
Dependencies
Features
Everything you actually need.
Not a stripped-down toy. Not a bloated framework. Every feature is something a developer actually uses, built without a single npm install.
An editor that actually knows SQL.
Custom 612-token tokenizer with context-aware autocomplete. Type a table alias and a dot — you get its columns. Type inside a function — you get its signature. Ctrl+Enter runs it.
612 tokens Autocomplete EXPLAIN
Alias-aware. Type u. after users u in the FROM, get columns from users — not every table in the database.
Persistent drafts. Close the tab mid-query. Come back tomorrow. Your draft is still there.
One-click EXPLAIN. Color-coded access types, warning badges on filesort and temporary tables.
Shortcuts that exist. Ctrl+Enter runs, Ctrl+/ comments, Ctrl+Space forces completion.
SELECT u.email, COUNT(o.id) AS orders, SUM(o.total) AS spentFROM users uLEFT JOIN orders o ON o.user_id = u.idWHERE u.created_at > '2026-01-01'GROUP BY u.idHAVING spent > 500ORDER BY spent DESCLIMIT 25;-- ⚡ Ctrl+Enter to execute
The ER diagram every DB tool promised.
Pure SVG, introspected from INFORMATION_SCHEMA. Crow's-foot notation, draggable tables, three line styles, auto-save per database. No external diagram engine, no weird export quirks.
Crow's foot Draggable Auto-save
Real FKs, not guesses. Relationships come from INFORMATION_SCHEMA, not naming conventions.
Three line styles. Straight, orthogonal, or curved — switch freely.
Hover to trace. Hover any table — related ones highlight, the rest dim.
Right-click to act. Context menu with Browse / Edit / Structure / Drop for every table.
users id email name plan created_at subscriptions FK user_id plan renews_at invoices FK user_id total_cents
See what's running. Kill what shouldn't be.
Live SHOW FULL PROCESSLIST with 2/5/10-second auto-refresh. Query durations scale from gold (3s) to red (60s+). One-click kill with a confirmation showing the exact query being terminated.
Auto-refresh Color-scaled Self-kill guard
Live stats header. Total, active, sleeping, longest-running — all update in real time.
Hide sleeping connections. One toggle. See only what's actually doing something.
Your session marked. A star shows which row is you. You can't kill yourself by accident.
Normalized across forks. Works identically on MySQL and MariaDB.
ID
TIME
QUERY
142
0s
Sleep
157
1s
SELECT * FROM orders WHERE...
163
7s
UPDATE inventory SET stock...
171
84s
SELECT ... JOIN ... JOIN ...
180 ★
0s
SHOW FULL PROCESSLIST
History that remembers why it failed.
Every query you run is logged with outcome, row count, and full PDO error text on failure. Green tint for success, red for errors. Expand any entry to see details. One click reloads it into the editor.
Errors Row counts Reload
Outcome, not just text. Knows if it was a SELECT or modify, rows returned or affected.
Full error messages. No more "something went wrong" — the actual PDO error, verbatim.
Tinted, scannable. Green rows succeeded, red rows failed. Spot the problem row instantly.
One-click reload. Get any past query back in the editor without copy-paste gymnastics.
SELECT * FROM users WHERE active = TRUE 247 rows
UPDATE invoices SET paid_at = NOW() WHERE id = 812 1 row
SELECT * FROM usres WHERE id = 1 Table 'usres' doesn't exist
SELECT COUNT(*) FROM orders 1 row
INSERT INTO users (email) VALUES ('dup@ex.com') Duplicate entry
DELETE FROM sessions WHERE expires_at < NOW() 43 rows
Full CRUD for every schema object.
Views, triggers, stored procedures, functions, and scheduled events — all managed through the same syntax-highlighted editor. Skeleton templates pre-fill the grammar. Transactions keep triggers from ending up half-applied.
Views Triggers Routines Events
Same editor everywhere. The SQL tokenizer powers every object editor — same autocomplete, same shortcuts.
Trigger safety. DROP + CREATE wrapped — if CREATE fails, the old trigger is restored.
Scheduler-aware events. Warns when event_scheduler is OFF so your events don't silently fail.
DELIMITER just works. Paste a multi-statement procedure with BEGIN/END. It parses correctly.
CREATE EVENT tick_stock_pricesON SCHEDULE EVERY 5 MINUTESTARTS CURRENT_TIMESTAMPDO BEGIN UPDATE stocks SET price = GREATEST( min_price, price * (1 + RAND() * 0.06 - 0.03) ); INSERT INTO price_history SELECT id, price, NOW() FROM stocks;END;
20 themes. Complete design systems.
Not "three shades of blue." Every theme covers 20+ syntax tokens, data tables, modals, panels, badges, and buttons. 10 dark variants (Dracula, Tokyo Night, Monokai Pro…) and 10 light variants (GitHub, Atom One, Clean…).
10 dark 10 light Instant switch
Syntax-aware. Keywords, functions, types, strings, numbers, operators — each gets its own color in every theme.
Fully themed. The chrome changes with the theme: table rows, modals, buttons, borders.
Instant preview. The theme dropdown shows a live preview before you commit.
CSS variables. Every theme is one CSS file. Fork any of them to build your own.
Dracula
Tokyo
Monokai
Gruvbox
Catppuccin
Solarized
Nord
GitHub
Clean
Rosé
Atom
Latte
Comparison
phpMyAdmin had 20 years.
We started over.
19 / 19
SetupInstall
Download, extract, edit config.inc.php, set blowfish secret
Drop folder → browser → 3-step wizard
Why it matters
phpMyAdmin's config.inc.php is 400+ lines and requires a blowfish secret you'll immediately forget. Ledger detects a missing config on first request and runs an interactive installer that writes the file for you. No shell, no manual edits.
SetupDependencies
Requires Composer (v5.2+)
Zero. Pure PHP + vanilla JS
Why it matters
No composer install, no npm install, no build step, no vendor directory bloat. The entire frontend is hand-written vanilla JS with a custom SQL tokenizer. The repo is exactly the files that ship.
SetupDocker
Not included
docker-compose up — running in 30 seconds
What's in the box
A complete docker-compose.yml with Ledger + MySQL 8.0, healthchecks, persistent volumes for data and config, environment overrides, and a quick-start README. One command to a working database + UI.
DataSQL Editor
Textarea with color
612-token tokenizer, autocomplete, EXPLAIN
Under the hood
Custom-written SQL tokenizer with 612 entries (keywords, functions, types, operators). Autocomplete triggers on dot-access showing columns per table, on FROM showing every table, on function names showing signatures. Ctrl+Enter runs the query; Ctrl+Space forces completion; Ctrl+/ toggles comments.
DataEdit Data
Click Edit → form → submit → reload
Click cell → type → Enter. AJAX. No reload
Flow
Click any cell to enter edit mode. Short values use a text input, long values auto-switch to a textarea. Press Enter or click away to save via AJAX. Escape to cancel. Failed edits show the PDO error inline without losing your input. Bulk select + delete with confirmation modal.
DataFK Navigation
Not available
Click FK value → jump to row
Why it matters
Any foreign-key column in a browse view becomes clickable — jump straight to the referenced row in the parent table. This is the one feature every DB tool should have and almost none do. Drill from orders → users → subscriptions → invoices in four clicks.
DataSearch
One table at a time
Every table simultaneously
How it works
One search box. Enter a value. Ledger introspects every text-compatible column across every table in the current database, runs LIKE queries in parallel, and returns grouped results with matching columns highlighted. Click any result to jump to that row.
DataQuery History
Not available
Expand for errors & results, per-entry load, tinted rows
Details per entry
Every query you run in the session is logged with timestamp, type (select/modify), row count, execution result, and full PDO error text on failure. Rows are tinted green/red by outcome. Click any entry to expand; click the load button to drop it back into the editor.
DataSaved Queries
Bookmarks (limited)
Save, rename, delete, click to load
Extras
Named, persistent per-user saved queries. Star tables for quick sidebar access. The SQL editor keeps persistent drafts across sessions — close the browser, come back, your half-written query is still there.
SchemaViews
Basic listing
Full CRUD with syntax highlighting
Details
Create, edit, and drop views with the same syntax-highlighted editor as the main SQL console. Edit performs a CREATE OR REPLACE atomically. Skeleton template pre-fills the CREATE VIEW statement so you don't have to remember the grammar.
SchemaTriggers
Basic listing
CRUD with rollback on failure
Safety
Editing a trigger requires DROP + CREATE (MySQL doesn't support ALTER TRIGGER). Ledger wraps this in a transaction-like flow: the old trigger is saved, dropped, the new one is created, and if creation fails, the old version is restored automatically. No more silently broken triggers.
SchemaRoutines
Basic listing
Full CRUD with syntax-highlighted editor
Details
Stored procedures and functions share the same editor flow. Skeleton templates for both forms. DELIMITER handling is automatic — paste a multi-statement procedure with BEGIN/END and it just works. Dropping is confirmed with the routine's full signature shown in the dialog.
SchemaEvents
Basic listing
Full CRUD, scheduler-status badge, one-click enable/disable
Scheduler awareness
Ledger checks @@event_scheduler on every visit to the Events panel. If it's OFF, you see a red warning banner explaining your events won't fire. Individual events can be enabled or disabled with a toggle. The definition editor shows skeleton examples for both one-shot (AT) and recurring (EVERY) schedules.
SchemaER Diagram
Not available
Crow's foot notation, auto-save, 3 line styles
Features
Pure SVG diagram generator, no libraries. Introspects FKs from INFORMATION_SCHEMA and renders tables with columns, PK/FK markers, and relationship lines in your choice of straight, orthogonal, or curved style. Drag tables to reposition. Layout auto-saves per database. Right-click any table for a context menu with edit/drop/browse.
SchemaPartitions
View only
Create, add, drop, truncate, optimize, rebuild
Operations
Full partition management through the UI — partition an unpartitioned table, add a new partition to an existing scheme, drop or truncate individual partitions, optimize or rebuild in place. Per-partition row counts shown in the panel. All generated SQL is previewable before execution.
OpsProcesses
Separate tab, manual refresh
Live auto-refresh, color-scaled timings, one-click kill
What you see
SHOW FULL PROCESSLIST rendered with live stats (total, active, sleeping, longest-running), 2/5/10-second auto-refresh, text filter, hide-sleeping toggle, and a marker on your current session. Query duration is color-scaled: gold at 3 seconds, amber at 10, red at 60. One-click kill with a confirmation modal showing the exact query being terminated. Self-session kill is blocked.
OpsMaintenance
Optimize only
Optimize, analyze, check, repair in one panel
Per-table actions
OPTIMIZE, ANALYZE, CHECK, and REPAIR all accessible per-table from the Operations panel. Results are shown with full server output including any warnings. Bulk operations let you run analyze or optimize across every table in a database with a single click.
SecurityAuthentication
HTTP Basic or cookie
Bcrypt + optional TOTP 2FA
What's built in
Per-user accounts with bcrypt-hashed passwords (cost 12). Optional per-user TOTP 2FA — scan a QR code with Google Authenticator or any RFC 6238 client. Session tokens, CSRF tokens on every mutating request, lockout after failed attempts, password reset flow. No defaults, no "restrict at the web server level" cop-outs.
OpsThemes
3 color schemes
20 themes (Dracula, GitHub, Gruvbox…)
What "theme" means here
Each of the 20 themes is a complete design system — not just accent colors. Covers syntax tokens (20+), data table rows, modal chrome, buttons, badges, panels, editors, and more. 10 dark variants (Dracula, Tokyo Night, Monokai Pro…) and 10 light variants (GitHub Light, Atom One Light, Clean…). Switch instantly from the header dropdown.
No features match. Try clearing filters or pressing Esc.
Themes
20 themes.
Your eyes will thank you.
10 light. 10 dark. Every one covers syntax tokens, data tables, editors, modals, panels, badges, and buttons. Switch instantly from the header dropdown.
Dark — 10 themes
  • Dark Industrial
  • Dracula
  • GitHub Dark
  • Tokyo Night
  • Monokai
  • Gruvbox Dark
  • Catppuccin Mocha
  • Solarized Dark
  • Nord Dark
  • Carbon
Light — 10 themes
  • Clean default
  • GitHub Light
  • Atom One Light
  • Catppuccin Latte
  • Gruvbox Light
  • Rosé Pine Dawn
  • Solarized Light
  • Forge
  • Lavender
  • Sand
Security
12 layers.
Not bolted on.
From bcrypt hashing to TOTP 2FA, every layer is built in. No default passwords. No "restrict at the web server level" nonsense.
🔐
TOTP Two-Factor Auth
Optional per-user TOTP. Scan a QR code with Google Authenticator, Authy, or 1Password. Verify with a 6-digit code on every login.
🔑
Bcrypt Authentication
Multi-user support with bcrypt password hashing. First-run installer — no default admin/admin ever exists.
🛡️
CSRF Protection
Token generated per session, validated on every POST form and AJAX request. No exceptions.
🚫
Brute Force Lockout
IP-based lockout after configurable failed attempts. Both password and 2FA failures count.
🔒
Read-Only Mode
Regex detection of write keywords. Blocked at UI and API level. Safe for junior developers.
📋
Audit Logging
Every query logged with timestamp, username, database, IP, and execution time.
Get Started
Three steps.
Under a minute.
1
Clone or download
Drop the ledger/ folder into your web root.
2
Open in browser
Navigate to localhost/ledger/ — the installer launches automatically.
3
Configure
Enter MySQL/MariaDB credentials, create an admin account. That's it. You're in.
# Option 1: Clone
$ git clone https://github.com/ClearanceClarence/Ledger.git
$ cp -r Ledger/ledger/ /var/www/html/
$ open http://localhost/ledger/
# Option 2: Docker (recommended)
$ git clone https://github.com/ClearanceClarence/Ledger.git
$ cd Ledger && docker-compose up -d
$ open http://localhost:8080/ledger/
Requirements
PHP 7.4+ · MySQL 5.7+ / MariaDB 10.3+ · Apache
Or just Docker. No Composer. No npm. No build step.

Stop fighting your
database tool.

Ledger is free, open source, and ready to replace phpMyAdmin today.