Repository navigation
v1.8.0
·
42 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
- Added
_not-foundand_errorPages components to show errors inside your layouts, with support for nested boundaries across all four framework adapters. - Added
throwOnError: falsetouseForm()to keep authentication and server errors inline without losing form input. - Added a
sessionoption tocreateDb()for D1 reads that need to start on the primary. - Added per-project AI Gateway logging controls, including metadata-only logging that omits prompt and response bodies.
- Added
ActionResultandgetValidationErrors()exports to all framework adapters. - Added Drizzle’s
SQL,SQLWrapper,AnyColumn, andBatchItemtype exports tovoid/db. - Added query parameter support to typed named action URLs.
- Upgraded to Vite+ 1.6, including newly created projects, and updated Cloudflare tooling.
- Fixed actions dropping the current page’s query parameters and changing the URL, scroll position, or history when updating the page in place.
- Fixed Vue, Svelte, and Solid forms losing edits made during submission and older submissions overwriting newer form state.
- Fixed React navigation losing its destination and method while a transition is pending.
- Fixed D1 authentication reads seeing stale data from replicas.
- Fixed defaults and automatic
updatedAtvalues when writing to generated Better Auth tables through Drizzle. - Fixed async
env.tsvalidators failing in app requests and background jobs. - Fixed Vue pages with inline typed props failing to receive their props correctly.
- Fixed app tests failing because Void tried to start a Worker or run migrations under Vitest.
- Fixed intentional Worker 404 responses being replaced by static assets on native Cloudflare deployments.
- Fixed Cloudflare preview and deployment failures for static apps with overlapping server route patterns.
- Fixed a race between
void secret putand the first Cloudflare deployment. - Improved diagnostics for queue options and Pages settings that cannot be inferred.
- Fixed new projects’
.gitignoreencouraging.env.examplefiles that Void does not support. - Added a testing guide and an
llms.txtindex for the documentation.
Thanks to @dvkam, @jong-kyung, @karthickeyan-dev, @morinokami, @ubugeeei, and @yangshun for their contributions!
Not Found & Error Pages
Add _not-found and _error components to pages/ or a subdirectory to show errors inside your layouts. Both receive an error prop with status and message. A loader can show the nearest not-found component with c.notFound():
import { defineHandler } from 'void';
export const loader = defineHandler((c) => c.notFound());Inline Form Errors
Keep authentication and server errors in form.error, with the form and its input still visible:
import { useForm } from '@void/react'; // or "@void/vue", "@void/svelte", "@void/solid"
const form = useForm(
'/users',
{ name: '', email: '' },
{ throwOnError: false },
);Fresh D1 Reads
Use session: 'first-primary' when a request needs the latest primary data while keeping Drizzle’s schema and query types:
import { users } from '@schema';
import { env } from 'cloudflare:workers';
import { defineHandler } from 'void';
import { createDb } from 'void/db';
export const GET = defineHandler(async () => {
const db = createDb(env.DB, { session: 'first-primary' });
return db.select().from(users).all();
});Per-Project AI Logging
Platform administrators can keep prompt and response bodies out of a project’s AI Gateway logs while retaining request metadata:
void platform project ai-logging <project-id> metadata