Skip to content

chore: bump up void to v1.7.0 - #277

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/void
Open

renovate[bot] wants to merge 1 commit into
mainfrom
renovate/void

Conversation

@renovate

@renovate renovate Bot commented Nov 8, 2026 •

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
@void/md (source) 1.4.0 → 1.7.0 age confidence
@void/react (source) 1.4.0 → 1.7.0 age confidence
void (source) 1.4.0 → 1.7.0 age confidence

Release Notes

voidzero-dev/void (@​void/md)

v1.7.0

Compare Source

  • Added rich Pages data serialization. Date, Map, Set, bigint, and other supported values now keep their types through server rendering, hydration, navigation, and deferred loading.
  • Added bracket patterns such as /users/[id] and /files/[...path] to typed routing APIs. Existing colon patterns remain supported.
  • Added route-pattern inference to useParams(), including checks for page names and parameter names.
  • Extended routing.typedRoutes checks to redirects, island forms, ISR revalidation paths, and SSE and live stream client URLs.
  • Added routing.trailingSlash for Pages URLs ending in / and directory-style prerender output.
  • Added automatic types for custom Cloudflare bindings declared in void.config.ts.
  • Added getAuth(c) from void/auth to access the request’s Better Auth instance, including plugin APIs.
  • Added void deploy --skip-migrations for deployments where database migrations run separately.
  • Added support for Nitro 3 prereleases while retaining Nitro 2 compatibility.
  • Added support for custom ASSETS fetchers in Node.js, Bun, and Deno servers, including apps packaged as single executables.
  • Fixed React form status, errors, and resets during overlapping submissions, preserving edits made while a submission is in flight.
  • Fixed body validation for multipart and URL-encoded forms, including nested fields and file uploads.
  • Fixed prerender URLs containing multiple route parameters and catch-all segments.
  • Fixed pagination and filter links being marked active when their query parameters don’t match.
  • Fixed Pages response caching by preserving headers that distinguish HTML from page-data responses.
  • Fixed local .env values being included in native framework Worker bundles.
  • Fixed server values from void/env being unavailable in cron and queue jobs, and env.ts validation being removed from apps marked as having no side effects.
  • Fixed SvelteKit cron and queue job bundles being uploaded as public assets.
  • Fixed Worker Loader bindings being dropped when deploying with existing secrets.
  • Fixed vinext middleware being bypassed for public assets and not being detected on case-insensitive filesystems.
  • Fixed shared asset caches bypassing worker-first routing on Void platforms.
  • Fixed deployments of Workers without a public readiness URL.
  • Improved Cloudflare deployment errors and recovery when updating Worker triggers fails.
  • Fixed AI endpoints ignoring disabled platform capabilities.

Thanks to @​0froq, @​Dazzanova, @​kotarotaniguchi0523, @​L4Ph, @​magurotuna, @​morinokami, @​niteshseram, @​Saeris, and @​yangshun for their contributions!

Rich Pages Data

Return values directly from loaders without converting dates, sets, or big integers yourself:

import { defineHandler } from 'void';

export const loader = defineHandler(() => ({
  publishedAt: new Date(),
  tags: new Set(['void', 'vite']),
  views: 42n,
}));

Loaders and props

Typed Routing

Route patterns can now match your filenames directly. For a page at pages/users/[id].tsx, .vue, or .svelte. Bracket patterns also work with typed fetch(), WebSocket connections, page actions, and useParams():

import { routeUrl } from 'void/routes';

const profile = routeUrl('/users/[id]', {
  params: { id: 42 },
  query: { tab: 'activity' },
});
// /users/42?tab=activity

Typed routing · Typed page params

Trailing-Slash Pages

Enable trailing slashes and directory-style output for hosts such as GitHub Pages. A page at /posts/hello/ is written to posts/hello/index.html:

import { defineConfig } from 'void/config';

export default defineConfig({
  output: 'static',
  routing: { trailingSlash: true },
});

Trailing slashes and directory indexes

More Control over Deployments

Skip application and authentication SQL migrations when they run in a separate release step:

void deploy --skip-migrations

Deployment options

Upgrade Guide
  • Typed fetch() calls to non-GET endpoints now require an explicit method, such as { method: 'POST' }.
  • With routing.typedRoutes enabled, redirects, island forms, ISR revalidation paths, and stream URLs receive additional checks. Use routeUrl() for internal URLs with dynamic parameters.
  • Pages loader values such as dates now arrive as their original types rather than JSON strings. Update code that expects their JSON representation. Already-open tabs automatically reload on their next navigation when the page-data format changes.

