Package detail

@vue/server-renderer

vuejs17.6mMIT3.5.13

@vue/server-renderer

vue

readme

@vue/server-renderer

Note: as of 3.2.13+, this package is included as a dependency of the main vue package and can be accessed as vue/server-renderer. This means you no longer need to explicitly install this package and ensure its version match that of vue's. Just use the vue/server-renderer deep import instead.

Basic API

renderToString

Signature

function renderToString(
  input: App | VNode,
  context?: SSRContext,
): Promise<string>

Usage

const { createSSRApp } = require('vue')
const { renderToString } = require('@vue/server-renderer')

const app = createSSRApp({
  data: () => ({ msg: 'hello' }),
  template: `<div>{{ msg }}</div>`,
})

;(async () => {
  const html = await renderToString(app)
  console.log(html)
})()

Handling Teleports

If the rendered app contains teleports, the teleported content will not be part of the rendered string. Instead, they are exposed under the teleports property of the ssr context object:

const ctx = {}
const html = await renderToString(app, ctx)

console.log(ctx.teleports) // { '#teleported': 'teleported content' }

Streaming API

renderToNodeStream

Renders input as a Node.js Readable stream.

Signature

function renderToNodeStream(input: App | VNode, context?: SSRContext): Readable

Usage

// inside a Node.js http handler
renderToNodeStream(app).pipe(res)

Note: This method is not supported in the ESM build of @vue/server-renderer, which is decoupled from Node.js environments. Use pipeToNodeWritable instead.

pipeToNodeWritable

Render and pipe to an existing Node.js Writable stream instance.

Signature

function pipeToNodeWritable(
  input: App | VNode,
  context: SSRContext = {},
  writable: Writable,
): void

Usage

// inside a Node.js http handler
pipeToNodeWritable(app, {}, res)

renderToWebStream

Renders input as a Web ReadableStream.

Signature

function renderToWebStream(
  input: App | VNode,
  context?: SSRContext,
): ReadableStream

Usage

// inside an environment with ReadableStream support
return new Response(renderToWebStream(app))

Note: in environments that do not expose ReadableStream constructor in the global scope, pipeToWebWritable should be used instead.

pipeToWebWritable

Render and pipe to an existing Web WritableStream instance.

Signature

function pipeToWebWritable(
  input: App | VNode,
  context: SSRContext = {},
  writable: WritableStream,
): void

Usage

This is typically used in combination with TransformStream:

// TransformStream is available in environments such as CloudFlare workers.
// in Node.js, TransformStream needs to be explicitly imported from 'stream/web'
const { readable, writable } = new TransformStream()
pipeToWebWritable(app, {}, writable)

return new Response(readable)

renderToSimpleStream

Renders input in streaming mode using a simple readable interface.

Signature

function renderToSimpleStream(
  input: App | VNode,
  context: SSRContext,
  options: SimpleReadable,
): SimpleReadable

interface SimpleReadable {
  push(content: string | null): void
  destroy(err: any): void
}

Usage

let res = ''

renderToSimpleStream(
  app,
  {},
  {
    push(chunk) {
      if (chunk === null) {
        // done
        console(`render complete: ${res}`)
      } else {
        res += chunk
      }
    },
    destroy(err) {
      // error encountered
    },
  },
)

changelog

3.5.13 (2024-11-15)

Bug Fixes

  • compiler-core: handle v-memo + v-for with functional key (#12014) (99009ee), closes #12013
  • compiler-dom: properly stringify template string style (#12392) (2d78539), closes #12391
  • custom-element: avoid triggering mutationObserver when relecting props (352bc88), closes #12214 #12215
  • deps: update dependency postcss to ^8.4.48 (#12356) (b5ff930)
  • hydration: the component vnode's el should be updated when a mismatch occurs. (#12255) (a20a4cb), closes #12253
  • reactivty: avoid unnecessary watcher effect removal from inactive scope (2193284), closes #5783 #5806
  • reactivity: release nested effects/scopes on effect scope stop (#12373) (bee2f5e), closes #12370
  • runtime-dom: set css vars before user onMounted hooks (2d5c5e2), closes #11533
  • runtime-dom: set css vars on update to handle child forcing reflow in onMount (#11561) (c4312f9)
  • ssr: avoid updating subtree of async component if it is resolved (#12363) (da7ad5e), closes #12362
  • ssr: ensure v-text updates correctly with custom directives in SSR output (#12311) (1f75d4e), closes #12309
  • ssr: handle initial selected state for select with v-model + v-for option (#12399) (4f8d807), closes #12395
  • teleport: handle deferred teleport update before mounted (#12168) (8bff142), closes #12161
  • templateRef: set ref on cached async component which wrapped in KeepAlive (#12290) (983eb50), closes #4999 #5004
  • test: update snapshot (#12169) (828d4a4)
  • Transition: fix transition memory leak edge case (#12182) (660132d), closes #12181
  • transition: reflow before leave-active class after leave-from (#12288) (4b479db), closes #2593
  • types: defineEmits w/ interface declaration (#12343) (1022eab), closes #8457
  • v-once: setting hasOnce to current block only when in v-once (#12374) (37300fc), closes #12371

Performance Improvements

  • reactivity: do not track inner key `__v_skip`` (#11690) (d637bd6)
  • runtime-core: use feature flag for call to resolveMergedOptions (#12163) (1755ac0)

3.5.12 (2024-10-11)

Bug Fixes

Performance Improvements

  • reactivity: avoid unnecessary recursion in removeSub (#12135) (ec917cf)

3.5.11 (2024-10-03)

Bug Fixes

  • compiler-sfc: do not skip TSSatisfiesExpression when transforming props destructure (#12062) (2328b05), closes #12061
  • reactivity: prevent overwriting next property during batch processing (#12075) (d3f5e6e), closes #12072
  • scheduler: job ordering when the post queue is flushing (#12090) (577edca)
  • types: correctly infer TypeProps when it is any (#12073) (57315ab), closes #12058
  • types: should not intersect PublicProps with Props (#12077) (6f85894)
  • types: infer the first generic type of Ref correctly (#12094) (c97bb84)

3.5.10 (2024-09-27)

Bug Fixes

  • custom-element: properly set kebab-case props on Vue custom elements (ea3efa0), closes #12030 #12032
  • reactivity: fix nested batch edge case (93c95dd)
  • reactivity: only clear notified flags for computed in first batch iteration (aa9ef23), closes #12045
  • types/ref: handle nested refs in UnwrapRef (#12049) (e2c19c2), closes #12044

3.5.9 (2024-09-26)

Bug Fixes

3.5.8 (2024-09-22)

Bug Fixes

  • reactivity: do not remove dep from depsMap when cleaning up deps of computed (#11995) (0267a58)

3.5.7 (2024-09-20)

Bug Fixes

Performance Improvements

  • hydration: avoid observer if element is in viewport (#11639) (e075dfa)

3.5.6 (2024-09-16)

Bug Fixes

  • compile-dom: should be able to stringify mathML (#11891) (85c138c)
  • compiler-sfc: preserve old behavior when using withDefaults with desutructure (8492c3c), closes #11930
  • reactivity: avoid exponential perf cost and reduce call stack depth for deeply chained computeds (#11944) (c74bb8c), closes #11928
  • reactivity: rely on dirty check only when computed has deps (#11931) (aa5dafd), closes #11929
  • watch: once option should be ignored by watchEffect (#11884) (49fa673)
  • watch: unwatch should be callable during SSR (#11925) (2d6adf7), closes #11924

3.5.5 (2024-09-13)

Bug Fixes

  • compiler-core: fix handling of delimiterOpen in VPre (#11915) (706d4ac), closes #11913
  • compiler-dom: fix stringify static edge for partially eligible chunks in cached parent (1d99d61), closes #11879 #11890
  • compiler-dom: should ignore leading newline in <textarea> per spec (3c4bf76)
  • compiler-sfc: nested css supports atrule and comment (#11899) (0e7bc71), closes #11896
  • custom-element: handle nested customElement mount w/ shadowRoot false (#11861) (f2d8019), closes #11851 #11871
  • hmr: reload async child wrapped in Suspense + KeepAlive (#11907) (10a2c60), closes #11868
  • hydration: fix mismatch of leading newline in <textarea> and <pre> (a5f3c2e), closes #11873 #11874
  • reactivity: properly clean up deps, fix memory leak (8ea5d6d), closes #11901
  • runtime-core: properly update async component nested in KeepAlive (#11917) (7fe6c79), closes #11916
  • TransitionGroup: not warn unkeyed text children with whitespece preserve (#11888) (7571f20), closes #11885

3.5.4 (2024-09-10)

Bug Fixes

  • compiler-sfc: correct scoped injection for nesting selector (#11854) (b1de75e), closes #10567
  • reactivity: fix markRaw error on already marked object (#11864) (67d6596), closes #11862
  • Revert "fix: Revert "fix(reactivity): self-referencing computed should refresh"" (e596378)
  • runtime-core: handle shallow reactive arrays in renderList correctly (#11870) (ced59ab), closes #11869
  • types: correctly infer TypeEmits with both tuple and function syntax (#11840) (dad6738), closes #11836

Performance Improvements

  • reactivity: trigger deps directly instead of storing in an array first (#11695) (f80d447)

3.5.3 (2024-09-06)

Bug Fixes

  • hydration: check __asyncHydrate presence for vue3-lazy-hydration compat (#11825) (8e6c337), closes #11793
  • Revert "fix(reactivity): self-referencing computed should refresh" (35c760f)
  • ssr: respect app.config.warnHandler during ssr (bf3d9a2), closes #11830
  • Transition: handle KeepAlive child unmount in Transition out-in mode (#11833) (6b7901d), closes #11775
  • useId: make generated IDs selector compatible (babfb4c), closes #11828

3.5.2 (2024-09-05)

Bug Fixes

Features

  • compiler-core: parse modifiers as expression to provide location data (#11819) (3f13203)

3.5.1 (2024-09-04)

Bug Fixes

  • build: improve built-in components treeshakability (4eee630)
  • reactivity: handle non-array arguments in reactive concat method (#11794) (475977a), closes #11792
  • Transition: avoid applying transition hooks on comment vnode (#11788) (51912f8), closes #11782
  • types: avoid using intersection type in Readonly<...> to fix JSDoc emit (#11799) (7518bc1)
  • useTemplateRef: fix readonly warning when useTemplateRef has same variable name as template ref (bc63df0), closes #11795 #11802 #11804

3.5.0 (2024-09-03)

Aggregated Features List for 3.5 (alpha to stable)

Reactivity

  • reactivity: Refactor reactivity system to use version counting and doubly-linked list tracking (#10397) (05eb4e0)
  • reactivity: Optimize array tracking (#9511) (70196a4)
  • compiler-sfc: enable reactive props destructure by default (d2dac0e)
  • reactivity: onEffectCleanup API (2cc5615), closes #10173
  • reactivity: add failSilently argument for onScopeDispose (9a936aa)
  • reactivity/watch: base watch, getCurrentWatcher, and onWatcherCleanup (#9927) (205e5b5)
  • reactivity/watch: add pause/resume for ReactiveEffect, EffectScope, and WatchHandle (#9651) (267093c)
  • watch: support passing number to deep option to control the watch depth (#9572) (22f7d96)
  • types: export MultiWatchSources type (#9563) (998dca5)
  • types: allow computed getter and setter types to be unrelated (#11472) (a01675e), closes #7271

SSR

  • runtime-core: useId() and app.config.idPrefix (#11404) (73ef156)
  • hydration: lazy hydration strategies for async components (#11458) (d14a11c)
  • hydration: support suppressing hydration mismatch via data-allow-mismatch (94fb2b8)

Custom Element

  • custom-element: useHost() helper (775103a)
  • custom-element: useShadowRoot() helper (5a1a89b), closes #6113 #8195
  • custom-element: expose this.$host in Options API (1ef8f46)
  • custom-element: inject child components styles to custom element shadow root (#11517) (56c76a8), closes #4662 #7941 #7942
  • custom-element: support configurable app instance in defineCustomElement (6758c3c), closes #4356 #4635
  • custom-element: support css :host selector by applying css vars on host element (#8830) (03a9ea2), closes #8826
  • custom-element: support emit with options (e181bff), closes #7605
  • custom-element: support expose on customElement (#6256) (af838c1), closes #5540
  • custom-element: support nonce option for injected style tags (bb4a02a), closes #6530
  • custom-element: support passing custom-element-specific options via 2nd argument of defineCustomElement (60a88a2)
  • custom-element: support shadowRoot: false in defineCustomElement() (37d2ce5), closes #4314 #4404

Teleport

Misc

  • runtime-core: useTemplateRef() (3ba70e4)
  • runtime-core: add app.onUnmount() for registering cleanup functions (#4619) (582a3a3), closes #4516
  • runtime-core: add app.config.throwUnhandledErrorInProduction (f476b7f), closes #7876
  • runtime-dom: Trusted Types compatibility (#10844) (6d4eb94)
  • compiler-core: support Symbol global in template expressions (#9069) (a501a85)
  • types: export more emit related types (#11017) (189573d)
  • types: add loading prop to iframe (#11767) (d86fe0e)

Internals

  • reactivity: store value cache on CustomRefs impls (#11539) (e044b6e)
  • types: provide internal options for directly using user types in language tools (#10801) (75c8cf6)
  • types: provide internal options for using refs type in language tools (#11492) (5ffd1a8)

Bug Fixes

  • compiler-sfc: fix import usage check for kebab-case same name shorthand binding (0f7c0e5), closes #11745 #11754
  • cssVars: correctly escape double quotes in SSR (#11784) (7b5b6e0), closes #11779
  • deps: update dependency postcss to ^8.4.44 (#11774) (cb843e0)
  • hydration: escape css var name to avoid mismatch (#11739) (ca12e77), closes #11735
  • hydration: handle text nodes with 0 during hydration (#11772) (c756da2), closes #11771
  • reactivity: correctly handle method calls on user-extended arrays (#11760) (9817c80), closes #11759
  • runtime-dom: avoid unnecessary prop patch for checkbox (#11657) (c3ce9fe), closes #11647
  • runtime-dom: prevent unnecessary DOM update from v-model (#11656) (b1be9bd), closes #11647
  • server-renderer: Fix call to serverPrefetch in server renderer with an async setup (#10893) (6039e25)
  • server-renderer: render className during SSR (#11722) (52cdb0f)
  • types/defineModel: allow getter and setter types to be unrelated (#11699) (fe07f70), closes #11697

3.5.0-rc.1 (2024-08-29)

Bug Fixes

  • compiler-sfc: skip circular tsconfig project reference (#11680) (9c4c2e5), closes #11382
  • custom-element: handle keys set on custom elements (#11655) (f1d1831), closes #11641
  • deps: update dependency monaco-editor to ^0.51.0 (#11713) (434f8a9)
  • keep-alive: reset keep alive flag when the component is removed from include (#11718) (29c321b), closes #11717
  • reactivity: avoid infinite recursion when mutating ref wrapped in reactive (313e4bf), closes #11696
  • reactivity: ensure watcher with once: true are properly removed from effect scope (#11665) (fbc0c42)
  • runtime-dom: setting innerHTML when patching props should go through trusted types (d875de5)
  • types: GlobalDirective / GlobalComponents should not be records (42e8df6)

3.5.0-beta.3 (2024-08-20)

Bug Fixes

Features

  • reactivity: base watch, getCurrentWatcher, and onWatcherCleanup (#9927) (205e5b5)

Performance Improvements

  • runtime-core: use apply to avoid spreading. (#5985) (bb6babc)

3.5.0-beta.2 (2024-08-15)

Bug Fixes

  • build: revert entities to 4.5 to avoid runtime resolution errors (e9e0815), closes #11603
  • compiler-core: use ast-based check for function expressions when possible (5861229), closes #11615
  • compiler-sfc: fix prefixIdentifier default value (3d6f015)
  • compiler-sfc: handle keyof operator with index object (#11581) (fe00815)
  • custom-element: keep instance.isCE for backwards compat (e19fc27)
  • deps: update dependency postcss to ^8.4.41 (#11585) (4c4e12a)
  • keep-alive: ensure include/exclude regexp work with global flag (#11595) (3653bc0)
  • reactivity: ensure extended method arguments are not lost (#11574) (4085def), closes #11570
  • reactivity: sync watch should be executed correctly (#11589) (3bda3e8), closes #11577
  • types/computed: ensure type safety for WritableComputedRef (#11608) (5cf5a16)
  • types: add fallback stub for DOM types when DOM lib is absent (#11598) (fee6697)

Features

  • deprecated: remove deprecated parseExpressions option (#11597) (4e7d5db)

3.5.0-beta.1 (2024-08-08)

Bug Fixes

  • custom-element: delay mounting of custom elements with async parent (37ccb9b), closes #8127 #9341 #9351 #9351
  • custom-element: delete prop on attribute removal (506c4c5), closes #11276
  • custom-element: ignore scoped id (7f2c505)
  • custom-element: reflect prop default value on custom element (63689ed), closes #9006 #10537
  • custom-element: support early-set domProps for async custom elements (a07e7bf), closes #11081 #11082
  • types/custome-element: defineCustomElement props inference with array emits (#11384) (e94b01b), closes #11353
  • types: allow using InjectionKey as valid property key (321d807), closes #5089

Features

  • custom-element: expose this.$host in Options API (1ef8f46)
  • custom-element: inject child components styles to custom element shadow root (#11517) (56c76a8), closes #4662 #7941 #7942
  • custom-element: support configurable app instance in defineCustomElement (6758c3c), closes #4356 #4635
  • custom-element: support css :host selector by applying css vars on host element (#8830) (03a9ea2), closes #8826
  • custom-element: support emit with options (e181bff), closes #7605
  • custom-element: support for expose on customElement (#6256) (af838c1), closes #5540
  • custom-element: support nonce option for injected style tags (bb4a02a), closes #6530
  • custom-element: support passing custom-element-specific options via 2nd argument of defineCustomElement (60a88a2)
  • custom-element: support shadowRoot: false in defineCustomElement() (37d2ce5), closes #4314 #4404
  • custom-element: useHost() helper (775103a)
  • custom-element: useShadowRoot() helper (5a1a89b), closes #6113 #8195
  • hydration: allow fine tuning of lazy hydration strategy triggers (#11530) (261c8b1)
  • reactivity/watch: add pause/resume for ReactiveEffect, EffectScope, and WatchHandle (#9651) (267093c)
  • reactivity: store value cache on CustomRefs impls (#11539) (e044b6e)
  • runtime-dom: Trusted Types compatibility (#10844) (6d4eb94)
  • support specifying allowed keys via generic argument in useTemplateRef() (1fbfa69)
  • types: allow computed getter and setter types to be unrelated (#11472) (a01675e), closes #7271
  • types: export MultiWatchSources type (#9563) (998dca5)
  • types: provide internal options for using refs type in language tools (#11492) (5ffd1a8)
  • watch: support passing number to deep option to control the watch depth (#9572) (22f7d96)

3.5.0-alpha.5 (2024-07-31)

Features

  • hydration: support suppressing hydration mismatch via data-allow-mismatch (94fb2b8)
  • lazy hydration strategies for async components (#11458) (d14a11c)

3.5.0-alpha.4 (2024-07-24)

Bug Fixes

  • suspense/hydration: fix hydration timing of async component inside suspense (1b8e197), closes #6638
  • useId: properly mark async boundary for already resolved async component (cd28172)

3.5.0-alpha.3 (2024-07-19)

Bug Fixes

  • build: enable SSR branches in esm-browser builds (b14cd9a)
  • compiler-core: change node hoisting to caching per instance (#11067) (cd0ea0d), closes #5256 #9219 #10959
  • compiler-sfc: should properly walk desutructured props when reactive destructure is not enabled (0fd6193), closes #11325
  • types: respect props with default on instance type when using __typeProps (96e4738)

Features

3.5.0-alpha.2 (2024-05-04)

Bug Fixes

  • types: fix app.component() typing with inline defineComponent (908f70a), closes #10843
  • types: fix compat with generated types that rely on CreateComponentPublicInstance (c146186), closes #10842
  • types: props in defineOptions type should be optional (124c4ca), closes #10841

Features

  • runtime-core: add app.onUnmount() for registering cleanup functions (#4619) (582a3a3), closes #4516

3.5.0-alpha.1 (2024-04-29)

Bug Fixes

  • reactivity: fix call sequence of ontrigger in effect (#10501) (28841fe)

Features

  • compiler-sfc: enable reactive props destructure by default (d2dac0e)
  • reactivity: onEffectCleanup API (2cc5615), closes #10173
  • reactivity: add failSilently argument for onScopeDispose (9a936aa)
  • transition: support directly nesting Teleport inside Transition (#6548) (0e6e3c7), closes #5836
  • types: provide internal options for directly using user types in language tools (#10801) (75c8cf6)

Performance Improvements

Previous Changelogs

3.4.x (2023-10-28 - 2024-08-15)

See 3.4 changelog

3.3.x (2023-02-05 - 2023-12-29)

See 3.3 changelog

3.2.x (2021-07-16 - 2023-02-02)

See 3.2 changelog

3.1.x (2021-05-08 - 2021-07-16)

See 3.1 changelog

3.0.x (2019-12-20 - 2021-04-01)

See 3.0 changelog