v2.3.0
What's Changed
- docs: comprehensive documentation audit, fixes, and website improvements by @bartlomieju in https://github.com/denoland/fresh/pull/3712
- docs: fix markdown docs by @fry69 in https://github.com/denoland/fresh/pull/3459
- docs: fix misleading main.tsx filenames by @fry69 in https://github.com/denoland/fresh/pull/3477
- feat: add _freshIndicator support for partial form submits by @bartlomieju in https://github.com/denoland/fresh/pull/3753
- feat: add first-class WebSocket support via ctx.upgrade() and app.ws() by @bartlomieju in https://github.com/denoland/fresh/pull/3774
- feat: add IP filter middleware by @Octo8080X in https://github.com/denoland/fresh/pull/3035
- feat: add nonce support for inline style and script tags in CSP by @bartlomieju in https://github.com/denoland/fresh/pull/3709
- feat: add trustProxy option to respect X-Forwarded-* headers by @bartlomieju in https://github.com/denoland/fresh/pull/3757
- feat: add View Transitions API support for client-side navigation by @bartlomieju in https://github.com/denoland/fresh/pull/3708
- feat: allow passing Temporal objects to islands by @bartlomieju in https://github.com/denoland/fresh/pull/3701
- feat: inject traceparent meta tag when OpenTelemetry is active by @bartlomieju in https://github.com/denoland/fresh/pull/3729
- feat: support
deno createfor project initialization by @bartlomieju in https://github.com/denoland/fresh/pull/3706 - feat: support multiple staticDir entries by @bartlomieju in https://github.com/denoland/fresh/pull/3759
- feat:Actually ship no JS by default by @Ionaru in https://github.com/denoland/fresh/pull/3696
- fix: active links consider query params and respect existing aria-current by @bartlomieju in https://github.com/denoland/fresh/pull/3755
- fix: add @types/babel__core to vite project template by @bartlomieju in https://github.com/denoland/fresh/pull/3723
- fix: add cache-bust query param to Vite asset URLs for immutable caching by @bartlomieju in https://github.com/denoland/fresh/pull/3761
- fix: append data script tags to head during partial navigation by @bartlomieju in https://github.com/denoland/fresh/pull/3720
- fix: apply basePath correctly in dev mode for root index by @yukitaka in https://github.com/denoland/fresh/pull/3219
- fix: apply layout to index route with programmatic routing by @bartlomieju in https://github.com/denoland/fresh/pull/3725
- fix: architecture diagram unreadable in dark mode by @bartlomieju in https://github.com/denoland/fresh/pull/3752
- fix: CSP user directives now override defaults instead of duplicating by @bartlomieju in https://github.com/denoland/fresh/pull/3724
- fix: CSS modules not working in _app/_layout/_error and across routes in dev by @bartlomieju in https://github.com/denoland/fresh/pull/3764
- fix: dev server intercepts Vite URLs when basePath is configured by @bartlomieju in https://github.com/denoland/fresh/pull/3730
- fix: don't intercept forms without explicit f-partial inside f-client-nav by @bartlomieju in https://github.com/denoland/fresh/pull/3722
- fix: fall back to full navigation when partial redirect has no partials by @bartlomieju in https://github.com/denoland/fresh/pull/3716
- fix: handle commas in static file paths by @SebF33 in https://github.com/denoland/fresh/pull/3770
- fix: ignore temp files in Vite watcher to prevent dev server crash by @bartlomieju in https://github.com/denoland/fresh/pull/3763
- fix: improve CJS-to-ESM transform for better npm compatibility by @bartlomieju in https://github.com/denoland/fresh/pull/3697
- fix: improve Deno module resolution in Vite plugin by @bartlomieju in https://github.com/denoland/fresh/pull/3734
- fix: improve error message for missing exports in file routes by @bartlomieju in https://github.com/denoland/fresh/pull/3718
- fix: improve update tool output for Fresh 2 projects by @bartlomieju in https://github.com/denoland/fresh/pull/3754
- fix: in sortRoutePaths: sort files alphabetically by @will-weiss in https://github.com/denoland/fresh/pull/3769
- fix: let node_modules asset requests pass through in dev mode by @bartlomieju in https://github.com/denoland/fresh/pull/3728
- fix: make
<Head>work in client by @marvinhagemeister in https://github.com/denoland/fresh/pull/3252 - fix: middleware not matching routes with optional parameters in fs routing by @bartlomieju in https://github.com/denoland/fresh/pull/3726
- fix: normalize Windows paths in generated snapshot and server entry by @bartlomieju in https://github.com/denoland/fresh/pull/3727
- fix: preserve partial search param through redirects by @bartlomieju in https://github.com/denoland/fresh/pull/3715
- fix: prevent 404 for routes consisting solely of an optional parameter by @ghalle in https://github.com/denoland/fresh/pull/2798
- fix: register files generated by Vite plugins in static file cache by @fry69 in https://github.com/denoland/fresh/pull/3534
- fix: resolve server entry filename from bundle chunks by @bartlomieju in https://github.com/denoland/fresh/pull/3719
- fix: trailing slash mismatch causes 404 for static routes by @bartlomieju in https://github.com/denoland/fresh/pull/3721
- fix: use deno run for init instead of deno create before 2.3.0 by @bartlomieju in https://github.com/denoland/fresh/pull/3746
- fix: warn instead of crash on invalid HTML nesting around islands by @bartlomieju in https://github.com/denoland/fresh/pull/3762
- fix: warn when Partial with append/prepend mode is missing key prop by @bartlomieju in https://github.com/denoland/fresh/pull/3738
- perf: pre-compile middleware chains at build time by @marvinhagemeister in https://github.com/denoland/fresh/pull/3104
- refactor: add integrationTest() helper to reduce test boilerplate by @bartlomieju in https://github.com/denoland/fresh/pull/3711
- Remove
readonlyfromFreshRequest.reqby @dahlia in https://github.com/denoland/fresh/pull/2751
New Contributors
- @yukitaka made their first contribution in https://github.com/denoland/fresh/pull/3219
- @ghalle made their first contribution in https://github.com/denoland/fresh/pull/2798
- @Ionaru made their first contribution in https://github.com/denoland/fresh/pull/3696
- @SebF33 made their first contribution in https://github.com/denoland/fresh/pull/3770
Full Changelog: https://github.com/denoland/fresh/compare/2.2.2...2.3.0
Fetched June 2, 2026
