The export name leaves the string first
A manifest lookup turns one reference identity into a load ID and a separate export selector. The require globals route only the load ID.
Reference identity
moduleKey#exportNameManifest entry
decoratedLoadId, not moduleKey#exportName. React retains name and uses it after the module promise resolves.All $$ decorations
This is the complete runtime decoration map. Each part has one routing or cache purpose and one layer responsible for removing it.
| Decoration | Position | Purpose | Removed by |
|---|---|---|---|
$$server: | Outer prefix | Route this load ID to server require. | setInternalRequire |
$$decode-client: | After $$server: | Synthesize client references rather than import a module. | RSC server require |
$$cache=... | Suffix | Fresh development load identity with the same underlying Vite import ID. | Concrete client or server require |
#exportName is not a $$ decoration. The manifest removes it earlier by separating the reference identity into id and name.moduleId$$cache=nonce$$server:moduleId$$cache=nonce$$server:$$decode-client:moduleIdsame routes, generally without $$cacheClient load ID
No routing prefix means client require. The development cache suffix survives routing and is removed immediately before the environment loader.
Illustrative identity
Development modeNo $$server: prefix. Forward the ID unchanged.
Remove the cache tag inside the memoized require operation.
Server load ID through React
The shared dispatcher owns the outer routing prefix. Server require owns the development cache suffix.
Illustrative identity
Development modeRecognize and remove the server routing prefix.
Remove the cache tag inside the memoized require operation.
Decode a client reference on RSC
Two prefixes produce two decisions. The first routes to server require. The second tells server require to synthesize reference exports instead of importing a browser module.
Manifest entry
No real client import on RSCRecognize the instruction, remove it, and return a synthetic module-shaped Proxy.
Server-action RPC does not use this dispatcher
No __vite_rsc_require__
The action identity stays in its combined moduleKey#exportName form across the application transport. It does not receive $$server:.
createServerReference("moduleKey#exportName")callServer("moduleKey#exportName", args)The framework encodes and transports the ID and arguments.
loadServerAction("moduleKey#exportName")Split at #, call requireModule(moduleKey) directly, then select the export.
Where the initial identity comes from
Registration transforms establish the identity upstream. They are context for the string journey, not part of prefix routing.
Runtime manifest lookup
React combines the registered module ID and export name as the manifest lookup key.
core/rsc.ts:74