All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.26.0 - 2026-10-17
Added
- stripe: Add typed Accounts v2, refunds and transfer reversals (
3ae351a) - BREAKING: cache: Add Sharer contract and fail closed on undeclared stores (
7b86743) - redis: Declare the cache store shared (
bcd81e0) - cache: Bound Unwrap chains with cache.Layers (
25e49bb) - database: Add RebindChecked that rejects unterminated SQL and mixed placeholders (
a5864e0) - BREAKING: queue: Pop same-millisecond database jobs in push order (
b644749) - signed: Verify links signed with previous keys (
acad399) - social: Accept state cookies signed with previous keys (
febfa33) - session: Open cookie sessions sealed with previous keys (
5658c74) - middleware: Accept maintenance bypass cookies from previous keys (
efccd58) - cli: Add key:rotate and pass previous keys in auth scaffolds (
8cdca11) - grpc: Add ErrorContext to translate keyed errors into the request locale (
ae3a3ca) - schema: Add Schema.HasColumn for upgrade migrations (
99e2b8a) - BREAKING: auth: Soft revoke API tokens with revoked_at (
6cf8d9c) - cli: Add revoked_at to the install:auth access_tokens table (
534c3d8) - cli: Revoke API tokens with Tokens.RevokeAll on password reset (
d66f523) - BREAKING: i18n: Return the config error from Middleware instead of panicking (
43df6fd) - mail: Add the Mailtrap Email API transport (
1c70018) - vukem: Select the Mailtrap transport with MAIL_MAILER=mailtrap (
0689a31)
Changed
- graphql: Derive the 5xx check from errs.Status (
6cd0ccb) - BREAKING: orm: Remove the deprecated BeforeCreater and AfterCreater aliases (
ad02707) - BREAKING: mail: Remove the deprecated WithAttachments alias (
7c57159) - BREAKING: stripe: Remove the deprecated Client.Do (
a5affc3)
Fixed
- BREAKING: stripe: Map v2 errors and validate Call paths and object ids (
4550bf6) - BREAKING: schedule: Check OnOneServer locks with cache.Shared (
3c6f831) - BREAKING: vukem: Require a declared shared cache for RATE_LIMIT_STORE=cache (
5ba0290) - schedule: Name cache.Sharer in ErrLocksNotShared (
42fe1c1) - database: Quote only an 80-byte prefix of the query in RebindChecked errors (
e7aea62) - queue: Add the seq column only on an unknown-column probe error (
cd7434a) - cli: Keep the starter upload test off the filesystem (
f4a0be4) - cli: Make key:rotate atomic and keep .env line syntax (
c063b95) - graphql: Keep loader batches whole while siblings make progress (
dc529e4) - graphql: Translate keyed resolver errors into the request locale (
427aab1) - graphql: Hide field errors wrapped in a 5xx HTTPError (
6e05325) - BREAKING: grpc: Send 5xx HTTPErrors as "internal error" and log their cause (
35832ec) - graphql: Cap how long a pending loader batch waits for progress (
2a6c078) - BREAKING: grpc: Mask unknown Validate errors and 5xx headers (
aa000e2) - auth: Answer 503 when the token store fails (
58a101b) - auth: Keep revoking possible on access_tokens without revoked_at (
30404bd) - mail: Harden Mailtrap error decoding and redirects (
a9f7b84)
Security
- cache: Document the cache.Sharer contract (
73c41d0) - vukem: Honour APP_PREVIOUS_KEYS in every APP_KEY-derived feature (
6c5084c) - web: Add AuditEvent for routine audit records at info (
35995da) - BREAKING: cli: Make the install:auth sign-up enumeration-safe (
53788f2) - BREAKING: cli: Require verified email and rate limit sign-up in install:auth (
0eb6fa2) - BREAKING: cli: End squatter access when the email is proven (
99edfe5)
0.25.0 - 2026-10-17
Added
- middleware: Log peer address and resolved client IP per request (
c6da5ad) - middleware: Add HSTSForce and HSTS_FORCE for untrusted TLS proxies (
98135e2) - stripe: Add connect resources and per-request idempotency and account options (
7970378) - stripe: Accept connect webhook secrets and expose event account (
e253c0f) - router: Report whether routes were compiled (
26f12d5) - vukem: Add WithRoutesAfterBoot for routes that need booted services (
8596784) - vukem: Let seeders reach the app with WithAppSeeders (
d2c820a) - vukem: Name seeders through an optional Name method (
da31331) - export: Stream CSV, JSON and NDJSON downloads (
50f9f6b) - errs: Add message keys and a request translator to errors (
3200fb9) - web: Show keyed http errors in the request locale (
67dd98b) - i18n: Ship built-in en and pt-BR framework messages (
5a54ca2) - auth: Translate guard errors through message keys (
6b52fdd) - social: Add message keys to callback errors (
9eed6e8) - orm: Translate unique and exists rule messages (
7c20d74) - mail: Build envelopes from the send context with ContextEnveloper (
f977288) - telegram: Add SendSync/ContactSync, Filter and RateLimit (
ed796d4) - vukem: Add TELEGRAM_LOG, TELEGRAM_RATE_LIMIT and WithTelegram (
a0e4030) - webhook: Add DeliveryLogFunc and document DeliveryLog as the extension point (
9fa44c8) - grpc: Serve rpc services on their own port as an app runner (
54bec2a) - s3: Add idempotent region-aware CreateBucket (
1586a42) - totp: Encode qr codes up to version 40 (
b078d4f) - api: Add Op.ValidateResponse to check typed handler output (
5b1736e) - BREAKING: openapi: Emit zod 4 schemas and inline request body schemas (
6204877) - vukem: Run codegen:types without a database or APP_KEY (
1f1077f) - BREAKING: i18n: Add locale source order and allowed locales to MiddlewareConfig (
3d1680d) - vukem: Add MiddlewareOptions.I18n and APIMiddlewareWith (
64f3d12) - inertia: Add RenderStatus for pages with a non-200 status (
3ffb56f) - i18n: Fail closed on invalid middleware config and vary on cookie (
d80a1ec) - vukem: Install the locale resolver in APIMiddleware (
9a35a8e) - vukem: Add ServeOpenAPIWith for prefixed, production-opted documents (
0d9b5b5) - BREAKING: schema: Add partial indexes with Index/UniqueIndex(...).Where(expr) (
52f1906) - database: Add Rebind for portable raw SQL placeholders (
1012e20) - database: Fan out query observers and add vukem.WithQueryObservers (
f983e9d) - uuid: Add stdlib UUID v4/v7 package (
6faedf8) - session: List a user's sessions and revoke one by handle (
5c70a2a) - vukem: Read SESSION_RECORD_CLIENT into the session config (
98d49bc) - auth: End sessions on every driver with a per-user session version (
81efca9) - vukemtest: Add WithSession and stamp the session version in ActingAs (
62a0836) - redis: Implement session.ListStore on the session store (
80c6b94) - cli: End every session on password reset with a session version (
bd4e878) - queue: Add Queue.SetClock and the queue.Clock driver interface (
5d334ee) - queue: Bound the worker drain with WorkOptions.StopTimeout (
486ff01) - queue: Add DispatchKindTx (
cafe81e) - redis: Implement queue.Clock on the queue driver (
84aceaf) - mail: Add Mailer.SendLaterTx (
add0822) - schedule: Add Task.OnOneServer (
3d4ac45) - BREAKING: app: Run a queue worker in serve for persistent queues (
8324377) - app: Add MailLaterTx (
a1a3f17) - app: Refuse OnOneServer schedules on the in-process cache (
08d912d) - schedule: Namespace task locks with Options.Namespace (
3c536b3) - httpclient: Add Options.WrapTransport for tracing and metrics (
27e4822) - vukem: Add App.Instrument hooks for database, queue and mail (
2ac2c2f) - otel: Add metrics, data-layer spans and OTEL_* settings from app.Source (
a76a55d) - otel: Export metrics over OTLP/HTTP from OTEL_* settings (
4ee0cb1)
Changed
- stripe: Deprecate Do in favour of Call (
d944d94)
Fixed
- middleware: Warn when HSTS_FORCE is ignored and document its scope and log privacy (
3674147) - tools: Report compatible apidiff changes as unchecked in gate mode (
77a74ed) - stripe: Refuse account scope on platform calls and decode expanded ids (
61133d0) - router: Mark the router compiled before building it (
eb7bff3) - vukem: Fail closed around routes after boot and keep the boot error (
35172ca) - middleware: Hijack through wrapped writers in gzip (
5bde2ca) - web: Sanitize Download file names (
9eb6303) - export: Renew write deadline per write and always abort mid-stream (
806c5b2) - i18n: Fill only existing catalogs of the same locale with built-in messages (
99b6c23) - errs: Copy the params given to NewKey (
ec9f1be) - broadcast: Show keyed sse refusals in the request locale (
6b4bc1d) - sse: Release a topic's broker subscription when its last subscriber leaves (
23abd7b) - telegram: Report errors outside the queue lock and never forward OnError records (
6e02e03) - sse: Make every subscriber wait for its topic relay and fail closed (
9eb5277) - vukem: Show telegram log forwarding off in about (
5cee6b7) - graphql: Fold go names of json-tagged fields in the default resolver (
27ac7f1) - graphql: Free a websocket subscription id before its terminal message (
b917414) - grpc: Refuse a cleartext production port in Server too (
1e8b11b) - BREAKING: z: Treat required on a list as present, not non-empty (
5cd14ca) - openapi: Emit minLength 1 for required strings (
abafd04) - BREAKING: openapi: Suffix component names that shadow typescript globals (
514d1c8) - vukem: Never boot a warmup app and export openapi in warmup (
5c34f59) - openapi: Reserve the fetch types the generated client uses (
d817eae) - openapi: Fail typescript codegen on colliding generated names (
2435e2b) - web: Answer 422 for z.FieldError and z.Issues returned by handlers (
bea0e86) - BREAKING: z: Hide the text of plain Refine and Custom errors (
6bdc413) - web: Fail closed on z issues and skip redirect-back for GET (
36110d0) - upload: Send z validation messages from tus completion (
e80f03b) - apidocs: Keep the nonce-only CSP and pass axe serious checks (
8ce814f) - auth: Answer problem+json on token routes and use the app clock (
890d919) - auth: Force JSON only on the error path of API guards (
cdae9a9) - openapi: Match PathPrefix on whole path segments (
6d9196b) - apidocs: Limit the CSP shim to plain style values and hide scalar.com links (
95da209) - orm: Share the Rebind lexer for WhereRaw placeholder counting (
82972f7) - dbtest: Bound each conformance subtest and shrink the MySQL bulk insert (
db74695) - orm: Lex MySQL -- comments, backticks and SQLite brackets per dialect (
d33721a) - orm: Reject $n in WhereRaw and fail closed on unterminated WHERE SQL (
d21a30b) - database: Contain panicking query observers and ignore typed nils (
e5432a9) - auth: Bind remember-me tokens to the user's session version (
e26bdc0) - cli: Delete remember-me tokens when ending a user's other sessions (
493583f) - redis: Key sessions by SHA-256 of the id and re-key legacy keys (
cb3f49b) - auth: Harden session version checks and remember-me deletion (
9ac9923) - session: Strip control and format runes from the recorded user agent (
0854dad) - app: Follow the app clock in the queue and its drivers (
e6dfa9c) - app: Stop waiting for runners that ignore ctx after SHUTDOWN_TIMEOUT (
8ad882a) - cli: Queue the verification mail in the auth scaffold (
290116c) - queue: Return reserve errors from Work with StopWhenEmpty (
d358031) - app: Create the database queue tables at boot (
c8f5c5e) - app: Namespace schedule locks by APP_NAME (
77667c7) - queue: Free only shutdown-caused interruptions, at most three in a row (
a8b4a0b) - app: Give runners three seconds of grace after SHUTDOWN_TIMEOUT (
fad85c2) - app: Name the database queue in its boot error (
ec100e3) - httpclient: Fail closed when WrapTransport returns nil (
3b3c6f8) - otel: Harden provider boot, shutdown and globals; add db.system.name (
d745922) - vukem: Chain Instrument query hooks through database observers (
2df56d3) - queue: Contain panicking job observers and add AddObserver (
d1f047b) - vukem: Add Instrument job hooks through queue.AddObserver (
88b4aee) - tools: Exempt the sessiontest conformance suite from the coverage gate (
b223724)
Security
- site: Expand cache, scheduler, idempotency, two-factor, redis and mongodb pages (
03a9a83)
0.24.0 - 2026-10-17
Added
- schema: Add named CHECK constraints with Check and DropCheck (
adb5339) - orm: Add row locks with LockForUpdate, ForShare, SkipLocked and NoWait (
9f70c15) - orm: Add CreateMany for batched multi-row inserts (
f420758) - z: Add FieldErrorKey for translatable refine messages (
c4a3e06) - z: Add StringSchema.Preprocess to normalize before checks (
39c6e26) - errs: Add ValidationError.Append without a result (
1bc6fc1) - vukemtest: Add Build to assert that an app fails to build or boot (
c9d0b10) - vukemtest: Add flash assertions for web and Inertia responses (
ff26679) - vukemtest: Add AssertNoFlash and require a present flash value (
d5f7c8b) - vukem: Run the scheduler inside serve (
fab0830) - BREAKING: vukem: Run the scheduler inside serve by default (
0cf2d69) - s3: Bind presigned PUT URLs to content type and length (
74a04f4) - mongo: Add OpenLazy and document MONGO_DATABASE and authSource (
c567860) - redis: Add OpenLazy so the app can boot while Redis is down (
3362b03) - middleware: Add CSPSources and ReportURI to SecureHeadersConfig (
b245387) - vukem: Add DefaultMiddlewareWith with CSP, stateless and bypass options (
f0aac24) - auth: Add a configurable prefix to api tokens (
0c7a622) - webhook: Add hmac, a middleware constructor that fails at boot (
ffc315a) - BREAKING: cli: Translate install:auth messages with en and pt-BR catalogs (
b1b3926) - database: Add the vukem_nosqlite build tag to leave SQLite out (
063cabc) - cli: Add vukem new --minimal and project build tags (
a879c31) - session: Store hashed ids and revoke a user's other sessions (
a79cc72) - auth: Record the session user on login (
9a33939) - cli: End other sessions on password reset and 2fa enable (
be85d8b) - database: Add Tx.AfterCommit hooks (
55ec70e) - app: Add WithJobsFunc so job handlers reach the app (
4dc4cf0) - mail: Add Mailer.SendLater (
d5740c3) - app: Encrypt queued mail payloads and wire Mailer.SendLater (
9640bd9) - vukem: Add ReadyHandler, CheckHealth and per-check health timeouts (
16b84b5) - vukem: Expose Stdout, Stderr and Stdin to app commands (
9b520b7) - BREAKING: vukem: Boot without APP_KEY outside production and fail closed on use (
2b73e60) - vukem: Add lazy cache, session and queue store options (
515e4fc) - middleware: Honour X-Forwarded-Proto only from trusted proxies (
d6fc83f) - vukem: Read TRUSTED_PROXIES and TRUST_FORWARDED_PROTO from the environment (
59b87a4) - cli: Ship a production Dockerfile and .dockerignore in every starter (
48742fb) - web: Read the client IP from a named proxy header (
5290e94) - cli: Build the starter image with the tags in .buildtags (
1584b64) - vukem: Warn at boot when TRUSTED_PROXIES trusts every address (
d6081c3)
Fixed
- orm: Make CreateMany fail closed on unordered ids and pk-only models (
c4a849f) - z: Revalidate Preprocess output and reject a nil func (
ad38233) - BREAKING: z: Honor FieldError path in Custom parser errors (
b3c5a4b) - session: Expire store sessions by the manager clock (
b1d8ac6) - session: Make the store clock race-free and test Prune with it (
83ba81a) - schedule: Bound the wait for running tasks on shutdown (
8d48a39) - admin: Match % and _ literally in list search (
18933b5) - middleware: Refuse wildcard hosts and unsafe schemes in CSPSources (
4ca3a65) - vukem: Refuse SessionBypass with Stateless and document bypass matching (
3c1c541) - social: Record used oauth states in the cache store (
d7b5e3f) - BREAKING: jwt: Require audience and issuer with a remote key set (
c0717df) - social: Stop reflecting the provider error parameter (
e0e36fd) - BREAKING: api: Bound query page and filter value lists (
ca25efb) - BREAKING: api: Scope idempotency keys by the authenticated principal (
035a90f) - auth: Keep the session when the user lookup fails (
9f3cc10) - auth: Treat wrapped no-rows errors from providers as not found (
2eb7730) - BREAKING: jwt: Detect shared key sets by interface and fail guards at boot (
df31f51) - api: Make idempotency scopes unambiguous across guards and prefixes (
a58f81c) - api: Keep default query limits for non-positive values (
9cd965e) - vite: Serve public files from the app while the dev server runs (
c73b941) - cli: Load htmx before the vite entry in starter layouts (
450f18e) - cli: Create the social user before returning it (
7f2b27f) - cli: Let the app's language catalog and English subjects back auth messages (
fec8ced) - session: Never resurrect revoked sessions and harden legacy re-key (
ed1a998) - auth: Namespace the session owner by guard (
5c9170a) - cli: Flash recovery codes before revoking sessions on 2fa enable (
e20e534) - BREAKING: queue: Refuse delays on sync and dispatch after commit without TxPusher (
01d1f13) - cli: Queue the password reset mail in the auth scaffold (
da122af) - database: Keep Tx comparable (
07e5add) - mail: Keep Mailer comparable (
74d7ef5) - database: Isolate AfterCommit hook panics and reject foreign Tx (
6acdbd0) - app: Turn a WithJobsFunc panic into the Queue error (
336f95c) - BREAKING: app: Refuse clear-text queued mail jobs by default (
af48ee4) - vukem: Type the readiness body and log write errors (
82f8a76) - BREAKING: signed,social: Refuse signing keys shorter than 32 bytes (
1308ec2) - vukem: Tolerate a missing APP_KEY only with an explicit development or test APP_ENV (
39e64d5) - cli: Derive scaffold signing keys with app.DeriveKey (
b846bd5) - vukem: Run at most one goroutine per health check (
cd7941c) - vukem: Reject nil lazy stores and detect the memory cache through any option (
eb51232) - upload: Log presign response write errors (
4338d07) - vukem: Bracket IPv6 hosts in the listen address (
0c9f8c2) - web: Return client IPs from headers in canonical form (
113d0ff) - middleware: Require one X-Forwarded-Proto line and trusted proxies (
50ca1a4)
Security
- api: State that op.security does not authenticate the route (
7cd989c)
0.23.0 - 2026-10-17
Added
- webhook: Add signed outgoing webhooks with retries and delivery log (
6706466) - postgres: Add pgtest helper for per-test databases (
c7d563c) - vukem: Add key:generate app command (
95d074a) - imaging: Add contrib/imaging for safe image thumbnails (
ddd6588) - ratelimit: Add a fixed-window limiter over a shared counter (
5da8705) - app: Choose the rate limit store with RATE_LIMIT_STORE (
a3d7737) - cli: Build scaffold rate limiters from RATE_LIMIT_STORE (
9ee7034) - app: Prune expired database cache entries hourly (
a1f9c0d) - app: Find the cache pruner through wrapped stores (
8c1bd87) - site: Add last-updated dates and a pt-BR locale (
e06cde3)
Changed
- cache: Increment database counters in one statement (
7a4814e) - site: Remove the docs version switcher (
9ebc88d)
Fixed
- webhook: Harden outgoing deliveries after review (
91fd77b) - postgres: Make pgtest cleanup robust to reconnecting pools (
1493ae4) - vukem: Send key:generate diagnostics to stderr (
7ceadeb) - imaging: Apply review findings to thumbnails (
2e33e83) - cache: Make database Increment atomic across connections (
96eff2c) - ratelimit: Hash every window key and validate limiter names (
162b6fc) - app: Refuse RATE_LIMIT_STORE=cache over the memory cache (
e977575)
Security
- webhook: Document outgoing webhooks and their security guarantees (
eb9127b) - app: Check unknown RATE_LIMIT_STORE values as a security default (
6e05120) - ratelimit: Document shared rate limits and RATE_LIMIT_STORE (
2a790ca)
0.22.0 - 2026-10-17
Added
- auth: Add owner-scoped Tokens.RevokeFor and Tokens.List (
08e001d) - webhook: Add Standard Webhooks verifier and event dedupe (
bc69938) - inertia: Share locale and translations with I18n middleware (
9813474) - upload: Cap image dimensions to stop decompression bombs (
d1bb6b8) - auth: Redirect unverified browsers to the verification notice (
230c19c) - cli: Detect the JavaScript package manager from the lockfile (
317867f) - cli: Tailwind-only Inertia starters with class-based dark mode (
d7f908d)
Fixed
- queue: Settle database jobs only while holding the reservation (
d9655c2) - cache: Store database cache values as BYTEA on Postgres (
64c3d20) - session: Do not create a session for read-only visits (
e08a266) - vukemtest: Send the app's asset version from Inertia("") (
b0c348d) - vukemtest: Keep GetJSON's Accept header to that request (
54b6716) - cli: Use a real PNG header in the starter upload test (
50994e0) - cli: Embed starter resources when APP_ENV=production (
c5c6d54) - cli: Render the 2FA QR code as an image, not raw HTML (
61b3696)
Security
- api: Refuse idempotency keys with an empty caller scope (
9963ad9) - session: Prune expired database sessions hourly (
043c3a4) - vukemtest: Add AssertHeaderContains and AssertHeaderMissing (
fa713e9)
0.21.1 - 2026-10-17
Added
- logging: Aggregate repeated identical errors (
023820b) - otel: Add trace and span ids to log records (
48a79fd)
Fixed
- crypt: Bound integer arithmetic flagged by CodeQL (
db3662c)
Security
- cli: Pin govulncheck as a go tool in new apps (
a56c203)
0.21.0 - 2026-10-17
Added
- site: Version the docs per minor with a header switcher (
77ffd25) - examples: Add the JSON API example with typed task routes (
b40242e) - examples: Add the SaaS example with Inertia, auth and billing (
27129b8)
Changed
- BREAKING: dbtest: Unexport the conformance fixture models (
0e2650a)
Deprecated
- orm: Rename create hook interfaces to BeforeCreator and AfterCreator (
acdab3e) - mail: Rename WithAttachments to Attachable (
3fb8926)
Fixed
- web: Reject same-host redirects to scheme-relative paths (
56dd98e) - graphql: Bound introspection selections (
f04dd80) - graphql: Mask 4xx errors that wrap a cause (
c3aa7e4) - web: Read every X-Forwarded-For line in Ctx.IP (
8188ae4) - middleware: Parse the media type before treating a body as JSON (
c5cb0d6) - httpclient: Block IPv6 ranges that embed IPv4 addresses (
4254b55) - grpc: Hide the text of server-fault connect errors (
30e98a9) - BREAKING: app: Refuse to boot with an unknown APP_ENV (
4824717) - BREAKING: ratelimit: Key by client IP unless a verified token is available (
994276b) - cli: Require the second factor for generated API tokens (
c34e04e) - cli: Normalize login throttle keys and revoke tokens on reset (
1ef3674) - upload: Verify only keys that Presign could have issued (
31f6178) - upload: Strip format characters from sanitized file names (
5077f1c) - upload: Count nameless multipart parts toward the limits (
5897d11) - middleware: Handle an empty path in the maintenance bypass check (
95a19ba) - mail: Reject attachment content types with line breaks (
6396868) - auth: Consume remember-me tokens atomically (
9afea58)
Security
- web: Add package overviews and examples for the http core (
f2d6475) - repo: Publish the 1.x stability policy, release cadence and upgrade guides (
e317f16) - repo: Rename the agent security rules to secure-coding.md (
3d4003b) - BREAKING: hash: Replace DefaultArgon2 var with DefaultArgon2Params (
0405c29) - repo: Add fuzz targets for untrusted-input parsers (
231f5e9) - web: Check the cleaned redirect path in SafeRedirect (
bdf0fbe) - storage: Hide dot directories and sandbox served files (
88da87a) - repo: Name the test or mechanism behind every security default (
e31231c) - security: Record the B.5.2 security review (
8ebefd8)
0.20.1 - 2026-10-17
Changed
- web: Allocate the response writer inside Ctx and add WriteString (
aa08aba) - orm: Reuse scan buffers across rows and presize limited Get (
b1b628b)
Fixed
- release: Ignore driver and contrib tags when finding the previous release (
c71f5fe)
Security
- docs: Document release signing, sboms and verification (
8b8c995)
0.20.0 - 2026-10-17
Added
- graphql: Add the contrib/graphql module with lexer and parser (
fc7fa9d) - graphql: Add schemas, validation, execution and introspection (
85a1b9a) - graphql: Add the batching loader with ORM helpers (
68a6a36) - cli: Add install:billing for Stripe subscriptions (
a6295fd) - graphql: Add subscriptions over graphql-ws and SSE (
fbf13ae) - app: Serve http/2 cleartext outside production (
5724c54) - grpc: Add the contrib/grpc module on connect-go (
3bfc1d2) - cli: Add make:proto and codegen:rpc (
30147cb) - admin: Add the admin panel package (
28a8c8c) - cli: Add install:admin and make:admin-resource (
ba460a5)
Changed
- BREAKING: grpc: Name the production reflection opt-out insecure (
724a841)
Fixed
- session: Flush through writers that only implement Unwrap (
bfae772)
Security
- graphql: Serve GraphQL over HTTP with persisted queries (
08527d5) - graphql: Document the contrib/graphql module (
e966941)
0.19.0 - 2026-10-16
Added
- social: Add Apple, LinkedIn and X sign-in (
79df84d) - stripe: Add the Stripe API client and webhook module (
fc3b71b) - s3: Add the S3 storage driver module (
4f8294a) - database: Add the mysql dialect and a url-to-dsn driver hook (
6ac1996) - schema: Generate mysql ddl and drop tables on mysql (
a543b86) - orm: Support the mysql dialect in inserts and queries (
87c0e0a) - queue: Run the database queue on mysql (
2a1f0ff) - cache: Run the database cache store on mysql (
7729bf4) - session: Add a mysql option to the sql session store (
9519aee) - boost: Read the database schema on mysql (
3c431da) - mysql: Add the drivers/mysql module for mysql 8 and mariadb 11 (
6fd67f0) - openapi: Generate typed TypeScript and Go API clients (
7c36729) - cli: Add the codegen:client app command (
d7e4ad4) - web: Add context session helpers and Partial for components (
2b600b5) - vite: Carry the Vite instance in the request context (
2dd3849) - cli: Add the templ starter (
be88bcd) - database: Add a query observer hook (
9d47072) - queue: Add a job observer hook (
3caf7c2) - events: Add a dispatch observer hook (
8a4952a) - devtools: Add the /_vukem development dashboard (
ea5bb39) - broadcast: Add channel broadcasting with an SSE transport (
c9d297f) - websocket: Serve the broadcast protocol over WebSockets (
e3319f1) - web: Let a route body limit replace the router default (
3b7b0c0) - BREAKING: middleware: Read _method from the query for multipart forms (
2aee55f) - z: Add z.File for uploaded files (
eee6e80) - cli: Add an upload demo with progress to the HTMX starter (
9f7966d) - cli: Add install:auth --2fa for TOTP two-factor authentication (
443cbfa)
Fixed
- cli: Drop the html/template upload demo from the templ starter (
cd40371)
Security
- websocket: Add the WebSocket driver module (
02b4f59) - upload: Add streaming, resumable and direct uploads (
c201582)
0.18.0 - 2026-10-16
Added
- vite: Add the vite package and view tag functions (
a118c48) - inertia: Add the Inertia v3 core adapter (
b7eb1cd) - cli: Add Vukem Boost for coding agents (
979619a) - inertia: Add prop types and partial reload filtering (
bc79c40) - inertia: Add history encryption, flash, prefetch and precognition (
bfde089) - inertia: Add the SSR client with client-side fallback (
0b1de61) - cli: Ship Vite and Tailwind v4 in the HTMX starter and prompt for the stack (
810e832) - vukemtest: Add WithInertia and Inertia assertions (
c850fdb) - cli: Add codegen:routes for typed frontend routes (
28ed3b5) - cli: Add the Inertia React starter and install:inertia (
9e671dc) - cli: Add Inertia auth pages to install:auth (
907a4cc) - web: Add a youch-style debug error page (
a6499ea) - sse: Add server-sent event streams and a topic hub (
441b456) - cli: Add maintenance mode with vukem down and up (
684a942) - auth: Add the JWT guard with JWKS rotation and refresh tokens (
55fdb77) - crypt: Add encryption with key rotation and encrypted cookies (
2ce4c00) - orm: Add the Encrypted column type (
2f1d6df) - z: Record message keys and localize issues (
8b2a353) - web: Localize validation issues from the request context (
334454d) - i18n: Add JSON catalogs, plurals and locale resolution (
b85a9ad) - view: Add the t and locale template functions (
5818c2e) - i18n: Wire translations into the app (
b9a736e) - cli: Add the Inertia Vue starter (
f35e398) - auth: Add the TOTP package with a stdlib QR encoder (
a117db6) - cli: Add the Inertia Svelte starter (
051cfbe)
Fixed
- site: Align the docs TOC with the header and drop the pre-1.0 callouts (
d3d0332)
Security
- otel: Add the OpenTelemetry driver module (
ea81f06)
0.17.0 - 2026-10-16
Added
- site: Add the Vukem icon, align the header and open on the docs (
0eb9623) - redis: Add the Redis driver module (
8691588) - mongo: Add the MongoDB driver module (
7a4d0f3)
Security
- repo: Rewrite the README after the Laravel layout (
90360c0)
0.16.0 - 2026-10-16
Added
- queue: Add typed jobs, workers and the sync and memory drivers (
405c978) - queue: Add the database driver, DispatchTx and failed-job commands (
91be143) - queue: Add make:job, queue.Fake, queued mail and queued listeners (
305e9ca) - schedule: Add the scheduler with cron expressions and overlap locks (
e42e3d8)
0.15.0 - 2026-10-16
Added
- api: Add typed handlers with api.Register (
36b8638) - openapi: Generate OpenAPI 3.1 documents from the router (
7334aa8) - vukemtest: Assert responses match the OpenAPI document (
186c1e0) - openapi: Export JSON Schema and generate TypeScript and Zod types (
e9b2c71) - api: Add the Idempotency-Key middleware (
f11fdd9) - apidocs: Serve a Scalar API reference for the OpenAPI document (
e94f6fa)
0.14.0 - 2026-10-16
Added
- examples: Add the blog example and auth.Optional (
5e13d26)
Security
- site: Document every alpha feature (
a1e5d62)
0.13.0 - 2026-10-16
Security
- security: Add SSRF-safe client, webhook signatures and security events (
393b165)
0.12.0 - 2026-10-16
Added
- logging: Add the Telegram slog handler (
8fc0ad3)
0.11.0 - 2026-10-16
Added
- subsystems: Add cache, file storage and typed events (
b0dceeb)
0.10.0 - 2026-10-16
Added
- cli: Add the JSON API starter and install:api (
253f10f)
0.9.0 - 2026-10-16
Added
- cli: Add install:auth --social with account linking (
120ea0f)
0.8.0 - 2026-10-16
Added
- cli: Add install:auth with registration, verification and password resets (
e68047e)
0.7.0 - 2026-10-16
Added
- mail: Add mailables with SMTP, Resend, log and array transports (
052df72)
0.6.0 - 2026-10-16
Added
- authz: Add gates and policies with fail-closed authorization (
a84543d)
0.5.0 - 2026-10-16
Added
- auth: Add hashers, session and token guards, and auth middleware (
4a5a95f) - social: Add OAuth2/OIDC social login with PKCE (
d60638f)
0.4.0 - 2026-10-16
Added
- orm: Add relations, factories, seeders and database rules (
0ca2389)
0.3.0 - 2026-10-16
Added
- postgres: Add the PostgreSQL driver module and conformance suite (
8283d33)
Changed
- BREAKING: Rename the framework to Vukem (
f7e19e0)
0.2.0 - 2026-10-16
Added
- api: Add REST toolkit with pagination, query conventions and rate limiting (
6e779bd)
0.1.1 - 2026-10-16
Added
- cli: Answer JSON from the starter's post controller (
fc2cf50)
0.1.0 - 2026-10-16
Changed
- Maintenance release (no user-facing changes).
0.0.12 - 2026-10-16
Added
- BREAKING: cli: Add vukem new with the HTMX + SQLite starter (
92d44b2)
0.0.11 - 2026-10-16
Added
- cli: Add the vukem command with generators, serve, build and delegation (
0abc848)
0.0.10 - 2026-10-16
Added
- vukemtest: Add testing toolkit with fluent client and DB assertions (
c3a9400)
0.0.9 - 2026-10-16
Added
- view: Add html/template views, htmx 4 helpers and fragments (
e45d36e)
0.0.8 - 2026-10-16
Added
- orm: Add database connections, generic query builder and migrations (
2d17f79)
0.0.7 - 2026-10-16
Added
- session: Add sessions, flash, old input and csrf protection (
a62538f)
0.0.6 - 2026-10-16
Added
- z: Add zod-style typed schemas and web parsing (
23b1438) - site: Add documentation site with Next.js 16, Tailwind v4 and Base UI (
aaa45f6)
Fixed
- deps: Require go1.27.2 toolchain for standard library security fixes (
bcab5a8)
0.0.5 - 2026-10-16
Added
- middleware: Add built-in middleware, app HTTP wiring and commands (
2af9fd4)
0.0.4 - 2026-10-16
Added
- router: Add ServeMux router, web.Ctx, errs and problem details (
9ba13bd)
0.0.3 - 2026-10-16
Added
- app: Add App, provider lifecycle, runners and HTTP server (
255eee4)
0.0.2 - 2026-10-16
Added
- config: Add .env parser, typed struct loading, secrets and app key (
736332a)
0.0.1 - 2026-10-16
Project foundation. No framework code yet; see PLAN.md for the roadmap.
Added
- Research on Laravel 13, AdonisJS v7, Goravel, the Go ecosystem, Inertia v3 and htmx 4 (
docs/golang-web-search.md). - Design decision log (
docs/brainstorming.md) and design docs: architecture, configuration, HTTP, REST APIs, security (OWASP Top 10:2025), databases, authentication, frontend, CLI, subsystems, testing and tooling. - Phased plan (
PLAN.md): Prototype, ALPHA, BETA and 1.0 Stable, with verifiable tasks and exit criteria. - Conventional Commits validator (
internal/tools/commitlint) used by thecommit-msghook. - Tooling: golangci-lint v2 (gofumpt, gci, golines, depguard), markdownlint-cli2, lefthook hooks, Taskfile, git-cliff,
.editorconfigand.gitattributes. - GitHub workflows (CI, PR title, CodeQL), Dependabot, issue forms and PR template.
- README, MIT license, CONTRIBUTING, SECURITY and CODE_OF_CONDUCT.
- Agent configuration:
AGENTS.md,CLAUDE.md, path-scoped.claude/rules/, Go skills and project settings.