Skip to main content

A plug-and-play SQLite admin panel for FastAPI — beautiful, fast, and intelligent by default.

Project description

sqlite-panel

A plug-and-play SQLite admin panel for FastAPI — beautiful, fast, and intelligent by default.

Python FastAPI License


Features

  • One-line mount — works with any FastAPI app
  • Auto-discovery — detects all tables and columns automatically
  • Smart cell rendering — JSON formatting, inline image previews, boolean badges, long text expand/collapse, file & URL links
  • Pagination, sorting, filtering, search — all built-in
  • Inline editing — double-click any cell to edit in place
  • Real-time change detection — toast notifications + auto-refresh when the DB changes
  • Read-only mode — disable all writes with a single flag
  • Light & dark mode — with smooth toggle and localStorage persistence
  • Keyboard shortcuts/ to search, n for new row, Esc to close modals
  • SQL injection safe — all user input is parameterised or strictly validated
  • Zero heavy dependencies — HTMX for partial refreshes, vanilla JS, Geist font via Google Fonts

Installation

pip install sqlite_webpanel

Quick start

from sqlite_webpanel import run_panel
run_panel(app, db_path="app.db")
# → Visit http://localhost:8888/admin

Usage example

# dbview.py
from sqlite_webpanel import run_panel
import sqlite3

app = FastAPI()

# Create some demo data
conn = sqlite3.connect("demo.db")
conn.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)")
conn.execute("INSERT OR IGNORE INTO users VALUES (1,'Alice','alice@example.com')")
conn.commit()
conn.close()

run_panel(db_path="demo.db", title="Demo DB")

# uvicorn main:app --reload

Development

git clone https://github.com/yourname/sqlite_webpanel
cd sqlite_webpanel
pip install -e ".[dev]"
pytest

Architecture

sqlite_panel/
├── __init__.py        # Public API: mount_sqlite_panel
├── mount.py           # FastAPI mounting + static files
├── router.py          # All HTTP endpoints (web layer)
├── db.py              # Core DB logic (pure Python, no web deps)
├── renderers.py       # Smart cell → HTML conversion
├── static/
│   ├── panel.css      # All styles (CSS variables, light/dark)
│   └── panel.js       # Interactivity (vanilla JS)
└── templates/
    ├── base.html      # Layout with sidebar
    ├── table.html     # Table view with toolbar
    ├── row_detail.html
    ├── empty.html
    ├── redirect.html
    └── partials/
        └── rows.html  # HTMX partial for table body

Key design decisions:

  • db.py has zero FastAPI/web imports — testable in isolation
  • renderers.py has zero DB imports — pure value → HTML transformation
  • All SQL uses parameterised queries or _safe_identifier() validation
  • HTMX partial endpoints allow row refresh without full page reload
  • Change detection via polling /api/fingerprint (row count hash)

Keyboard shortcuts

Key Action
/ Focus search
n Open "New Row" modal
Esc Close modal / cancel edit
Double-click cell Inline edit

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqlite_webpanel-0.1.0.tar.gz (28.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sqlite_webpanel-0.1.0-py3-none-any.whl (27.6 kB view details)

Uploaded Python 3

File details

Details for the file sqlite_webpanel-0.1.0.tar.gz.

File metadata

  • Download URL: sqlite_webpanel-0.1.0.tar.gz
  • Upload date:
  • Size: 28.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for sqlite_webpanel-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d97d6d2d2b339017a6b1ed202d3bb489809db0f3217a632f7ebcad5d80d13988
MD5 103cc51ed008d9479abf918feeeabd93
BLAKE2b-256 a78e4b2e2ac71e634646bc14c932236eef574d6c9fb08a16142755ef862a3549

See more details on using hashes here.

File details

Details for the file sqlite_webpanel-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sqlite_webpanel-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4f0b9d83519d41f16fb575c92330d4a2338d7e3541807c0ff5b9204c5775abdf
MD5 1cdafb4ae35dc555924996f2aa66c908
BLAKE2b-256 77c2123b6ee49cf7de0eb81080eddec2c8fece13d4fe1c735457cb8b334a6b32

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page