Skip to content

Releases: nitrojs/nitro

v2.10.4

08 Nov 11:57
@pi0 pi0
18508dc
Compare
Choose a tag to compare

compare changes

🔥 Performance

  • raw: Avoid extra this.resolve when possible (#2857)

📖 Documentation

  • config: Tiny typos (#2859)

❤️ Contributors

v2.10.3

05 Nov 20:50
@pi0 pi0
Compare
Choose a tag to compare

compare changes

🩹 Fixes

  • Allow adding custom Vary to static assets handler (#2835)
  • netlify: Only include env polyfill in netlify-edge (#2851)
  • Scan env specific handlers without method in their name (#2852)
  • config: Add back default storage mounts (#2853)

📖 Documentation

  • cloudflare: Fix typo (#2849)

🌊 Types

  • cache: Resolved value is not nullable (#2848)

❤️ Contributors

v2.10.2

03 Nov 12:44
@pi0 pi0
Compare
Choose a tag to compare

compare changes

🩹 Fixes

  • rollup: Pass options to resolve (#2842)

📖 Documentation

  • cloudflare: Update cloudflare-module (#2831)
  • Update nightly and experimental banners (9ff37139)

❤️ Contributors

v2.10.1

02 Nov 23:29
@pi0 pi0
Compare
Choose a tag to compare

compare changes

🩹 Fixes

  • imports: Use explicit imports (#2839)
  • imports: Use explicit import for useDatabase (#2837)
  • rollup: Check raw extensions against resolved id (#2838)
  • presets: Update node_cluster entry name (#2840)

v2.10.0

01 Nov 23:09
@pi0 pi0
Compare
Choose a tag to compare

💬 Release Dicussion

🏠 New home

After almost 4 years of Nitro development, it's time to evolve Nitro into a larger community and ecosystem.

  • Current nitro-related repositories have been moved under the nitrojs Github org.
  • Nitro documentation is hosted under a new shorter domain name: nitro.build.
  • nitropack npm package is in transition to become nitro.

We have created a new community. You can follow Nitro updates on X via @nitrojsdev and on Bluesky via @nitro.build and feel free to join our new Discord server if you like to be involved ❤️.

🛠️ Major internal overhaul

We have made several (non-breaking) refactors in the Nitro codebase to improve long-term maintenance and structure consistency with the upcoming Nitro v3 releases.

Nitro 2.10 is a cumulative update with over 245 commits, 400+ changed files, 22,018 additions, and 13,207 deletions from 65 contributors, preparing for the next steps toward the Nitro 3 release. (see all changes)

src/* structure is more modular (#2473), all logic related to presets moved to src/presets/* (#2446) and internal type checks are more stricter (#2370, #2529).

Important

If you previously imported any utility from #internal/nitro/* or nitropack/runtime/* you should change them to #imports to avoid issues.

📅 Compatibility date

Deployment providers introduce new features that Nitro presets can leverage, but some of them need to be explicitly opted into.

Nitro introduces a new compatibilityDate configuration (#2511) that allows leveraging the latest platform enhancements. The Cloudflare and Netlify presets now use this feature. If this configuration is not provided, Nitro will continue using the current (v2.9) behavior for presets.

Migration:

export default defineNitroConfig({
+++  compatibilityDate: "2024-11-01",
});

🗂️ Environment-specific handlers

Each route handler in server/routes/* and server/api/* is always included in the server bundle for development, prerender, and production.

With the new environment-specific event handlers (#2272), you can now specify handlers that are included only under certain conditions:

  • .dev (e.g., server/api/inspect.dev.ts): Included only in development mode.
  • .prerender (e.g., server/api/og_image.prerender.ts): Included only in the prerendering stage.
  • .prod (e.g., server/api/health.prod.ts): Included only in the production bundle.

This feature allows for conventionally having multiple versions of handlers (e.g., routes/admin.dev.ts + routes/admin.prod.ts).

Additionally, if you add route handlers programmatically (via the handlers: [] Nitro config), you can use the env key to specify preset-specific filters.

📍 Route groups

You can use (...)/ directory names inside server/api/* and server/routes/* to logically group handlers without dir being part of the path (#2664).

For example, having server/api/(group)/test.ts, will add a /api/test route.

📜 production mode OpenAPI support

The experimental OpenAPI feature can now be enabled in production mode (#2570).

To enable it, set openAPI.production in the Nitro configuration.

export default defineNitroConfig({
  experimental: {
    openAPI: true,
  },
  openAPI: {
    // IMPORTANT: make sure to protect OpenAPI routes if necessary!
    production: "runtime", // or 'prerender'
  },
});

New OpenAPI routes:

  • /_openapi.json: OpenAPI v2 JSON to be used in external tools
  • /_swagger: built-in Swagger UI
  • /_scalar: built-in Scalar UI

📦 Upgraded dependencies

🎛️ Preset updates

Cloudflare

cloudflare-module preset, with compatibilityDate config set to 2024-09-19 or later, leverages new Static Assets support to allow serving static assets directly from cloudflare CDN with low latency and without hitting the worker and occurring costs (#2800) (Note: Please beware of current limitations while this feature is in Beta).

A new (experimental) cloudflare-durable preset is available which extends coudflare-module to allow leveraging Cloudflare Durable objects(#2801). This allows using WebSockets with pub/sub support for use cases like chat rooms or live collaboration (check out nuxt-tiptap for a demo).

Nitro 2.10 added several hooks such as cloudflare:email and cloudflare:queue (#2487) and cloudflare:scheduled, cloudflare:email, cloudflare:queue, cloudflare:tail and cloudflare:trace for cloudflare-module preset (#2795) usable with plugins.

With the cloudflare-pages preset, if cloudflare: { wrangler: { ... } } is set in nitro config, Nitro will automatically merge it with wrangler.toml in your project root during build.

Netlify

netlify preset uses Netlify Functions 2.0 format when compatibilityDate is set to 2024-05-07 or later (#2406). This allows streaming responses (demo), better support for hybrid rendering (prerender: true route rule works as intended), improves background request generation, fixing bugs with set-cookie: undefined on responses and Netlify Blobs will now work out of the box.

Previously, ISR in Nitro had been implemented on Netlify via proprietary On-Demand Builders platform primitive, which only supported "v1" Functions. Now that there's momentum around Targeted HTTP Cache Control and that Netlify supports it, we can implement ISR in Nitro via these simple, standard HTTP headers instead. With the isr route rule, the new preset uses a new durable cache-control directive (#2571).

All netlify presets now leverage from better static asset handling to avoid extra function invocations and saving costs (#2822, #2823).

Vercel

When using isr route rule, by default, query paramas are ignored by cache. Now, you can pass an options object to isr: {} route rule to configure caching behavior (#2780). Read more in docs.

AWS Lambda

We have experimented streaming support for aws-lambda (#2412) and added it as an opt-in flag to enable streaming in supported deployments using awsLambda: { streaming: true } nitro config (#2786).

New presets

We have added support for genezio (#2637) and zerops (#2698) deployment providers.

Other changes

🚀 Enhancements

  • Generate types for runtime config (#2306)
  • Support ignore option for server assets (#2302)
  • Expose getRouteRulesForPath from nitro runtime (#2238)
  • openapi: Support configuration via openapi (#2299)
  • Environment specific event handlers (#2272)
  • Experimental defineRouteMeta (#2102)
  • Allow customizing apiBaseURL, apiDir and routesDir (#1763)
  • Add gitlab-pages static provider (#2420)
  • Compatibility date support (#2511)
  • config: Warn if the runtime config is not serializable (#2542)
  • open-api: Production mode support (#2570)
  • deno-server: Use output node_modules for start task ([#2687](https://github.com/...
Read more

v2.9.7

27 Jun 16:21
@pi0 pi0
Compare
Choose a tag to compare

Note

Release of Nitro 2.10 might little bit take longer (after Nitro 3.0 release) in order to make sure all major refactors are nonbreaking and tested enough. In the meantime, 2.9.7 adds important fixes.

Full changelog: v2.9.6...v2.9.7

🩹 Fixes

  • github-pages: Prerender / by default (#2334) (8b5cbc5)
  • Deduplicate plugins (#2391) (4293b8b)
  • Add .tsx and .jsx to node-resolve extensions (#2398) (d2c0d74)
  • typescript: Set compilerOptions.noEmit to avoid tsconfig.json warning (#2402) (6b6777e)
  • prerender: Only try to add / after prerender:routes hook (#2348) (fb88efd)
  • Pass custom entry filename when resolving prerenderer (#2461) (9bd6622)
  • public-assets: Do not shadow paths that share prefix (#2516) (72db848)
  • openapi: Update swagger-ui version to v5 for OpenAPI v3.1 support (#2343) (9e2cd8a)
  • Convert CapturedErrorContext to interface to allow type augmentation (#2393) (45ff175)
  • renderer: Check full path for /favicon.ico placeholder (#2553) (b86bb45)
  • Use relative paths in nitro-config.d.ts (#2471) (4d70b75)
  • prerender: Extract links from explicit html routes (#2517) (e1f87c5)
  • cloudflare-pages: Remove .html extension from generated _routes.json (#2498) (79b85fe)
  • core: Resolve modules with esm compatibility (#2514) (4657ada)
  • Update cli preset with esm module format (#2539) (f6f2327)
  • types: Infer types correctly when method is omitted (#2551) (f76d21b)
  • deno-server: Explicitly remove cert/key from options if either is not set (#2373) (d887f4a)
  • azure: Correctly handle maxAge cookie option (#2403) (aabdc9c)
  • netlify: Ensure preview command is correct (#2561) (d16a47b)
  • iis: Deep merge configs (#2358) (f03addd)
  • iis: Parse without explicitArray to allow merging web.config (#2457) (6c3e080)
  • vercel: Support custom baseURL (#2464) (61f2079)
  • Lower-case accepted handler method (#2382) (e60e114)
  • defineCachedEventHandler: Add event.context.cache (#2519) (fc3968b)

❤️ Contributors

v2.9.6

02 Apr 22:51
@pi0 pi0
3cb566e
Compare
Choose a tag to compare

compare changes

🩹 Fixes

  • Generate root/src directory aliases (#2318)
  • externals: Skip resolving virtual ids start with \0 (#2321)
  • types: Account for undefined value for $fetch return type (#2327)
  • cloudflare-pages: Use predefined wildcards in routes.exclude (#2319)

📖 Documentation

  • Remove outdated nightly warning (#2317)

❤️ Contributors

v2.9.5

25 Mar 19:29
@pi0 pi0
Compare
Choose a tag to compare

compare changes

✅ Fixes and Improvements

  • openapi: Add experimental /_nitro/scalar endpoint (#2252)
  • openapi: Use dynamic host + port (#2216)
  • openapi: Add schema to generated parameters (#2235)
  • openapi: Avoid double slash for base (fdf7e70a)
  • options: Set scheduledTasks to an empty object by default (#2285)
  • prerender: Call nitroApp close hook when done prerendering (#2287)
  • types: Return T from Serialize when it extends undefined (#2286)
  • raw: Exclude yaml from raw plugin (#2275)
  • externals: Check explicit inline rules on resolved id (#2288)
  • raw: Allow importing relative paths (#2289)
  • types: Make c12 env types available for NitroConfig (#2292)
  • netlify-edge: Write _headers and _redirects (#2291)
  • cloudflare-pages: Write _headers and _redirects for non static builds (#2290)
  • netlify: Allow writing config.json (#2264)
  • Allow importing utils from nitropack/runtime (#2314)
  • openapi: Upgrade to openapi 3.1 (#2297)
  • Use .d.ts for runtime generated types (#2313)

📖 Documentation

  • routing: Add note about middleware execution order (#2282)
  • routing: Fx link to h3 object syntax handler (#2281)
  • Update tasks return value (8a62e7db)
  • cache: Add a note for serverless environment (dc83a2e2)
  • Fix typo (#2298)

❤️ Contributors

v2.9.4

15 Mar 16:48
@pi0 pi0
cc24c20
Compare
Choose a tag to compare

compare changes

🩹 Fixes

  • Handle path negations when scanning public assets (#2250)
  • pkg: Add ioredis as unstorage peer dependency (#2266)

📖 Documentation

  • Fix server assets example path (#2248)
  • Remove duplicate integrity key (#2246)
  • Fix wording (#2261)
  • Remove nightly notice (39bc3f2e)
  • tasks: Update dev server usage (#2240)
  • cache: Add example usage for cache.varies (#2241)

❤️ Contributors

v2.9.3

10 Mar 10:15
@pi0 pi0
52b65c7
Compare
Choose a tag to compare

compare changes

🩹 Fixes

  • raw: Use mime to chck binary types and exclude .json (#2239)

📖 Documentation

❤️ Contributors