bodyHtmlEnd
The settings bodyHtmlEnd/bodyHtmlBegin enable you to insert HTML at the beginning/end of the <body> tag.
Inserting static HTML:
// pages/+config.js
 
export default {
  bodyHtmlEnd: '<div id="something"></div>'
}// pages/+config.ts
 
import type { Config } from 'vike/types'
 
export default {
  bodyHtmlEnd: '<div id="something"></div>'
} satisfies ConfigFor adding
<script>tags consider<Head>or+client.jsinstead.
Inserting dynamically generated HTML:
// pages/+bodyHtmlEnd.js
 
export default (pageContext) => {
  const { something } = pageContext
  return `<div>${something}</div>`
}// pages/+bodyHtmlEnd.ts
 
import type { PageContextServer } from 'vike/types'
 
export default (pageContext: PageContextServer) => {
  const { something } = pageContext
  return `<div>${something}</div>`
}⚠️Be cautious about the security risk called XSS injections.
Use cases
React
When using React, it's often used for portals.
// pages/+config.js
 
export default {
  bodyHtmlEnd: '<div id="portal-root"></div>'
}// pages/+config.ts
 
import type { Config } from 'vike/types'
 
export default {
  bodyHtmlEnd: '<div id="portal-root"></div>'
} satisfies ConfigYou'll then get the following HTML:
<body>
  {/* ... */}
  <div id="root">{reactHtml}</div>
  <div id="portal-root"></div>
</body>Vue
When using Vue, it's often used for adding the HTML targets of teleports.
Teleports work out of the box when using <Teleport to="teleported"> and you don't have to use bodyHtml{Begin,End} then.
vike-vuealways inserts this at the end of the<body>tag:<div id="teleported">${ pageContext.ssrContext.teleports?.['#teleported'] ?? '' }</div>
You can use Vike's
pageContextobject to access Vue'sssrContextobject:// pages/+bodyHtmlEnd.js export default (pageContext) => { const content = pageContext.ssrContext.teleports?.['#someTeleport'] ?? '' return `<div id="someTeleport">${content}</div>` }// pages/+bodyHtmlEnd.ts import type { PageContextServer } from 'vike/types' export default (pageContext: PageContextServer) => { const content = pageContext.ssrContext.teleports?.['#someTeleport'] ?? '' return `<div id="someTeleport">${content}</div>` }