Plugin system just shipped — see what's next on the roadmap
dbcooldbcool

One file. Your file. Structured, yet flexible.

A hackable desktop database tool where everything lives in a single portable .dbcool file — a fully free desktop version, forever. No subscriptions, no lock-in.

FileEditHelp
dbcool — my-database.dbcool
DB

Overview

Edit your notebook

Welcome to your workspace. Tables hold the structured data, notebooks hold the write-up — both live in the same .dbcool file.

  • Reliable records
  • Fast filtering
  • Portable local data
4.2 MB62All systems running smoothly.

Everything you need, nothing you don't

Powerful data management without the bloat, subscriptions, or complexity.

Notebooks, Tables & Views

Structure records in typed tables, slice them with filterable views, and tie it all together in rich Markdown notebooks — all against the same live data.

Portable Single File

Your entire workspace — tables, notebooks, and views — lives in one .dbcool SQLite file. Carry it anywhere, back it up with a copy.

You Own Your Data

A fully free desktop app, forever. Your data lives in a file only you control — no account, no telemetry, nothing required to open what's yours.

Modern & Themeable

A clean, fast UI built with React and Tailwind. Swap themes, customise layouts, and make dbcool truly yours.

Hackable Plugin System

Extend dbcool with custom cell types and full-page tabs. Write plugins in any language that compiles to JavaScript — React, vanilla JS, or TypeScript.

Coming soon

AI Editing

AI-powered assistance for your data and workflows. Coming soon.

Coming soon

More features coming soon…

Built in the open, one milestone at a time

What's already shipped, what's underway, and what's next.

Shipped

Tables & Views

Typed columns, filters and sorts — structured data with a real UI, not a spreadsheet.

Shipped

Notebooks

Rich Markdown documents that embed live tables, charts and queries.

Shipped

Cross-platform desktop app

One codebase, native builds for Windows, macOS and Linux.

Shipped

Full SQLite compatibility

A .dbcool file is a real, unmodified SQLite database — open it with any standard SQLite tool, no proprietary format.

In progress

Plugin system

Sandboxed custom cell types and full-page tabs, written in JS or TS.

In progress

Sidecars

Plugins can already request and claim a sidecar process — spawning the process itself is next.

Planned

Deeper theme customisation

More layout tokens and finer control over how dbcool looks.

Planned

AI-assisted editing

Optional AI help for wrangling data and drafting notebooks.

Planned

Computed columns

Excel-style formulas that recalculate automatically when the cells they depend on change.

Planned

Custom SQL queries

Write and run raw SQL against your workspace for the moments the table/view UI isn't enough.

Planned

Standalone SQLite file access

Open and browse any existing SQLite file directly — no conversion to .dbcool required.

Two ways to work in one app

Use tables to structure data and notebooks to work with it.

Structured layer

Tables for structured data

Store records, relationships, and status data clearly.

  • Reliable records
  • Fast filtering
  • Portable local data
Narrative layer

Notebooks for the story behind your data

Tie your data into comprehensive stories, note things down, and host interactive plugins right alongside it.

  • Comprehensive data stories
  • Quick notes
  • Hosted plugins

One source of truth

Use the same data for internal tools, tracking pages, and documentation.

Built for people who think in data

From teams to solo researchers — dbcool fits wherever structured data meets creative work.

Teams

Share a single .dbcool file over Dropbox, Git, or a network drive. Lightweight collaboration without SaaS costs.

Analysts & Power Users

Run SQL queries, build custom views, and visualise data with charts — without spinning up a server.

Indies & Companies

Run the tools your business depends on — CRMs, inventory, project trackers — without paying per seat for a SaaS you don't control.

Researchers

Organise experiments, observations, and results in structured tables alongside rich notes — all in one portable file.

Writers & Knowledge Workers

A Notion-like experience that lives offline. Build personal wikis, link your notes to data, and never worry about a subscription.

Students & Educators

Create interactive notebooks that mix explanations with live data. A modern replacement for Excel-heavy coursework.

Use cases

One tool, infinite possibilities

Whether you're managing research data, building a personal wiki, or replacing a legacy database UI — dbcool fits.

Note-taking

Notion / Obsidian alternative

Blend structured tables with rich Markdown notebooks. Your knowledge base finally has real relational data underneath.

Productivity

Personal workbook

Keep a scoped database for any project: reading lists, budgets, habit trackers, recipe collections — all offline, all yours.

Database UI

Lightweight DB explorer

Browse, query, and edit any SQLite database with a modern interface. Export to CSV, generate PDFs, build views — no Terminal required.

Legacy replacement

A modern Access alternative

If Access was built today — with a clean UI, cross-platform support, and a hackable plugin ecosystem.

Research

Lab notebook + data store

Record observations in notebooks, store measurements in tables, plot charts inline. The crossover between Jupyter and Airtable.

Extensible

Embed any web app as a cell

Plugin cells can embed any program — diagrams, 3D viewers, custom editors — right inside your database rows.

Plugins

Extend anything with plugins.

Write a plugin once, use it in every .dbcool file. No compile step required for simple plugins — just drop in a JS file.

  • Custom cell types — render anything inside a table cell
  • Full-page tabs — embed any web app as a first-class tab
  • Sidecar processes — run Deno/Node scripts alongside the app
  • React or vanilla JS — your choice
my-cell-plugin/plugin.js
// A minimal vanilla JS cell plugin
function ready(callback) {
  if (window.dbcoolAPI) return callback();
  window.addEventListener("dbcool:apiReady", callback, { once: true });
}

ready(async () => {
  const api = window.dbcoolAPI;
  const root = document.getElementById("root");

  // Render the current cell value
  async function render() {
    const value = (await api.getValue()) ?? "(empty)";
    root.innerHTML = `
      <div class="cell">
        <span>${value}</span>
        <button onclick="edit()">✏️</button>
      </div>
    `;
  }

  // Handle edits
  window.edit = async () => {
    const next = prompt("New value:", await api.getValue());
    if (next !== null) {
      await api.setValue(next);
      await api.finishEdit();
    }
  };

  // Re-render on host-driven changes
  window.addEventListener("dbcool:valueChanged", render);
  await render();
});