v1.6.2

Compare Source

  • Added isVoidActionError() to recognize action errors at any status, including thrown 401, 403, and 5xx errors. Available from all four framework adapters.
  • Fixed overlapping routes choosing the wrong handler. Pages, API routes, and WebSocket routes now consistently prefer more specific paths.
  • Fixed c.redirect() unintentionally forwarding incoming query parameters to its destination.
  • Fixed unnecessary static page-data requests during development and for pages with prerender = false, avoiding 404s and extra round trips.
  • Fixed Solid's useParams() returning stale parameters after client-side navigation.
  • Fixed Better Auth OAuth state not being shared correctly in local development.
  • Fixed framework _headers files being dropped on native Cloudflare deployments that preserve existing secrets.
  • Fixed configuration errors and diagnostics referring to void.json in projects using void.config.ts.

Thanks to @​0froq, @​dvkam, @​karthickeyan-dev, @​morinokami, @​niteshseram, @​yangshun, and @​yujiym for their contributions!

Recognizing Action Errors

Use isVoidActionError() in error handling to distinguish failed actions from other errors and read their status and message:

import { isVoidActionError } from '@void/react';

function describeError(error: unknown) {
  if (isVoidActionError(error)) {
    if (error.status === 401) return 'Please sign in again.';
    return error.message;
  }
  return 'Something went wrong.';
}

Action error handling

v1.6.1

Compare Source

  • Fixed void prepare failing in fresh projects with authentication when tsconfig.json extends .void/tsconfig.json.

v1.6.0

Compare Source

  • Added routing.typedRoutes to check URL strings in links, navigation, and rewrites. Enabled by default in new Pages apps.
  • Added automatic aria-current and data-void-active indicators to Link, with activeMatch="prefix" for nested pages.
  • Added data-void-pending to Link while its destination is loading.
  • Added prefetch.defaultStrategy to configure a default prefetch strategy for every Link.
  • Improved Link prefetching to skip external URLs, respect data saver and 2G connections, and wait 300 ms before prefetching visible links.
  • Added { resolveOn: 'data' } to React router.visit() and router.refresh() to avoid deadlocks when awaiting navigation inside Actions or transitions.
  • Added a threading option to sendEmail() so replies sent later can stay in the same conversation.
  • Added rotating refresh tokens for connected apps, allowing access to be renewed without hourly sign-in prompts.
  • Added --runtime-logs minimal for self-hosted platforms to omit request URLs and log and exception messages from runtime telemetry.
  • Improved native Cloudflare deploys to serve static files and prerendered pages without Worker invocations when no server processing is needed.
  • Fixed page middleware breaking loader and action responses and dropping validator types.
  • Fixed query-only and relative navigation URLs resolving against the site root instead of the current page.
  • Fixed Vue Link types rejecting standard attributes and listeners such as target, download, and @click.
  • Fixed Svelte useForm() clearing errors written directly in an input handler.
  • Fixed action errors showing a generic status instead of the message from a plain-text 4xx response.
  • Fixed forms and actions scrolling to the top after updating the current page in place.
  • Fixed custom response headers in local development and native deploys without overriding private authentication cache policy.
  • Fixed missing Sandbox and Container Durable Object bindings in the dev server.
  • Fixed Markdown client scripts missing from production builds when no .island. file was present.
  • Fixed invalid Markdown frontmatter stopping the dev server. Errors now identify the affected file, and other pages keep working.
  • Fixed platform setup requiring DNS Edit permission when using an existing compatible DNS record.
  • Fixed resumed platform installations ignoring replacement runtime tokens and leaving already deployed Workers with old credentials.

Thanks to @​0froq, @​Dazzanova, @​dvkam, @​iPLAYCAFE-dev, @​karthickeyan-dev, @​morinokami, @​serkodev, @​sglyon, @​ubugeeei, and @​yangshun for their contributions!

New Features
Typed Routes

New Pages apps enable typed route URLs automatically. To enable them in an existing app:

// void.config.ts
import { defineConfig } from 'void/config';

export default defineConfig({
  routing: { typedRoutes: true },
});

TypeScript then checks URL strings passed to Link, router methods, and c.rewrite() against your app's routes.

Checked URL strings

Active and Pending Links

Style the current page and a navigation in progress with CSS:

a[data-void-active] {
  font-weight: 600;
}

