PackageTrack
Sign in Get early access

basalt

A type-safe, migration-first ORM for Dart: a compile-time-checked query builder, code-generated row mappers, and pluggable SQL backends.

0.1.0 4akloon/basalt_dart

What this package is like to depend on

Last release 1 months ago

22 Jul 2026

Too new to tell

only 2 release windows

Nearly every release is documented

notes for 4 of 4 stable releases

Nothing withdrawn

no release was ever pulled

1 months old

4 releases · first in 2026

4 releases in the last 12 months

see the full history below

Release timeline

4 releases · Jul 2026 to Jul 2026
Release Pre-release

Releases

latest 4
  1. 0.1.0 22 Jul 2026
    Release notes

    Schema model redesign: table markers are real objects, columns are typed to their table.

    • Breaking: a table marker is now a final class X extends TableRef<X> with a private const constructor; static const table = X._() is the singleton instance. Columns take that object as their first argument (PrimaryKey<int, Users>(table, 'id', IntSqlType())) instead of repeating the table-name string — handing a column another table's ref is a compile error.
    • Breaking: TableRef is abstract and stores only tableName; the marker overrides columns as a getter (lazy evaluation is what keeps table ⇄ columns free of const-initializer cycles, FKs included).
    • Breaking: QuerySource.table renamed to tableName, and TableRef.name merged into it — a static column named like an inherited instance member would not compile, so table/name had to leave the instance surface. TableColumn.table (the effective SQL qualifier string) is unchanged and now derived as owner.alias ?? owner.tableName.
    • TableColumn gained owner (QuerySource<Tbl>); TableAlias rebinds columns by passing itself as the owner.
    • Serialization, scope validation, and RowReader keys are byte-for-byte unchanged — only the schema declaration surface moved.
    Open source →
  2. 0.0.3 20 Jul 2026
    Release notes
    • feat: basalt_mcp server on a shared devtools inspector client

    Add the basalt_mcp package (an MCP server for live DB inspection in a running
    debug app) and refactor the DevTools inspector so both the MCP server and the
    DevTools extension consume one shared client + DTO layer instead of each
    re-implementing the ext.basalt.* wire protocol.

    Core (basalt):

    • Split lib/src/devtools/ into protocol/ · dto/ · host/ · client/.
    • Add BasaltExtension (method-name enum, single source of truth), an
      InspectorTransport seam, and a transport-agnostic InspectorClient exposed via
      a new package:basalt/devtools_client.dart entrypoint.
    • Harden DTO fromJson (json_read) so wire-decoded JSON parses; add
      RegisteredInstance.fromJson; restore SqlResultDto.truncated.
    • Drop backend knowledge from the inspector: RegisteredInstance loses backend,
      and InspectorService takes placeholders/quoting/encoding from
      Connection.dialect (also fixes DateTime encoding on the raw path).
    • Decompose InspectorService into small SRP collaborators (SchemaReader,
      TableReader, RowUpdater, SqlRunner, WhereClause, ParamBinder, SchemaLookup).

    basalt_mcp:

    • Depends on basalt; supplies a VmServiceTransport (package:vm_service) to the
      shared InspectorClient, with IsolateFinder for app discovery.
    • One BasaltTool class per MCP tool + a ToolRegistrar with a uniform error guard
      (replaces the 220-line inline cascade); split runner/exceptions/logging.
    • Tests over a fake InspectorTransport; connect docs + tool descriptions cover
      Dart MCP DTD discovery of the VM service URI.

    basalt_devtools_extension:

    • Delete the duplicate lib/src/models/*; consume the shared InspectorClient via
      a ServiceManagerTransport and core DTOs.

    Also add basalt_mcp to the workspace, CI matrix, publish tags, and README.

    Co-Authored-By: Claude Opus 4.8 (1M context) [email protected]

    • fix(basalt_mcp): set process exit code instead of returning it from main

    Dart ignores the value returned from main, so returning 1 on arg-parse or
    startup failure left the process exit code at 0 — a supervisor or CI checking
    the code saw success. Assign exitCode (as tool/smoke.dart already does).

    Co-Authored-By: Claude Opus 4.8 (1M context) [email protected]

    • chore(release): basalt 0.0.3; bump devtools extension build (internal)
    • basalt 0.0.2 -> 0.0.3: shared DevTools inspector client
      (package:basalt/devtools_client.dart), BasaltExtension, hardened DTO fromJson,
      and the dev-only breaking removal of RegisteredInstance.backend (see CHANGELOG).
    • basalt_devtools_extension: config.yaml version 0.0.1 -> 0.0.2 and pubspec
      build 1.0.0+1 -> 1.0.0+2. Internal only — the extension is publish_to: none
      and has no release tag, so nothing republishes; the bump just marks the new
      build that consumes the shared client.

    Co-Authored-By: Claude Opus 4.8 (1M context) [email protected]


    Co-authored-by: Claude Opus 4.8 (1M context) [email protected]

    Open source →
    Release notes

    Shared DevTools inspector client — one host + client + DTO layer behind the ext.basalt.* protocol, so the DevTools extension and the basalt_mcp server stop re-implementing it.

    • New package:basalt/devtools_client.dart entrypoint (kept separate from the host package:basalt/devtools.dart): a transport-agnostic InspectorClient plus an InspectorTransport seam and the shared DTOs. Consumers implement only the transport (VM service, DevTools serviceManager, ...).
    • BasaltExtension — enum of the ext.basalt.* method names, the single source of truth for host registration and every client (exported from both entrypoints).
    • DTO fromJson factories now parse real jsonDecode output (previously the blind as List<...> casts threw); SqlResultDto.fromJson restores truncated; RegisteredInstance.fromJson added.
    • Breaking (dev-only): RegisteredInstance.backend removed — the inspector no longer infers a backend name. InspectorService now takes placeholders, identifier quoting, and value encoding from Connection.dialect (this also fixes DateTime encoding on the raw-SQL path). lib/src/devtools/ was reorganized into protocol/ · dto/ · host/ · client/ (internal), and InspectorService was split into focused collaborators.
    Open source →
  3. 0.0.2 16 Jul 2026
    Release notes

    basalt 0.0.2 — single-statement batch writes

    Open source →
    Release notes

    Single-statement batch writes.

    • updateAll(table).keyedBy(col).values([...]) — a new UpdateAllStatement that updates many rows with per-row values in one statement (WITH ... AS (VALUES ...) UPDATE ... FROM), with composite keys (repeated keyedBy), an optional extra .where(...), and RETURNING support (columns are table-qualified there to stay unambiguous next to the VALUES table).
    • SqlDialect.castType(SqlType) — new dialect seam naming the native type to CAST a bound parameter to where SQL gives the server no inference context (the VALUES table of updateAll); dialects that don't need casts return null.
    • ColumnValue now carries the column's SqlType (set by TableColumn.set) so serialization can emit those casts.
    • A zero-row INSERT (no .value(...)/.values(...)) now throws StateError at build time instead of emitting invalid SQL.
    • @Insertable doc updated for the new generated batch extension (see basalt_codegen 0.0.2).
    Open source →
  4. 0.0.1 12 Jul 2026
    Release notes

    basalt 0.0.1 — initial development release

    Open source →
    Release notes

    Initial development release of the basalt_dart core.

    • Type system: SqlType<T> codecs (IntSqlType/StringSqlType/DoubleSqlType/BooleanSqlType/ BlobSqlType/DateTimeSqlType) with a single NullableSqlType(...) wrapper for nullable columns.
    • Schema: sealed TableColumn<T, Tbl> (ValueColumn / PrimaryKey / Ref), TableRef, QuerySource, TableAlias for self-joins.
    • Expressions with phantom table scope; eq/ne/gt/ge/lt/le/isIn/between/isNull/like/ eqColumn, operator sugar, and &/| combinators.
    • Query builder: from().where().orderBy().limit().offset().select().innerJoin()/leftJoin().map()MappedQuery; RowReader (read by column name) and reusable RowMapper.
    • Writes: insertInto / update / deleteFrom with TableColumn.set.
    • Serializer (QueryBuilder + SqlDialect) with two-tier join scope validation.
    • Async-first Connection interface with transactions (nested → SAVEPOINT) and introspect().
    • Annotations for codegen: @Queryable, @Insertable, @AsChangeset, @Column (readOnly/writeOnly), @Relation.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive