Airtable-style grid, views, and linked records for local SQLite databases VS Code Marketplace · Open VSX (Cursor) · Website
Open any No SQL, anywhere in the interface. AboutBuilt by Tyler Berggren, Claude Code jockey and former Airtable consultant/power user. I started using Airtable in 2020 to build the backend for my business. I got pretty good at it. I later became an Airtable consultant for Fortune 500 companies, building some pretty massive systems with Airtable as the foundation. When Claude Code and vibecoding took off in 2025, I found myself using Airtable less and less (through no fault of its own). I started relying on local SQLite databases that could travel with my code projects, but missed the frontend I grew up with. I tried a handful of SQLite viewer extensions, but they couldn't hold a candle to Airtable. When Airtable was acquired in 2026, it was high time I did something to honor my fallen friend. Instead of writing an in memoriam thinkpost with AI, I built a VS Code extension with AI — one that pays tribute to the beautiful data grid that I and so many others loved for years before AI ran its course. I've enjoyed having a simple, tactile interface to work with data again, and I hope you do too. InstallSearch AirSQLite in the extension panel, or from the command line:
Then open any The SQLite binding ships as a prebuilt binary for all platform targets — no compile step, no Xcode command line tools. Field typesEvery column has a display type that controls how it renders, edits, filters, and summarizes. You can set it explicitly from the column header menu, or leave it unset and let AirSQLite infer one from the data.
InferenceWhen a column has no stored display type, AirSQLite samples up to 200 rows and applies heuristics — every sampled value must agree for a type to be inferred. For example, one non-email in a column of emails drops it back to plain text. Inferred types are marked "— guessed" in the column header menu and are never written to the database. Setting a type explicitly always overrides inference. Computed fieldsComputed fields are formula columns defined by a SQL expression. They're designed to be authored by your coding agent — describe the column you want and the agent writes the formula. The result is evaluated at query time, so it stays current as data changes. Computed fields are read-only in the grid and detail panel, filterable, sortable, and summarizable. The formula is visible from the column header menu. Column renameRename any column from its header menu. The rename cascades to all saved views — sort, filter, grouping, column order, widths, visibility, and summaries all update automatically. Linked recordsForeign key columns are automatically detected. Instead of showing a raw integer, the cell displays a clickable chip with the referenced record's primary field (typically a ViewsViews save a particular way of looking at a table — which columns are visible, their order and widths, how rows are sorted, filtered, and grouped, and what summary functions run along the bottom. Every table starts with one default view. You can create new views from scratch, duplicate the current one, rename them, or set a default. Switching back to a view restores it exactly as you left it. The extension remembers which view you had open last per table. What a view stores
Changes auto-save as you make them — there's no save button to forget. FiltersThe filter builder supports nested AND/OR groups. Each condition picks a column, an operator, and a value. Groups can contain other groups, so you can express things like "status is Active AND (priority is High OR assigned to me)." The conjunction (AND/OR) is set per group and applies to all conditions in that group. The operator list adapts to the column's field type:
Filters on linked record columns match against the referenced record's display name, not the raw foreign key value. For example, filtering a Filters are part of the saved view — they persist across sessions. SearchThe search bar does a substring match across all visible columns. It is intentionally not full-text search — it's a simple Search is transient and is not part of a saved view. It answers a question you have right now; a view is a way of looking that you return to. GroupingGroup rows by one or more columns. Check columns in the group menu, then drag to reorder — the top-to-bottom order determines nesting (first = outermost group). Each group header shows the value, row count, and inline summary aggregates matching your summary bar functions. Each grouping column has an ascending/descending toggle, saved with the view. Groups are collapsible — click the chevron to collapse, or use "Collapse all" / "Expand all" in the group menu. Collapse state persists across reloads but is not saved with the view, since which groups happen to be open is a scroll position, not an arrangement. Group headers format values by display type — checkboxes show "Checked" / "Unchecked", currencies and percents format as you'd expect, and dates use your date format. Grouping columns sort ahead of your own sort order to keep each group as a contiguous block of rows. How it worksThe backend is the only layer that touches SQLite or the filesystem. The UI is a standalone Preact app that talks to it over a request/response protocol. Nothing in the UI layer imports Configuration lives in the database, not in config files. Four The audit trail appends one NDJSON line per write to a sidecar file next to your database, recording only the fields that changed. This powers the History tab and the Live reload watches the database's directory (not the file — WAL mode writes to ActionsAction buttons are configured by writing a row to
Scripts and webhooks show a confirmation dialog first. Every time — there's no "trust this file" memory, because a file that says "trust me" can't be the thing granting the trust. Not included
LicenseMIT |
