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