a[data-void-pending] {
  opacity: 0.6;
  transition: opacity 0.15s 0.1s;
}

Use activeMatch="prefix" to keep a section's link active on nested pages:

<Link href="/users" activeMatch="prefix">Users</Link>

Active links · Pending links

Prefetch Defaults

Configure prefetching once in your framework adapter:

voidReact({ prefetch: { defaultStrategy: 'hover' } });

The same option works with voidVue, voidSvelte, and voidSolid. Individual links can override it:

<Link href="/reports" prefetch="visible">Reports</Link>
<Link href="/exports" prefetch={false}>Exports</Link>

Visible links wait 300 ms before prefetching. Automatic prefetching skips when the browser reports data saver or a 2G connection.

Prefetching

Awaiting Navigation in React Actions

Pass resolveOn: 'data' when awaiting navigation inside a React Action or transition:

startTransition(async () => {
  await saveUser();
  await router.refresh({ resolveOn: 'data' });
});

This lets the Action finish once page data is ready, allowing React to commit the update.

React navigation completion

Email Threading

Save an incoming message's ID and use it when sending a reply later, such as from a queue job:

await sendEmail({
  to: ticket.from,
  subject: `Re: ${ticket.subject}`,
  text: 'We fixed it.',
  threading: { inReplyTo: ticket.messageId },
});

Reply later

Connected-App Refresh Tokens

Connected apps can renew access by posting grant_type=refresh_token and their refresh token to /oauth/token, using HTTP Basic client authentication.

Connected apps

Minimal Runtime Logs

Choose minimal logging when installing or upgrading a self-hosted platform:

void platform install --runtime-logs minimal
void platform upgrade --runtime-logs minimal

Runtime logs

Upgrade Guide

Form types are stricter in this release:

  • Form status fields are read-only, and form.data and form.errors cannot be replaced. In React and Solid, update fields through the form methods. Vue and Svelte continue to support editing data and errors in place.
  • Island form errors are now typed as string | undefined. Check that an error exists before using it.
  • Svelte useIslandForm() now infers field types from its defaults. Annotate defaults that need a wider type, such as null as File | null.

v1.5.0

Compare Source

  • Added routeUrl() from void/routes to build URLs with autocomplete and type checking for route patterns and required parameters.
  • Added typed destination objects to router.visit(), router.prefetch(), router.flush(), and c.rewrite().
  • Added logger.child(fields) to attach shared fields to log entries, with support for nested child loggers and per-call overrides.
  • Improved Pages navigation by loading page components and layouts in parallel with page data.
  • Upgraded to Cloudflare Vite plugin 2.0 beta and updated Cloudflare tooling.
  • Fixed React action() hanging when awaited inside a transition, useActionState, or a form action.
  • Fixed islands imported only by Markdown pages failing to hydrate in React and Vue.
  • Fixed withValidator({ query }) dropping repeated query parameters. Repeated values are now preserved as arrays.
  • Fixed queue handler errors being swallowed instead of logged.
  • Fixed void secret sync --platform cloudflare reporting success without storing secrets.
  • Added --yes to void secret sync for scripts and CI. Cancelled secret commands now exit with a non-zero status.
  • Improved Cloudflare deployment error reporting.

Thanks to @​0froq, @​Dazzanova, @​morinokami, and @​yangshun for their contributions!

Upgrade Guide

Please run void migrate to add the .cloudflare build folder to your .gitignore. If you are using void secret sync on CI, please add the --yes flag.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the dependencies label Nov 8, 2026
@codspeed

codspeed Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

Merging this PR will not alter performance

1 warning

⚠️ 7 benchmarks are dominated by system calls

System calls cannot be simulated consistently and are left out of the measure. The reported value understates the real cost. Switch to the Walltime instrument to measure them.

Learn more about system calls

See affected benchmarks

✅ 7 untouched benchmarks
⏩ 7 skipped benchmarks1


Comparing renovate/void (d87c359) with main (39dbf8d)

Open in CodSpeed

Footnotes

  1. 7 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩

@renovate renovate Bot changed the title chore: bump up void to v1.6.2 chore: bump up void to v1.7.0 Nov 9, 2026
@renovate

renovate Bot commented Nov 9, 2026

Copy link
Copy Markdown
Contributor Author

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: yarn.lock
! Corepack is about to download https://repo.yarnpkg.com/4.18.1/packages/yarnpkg-cli/bin/yarn.js

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants