Skip to content

Dora v0.41.0

Latest

Choose a tag to compare

@github-actions github-actions released this 27 Aug 21:44
· 1 commit to master since this release
Immutable release. Only release title and notes can be modified.

Version 0.41.0

Date: 2026-08-27
Tag: v0.41.0
Range: v0.40.0..master

Why this release exists

v0.41.0 is about the first seconds of a session. Opening a connection —
especially a cloud database such as Neon, Turso, Cloudflare D1 or a remote
MySQL server — used to show skeletons for many seconds while the app ran
serial round trips and full-table counts. This release reworks the entire
connection-open path on every engine, so the sidebar and grid paint almost
immediately and the remaining work happens in the background.

Changes

  • Connections open in a fraction of the time. Schema introspection no
    longer runs exact COUNT(*) queries at connect time; it returns instantly
    with the engine's own estimates while a background task fills in exact
    counts and pushes them to the UI when ready. Postgres estimates now come
    from pg_class.reltuples, which survives Neon's scale-to-zero compute
    restarts — previously a cold Neon open counted every table on cold storage.
  • Far fewer round trips on every engine. Postgres runs its five catalog
    queries pipelined in roughly one round trip. libSQL/Turso introspection
    collapsed from ~4 network round trips per table to 4 total. Cloudflare D1
    went from 5+ HTTPS requests per table to 2–3 requests total. MySQL and
    MariaDB drop a redundant ping and run their catalog queries concurrently
    over two pooled connections. SQLite reads its whole schema in four queries
    instead of a per-table PRAGMA loop.
  • First rows race the schema. The data grid fetches the first page of rows
    in parallel with schema introspection instead of waiting for it, and the
    sidebar paints instantly from the bootstrap cache after a reload. A staged
    "Connecting… / Reading schema…" indicator explains any remaining wait while
    a suspended cloud database wakes up.
  • Tables reappear instantly after a restart. The last viewed page of each
    table is cached on this device (size-capped, cleared with the connection)
    and painted on relaunch while fresh data loads. Controlled by the new
    "Remember table contents" setting, and disabled automatically — including
    clearing the cache — when Privacy mode is on.
  • Editing no longer re-reads the whole schema. A cell edit, insert or
    delete now patches the cached row count in place instead of invalidating
    the entire schema, which previously forced a full re-introspection (and,
    on SQLite-family engines, a fresh count of every table) after every edit.
  • One AI client, and per-provider model memory. The AI providers were
    unified behind a single client abstraction with an OpenAI-compatible spec
    client, and the Studio now remembers which model you selected for each
    provider, so switching providers no longer resets your model choice.
  • Self-hosted fonts and a polished loading shell. Inter and JetBrains
    Mono are bundled with the app instead of loaded via CSS imports, fixing
    font rendering under the desktop content-security policy, and lazy views
    got a reworked loading shell.

Fixes

  • Concurrent schema requests for the same connection no longer run the full
    introspection twice.
  • libSQL schemas no longer report table names in the unique-column list.
  • SQL query status polling starts at 20ms instead of 100ms, shaving up to
    ~100ms off fast queries.
  • D1 and PostHog connections reuse one HTTP client, so TLS sessions and
    keep-alives survive across connect, introspection and queries.

Notes

  • Backed by new live-database tests: the collapsed libSQL introspection is
    verified against a real sqld server, the Postgres estimate path against
    Postgres 17, and the MySQL/MariaDB catalog queries against real servers.