SQLite Explorer (vReact)

Look ma, no HTMX!

A modern, web-based SQLite database browser and query tool built for Val Town. Execute SQL queries, browse database schema, and export results with a clean, intuitive interface.

Features

  • šŸ” Database Schema Browser - View all tables and views with visual icons
  • ✨ SQL Code Editor - Syntax highlighting with CodeMirror
  • ⚔ Query Execution - Execute SQL queries with real-time results
  • šŸ“Š Paginated Results - Handle large datasets (100 rows per page)
  • šŸ’¾ Export Data - Download results as CSV or JSON
  • šŸŽØ Dark Mode - Automatic theme switching with warm color palette
  • šŸ’¬ Query Persistence - Saves queries per table in localStorage
  • āŒØļø Keyboard Shortcuts - Cmd/Ctrl+Enter to run queries
  • šŸ”’ OAuth Authentication - Secure Val Town authentication
  • šŸ›”ļø Error Boundaries - Graceful error handling and recovery

Tech Stack

Frontend

  • React 18.2.0 - UI framework
  • CodeMirror 6 - SQL editor with syntax highlighting
  • TailwindCSS - Styling (via Play CDN)
  • TypeScript - Type safety with strict mode

Backend

  • Hono 4 - Lightweight web framework
  • Turso/libSQL - SQLite database (via Val Town)
  • Deno - Runtime environment

Tools

  • Biome - Linting and formatting
  • TypeScript Strict Mode - Enhanced type safety

Project Structure

.
ā”œā”€ā”€ backend/
│   └── index.http.ts                 # Hono API server / Entry Point
ā”œā”€ā”€ frontend/
│   ā”œā”€ā”€ components/
│   │   ā”œā”€ā”€ AppHeader.tsx             # App header with title
│   │   ā”œā”€ā”€ EditorSection.tsx         # SQL editor with controls
│   │   ā”œā”€ā”€ ErrorBoundary.tsx         # Error boundary component
│   │   ā”œā”€ā”€ Icons.tsx                 # Icon components
│   │   ā”œā”€ā”€ PaginationBar.tsx         # Pagination controls
│   │   ā”œā”€ā”€ Table.tsx                 # Data table with pagination
│   │   ā”œā”€ā”€ TablesList.tsx            # Schema sidebar
│   │   └── ThemeToggle.tsx           # Dark mode toggle
│   ā”œā”€ā”€ hooks/
│   │   ā”œā”€ā”€ useCodeEditor.ts          # Editor state management
│   │   ā”œā”€ā”€ useDownload.ts            # Export functionality
│   │   ā”œā”€ā”€ useQueryExecution.ts      # Query execution logic
│   │   └── useTableSelection.ts      # Table selection logic
│   ā”œā”€ā”€ App.tsx                       # Main React application
│   ā”œā”€ā”€ index.html                    # HTML entry point
│   └── main.tsx                      # React entry point
└── shared/
    ā”œā”€ā”€ exportHelpers.ts              # CSV/JSON export utilities
    ā”œā”€ā”€ sqlHelpers.ts                 # SQL parsing utilities
    └── types.ts                      # Shared TypeScript types

Usage

Running Queries

  1. Select a table from the sidebar to auto-populate the editor with SELECT * FROM [table]
  2. Write or edit your SQL query in the editor
  3. Press Cmd/Ctrl+Enter or click the "Run Query" button
  4. View results in the paginated table below

Multi-Statement Queries

The editor supports multiple SQL statements. It will execute the statement at your cursor position when you press Cmd/Ctrl+Enter.

Exporting Data

  1. Execute a query to get results
  2. Click "Download CSV" or "Download JSON"
  3. File downloads automatically with the results

Keyboard Shortcuts

  • Cmd/Ctrl+Enter - Execute query at cursor
  • Click table name - Auto-populate SELECT query

API Endpoints

GET /api/schema

Returns all tables and views in the database.

Response:

{ "tables": [{ "name": "users", "type": "table" }], "views": [{ "name": "active_users", "type": "view" }] }

POST /api/query

Executes a SQL query.

Request:

{ "query": "SELECT * FROM users LIMIT 10" }

Response:

{ "success": true, "data": { "columns": ["id", "name", "email"], "rows": [[1, "Alice", "alice@example.com"]] } }

GET /api/download/csv?query=<sql>

Downloads query results as CSV.

GET /api/download/json?query=<sql>

Downloads query results as JSON.

Limitations

  • Admin tool only - Not designed for public-facing applications
  • Single database - Works with Val Town's SQLite instance
  • No query history - Future enhancement planned
  • 100 row pagination - Configurable in Table.tsx

Migration History

This project was migrated from HTMX to React on November 14, 2024. See MIGRATION_GUIDE.md for details on the migration process.