Release Notes
Quark is documented here as a v0.x project (currently v0.12.0 — late-alpha, not yet v1.0 production-ready). Phase 6 (codegen + HA + sharding + benchmarks → v1.0) is open and actively delivering; v0.11 and v0.12 are the first cuts.
Per-version release notes live in the main repository under
docs/RELEASE_NOTES_*.md.
The current tag is documented at
docs/RELEASE_NOTES_v0.12.0.md.
Migration steps for the most recent breaking changes are at
docs/MIGRATION_v0.9.0.md;
v0.10, v0.11 and v0.12 introduced no breaking changes.
v0.12.0
Phase 6 sliver: opt-in compile-time column type-safety on top of the
code generator (F6-4). quark gen emits, per model, a <Model>Columns
value of typed column handles, and the query builder gains Query.WhereP
— WHERE conditions without magic column strings, with compile-time
checking of both the column and the bound value. Pure compile-time sugar
(ADR-0014); the string Where(...) API stays valid and interchangeable.
Performance: the audit row diff is now built only when an audit sink is
configured (~9% allocation drop on InsertOne). No breaking changes.
See RELEASE_NOTES_v0.12.0.md.
v0.11.0
Phase 6 first cut: opt-in code generation. A new quark gen
subcommand of cmd/quark parses your model package (go/packages +
go/types) and emits a quark_gen.go per package that registers typed
implementations into a runtime registry — read path (F6-2 typed
scanners) and INSERT for single-integer-PK models (F6-3a typed
binder). The reflection path stays the permanent default (ADR-0002);
codegen is fully opt-in (ADR-0014).
Comes with a reproducible benchmarks/ module (F6-8a) — Quark vs
hand-written database/sql vs GORM — and an honest profiling
finding in benchmarks/PROFILING.md: codegen ~2–5% on scan, ~1% on
INSERT. Quark's per-op CPU is dominated by database/sql and the
engine, not reflection. Generate for correctness and forward
compatibility, not for speed. No breaking changes.
See RELEASE_NOTES_v0.11.0.md.
v0.10.0
Correctness and resilience: JSON[T] / Array[T] now round-trip on
SQL Server (a []byte→VARBINARY→NVARCHAR conversion corrupted them);
rolling back to a savepoint discards the After*/OnCommit/OnRollback
hooks queued in that scope, so undone work no longer fires its
side-effects on the outer commit; a real cross-engine deadlock-retry
integration test (PG/MySQL/MariaDB) backs WithDeadlockRetry; raw SQL
under RowLevelSecurityNative emits a quark.tenant.raw_under_native_rls
warning. No breaking changes.
See RELEASE_NOTES_v0.10.0.md.
v0.9.0
Phase 5: PostgreSQL engine-enforced multi-tenancy
(RowLevelSecurityNative + the quarktenant policy CLI),
transactional After* hooks that fire post-commit plus
BeforeFind/AfterFind, Tx.OnCommit/Tx.OnRollback +
quark.TxFromContext, a real EventBus (Client.UseEventBus), and an
optional audit log (Client.EnableAuditLog) written atomically with
each write. Two breaking-minor changes — see
MIGRATION_v0.9.0.md.
v0.4.0 – v0.8.0
Phases 2–4: composable query builder (typed AST, subqueries, CTEs,
window functions, set operators, pessimistic locking); schema-as-code
migrations (introspection, pure-Go diff, transactional/resumable
apply, quarkmigrate CLI, backfill); observability + production caché
(OTel metrics, span redaction, slow-query log, stampede protection,
deadlock retry); per-column timezones and Array[T]. Per-version
notes are in-repo under docs/RELEASE_NOTES_v0.{4,5,6,7,8}.0.md.
v0.3.0
First proper tag since v0.1.1. Bundles Phase 0 P0 fixes (security, correctness) with the Phase 1 deliverables (rich types, dirty tracking, optimistic locking, soft-delete scopes). See the in-repo release notes for the full breakdown.
v0.1.0
Public release baseline.
Core
- Generic
Query[T]entry point throughquark.For[T](ctx, provider). - Immutable builder methods for predictable query composition.
- CRUD helpers for create, update, delete, hard delete, upsert, and map updates.
- Read helpers for
Find,First,List,Count, aggregates, pagination, streaming, and cursors. - Validation through
validatetags and model-levelValidate(context.Context) error. - Lifecycle hooks for create, update, and delete paths.
Dialects
- SQLite, PostgreSQL, MySQL, MariaDB, SQL Server, and Oracle dialects.
- Dialect-specific placeholders, identifier quoting, pagination, upsert SQL, generated-ID handling, JSON extraction, and DDL helpers.
- Custom dialect registration through
RegisterDialect.
Schema
Migratefor table and many-to-many join-table creation.Syncfor additive changes, renames, and controlled destructive drops.CreateIndexandAddForeignKeyhelpers.- Versioned Go migrations through
github.com/jcsvwinston/quark/migrate.
Relations
Preloadforhas_one,has_many,belongs_to, many-to-many, and polymorphic relations.- Recursive association persistence for common aggregate saves.
- Tenant context propagation through association loads and saves where tenant columns are present.
Production Features
- Transactions, manual transactions, savepoints, and nested savepoint-style callbacks.
TenantRouterwith database-per-tenant, schema-per-tenant, and row-level strategies.- Cache abstraction with memory and Redis stores.
- Query observers, middleware, and OpenTelemetry middleware.
- SQLGuard validation for identifiers, operators, and raw-query escape hatches.
Compatibility Notes
- The current module tree does not include a standalone
cmd/quarkCLI. DeleteByandDeleteBatchperform hard deletes.Selectaccepts simple identifiers rather than arbitrary SQL expressions.- Raw SQL APIs require
AllowRawQueries: true. - Migration commands that use
migrate.Migratorshould use a client configured withAllowRawQueries: true.