Resolution
The SDK is not a version you pick. It ships with the installed host, and your mod resolves against that copy.
<installed host>/…/node_modules/@modular/sdk/dist/ ├── ambient/tsconfig.json ← your mod's tsconfig extends this ├── docs/ ← the offline reference ├── era.json fingerprint keying your build to this host └── …
The host rewrites your mod's tsconfig.json and eslint.config.mjs every time
it activates, so they always match the installed host.
Do not hand-edit them. Your edits are overwritten on the next activation. See Ambient config.
Asking the installed copy questions
Because the SDK is local, depth answers need no network:
# a name you have NOT imported — resolved against the SDK itself modular mod docs <mod-id> --symbol AiSessionHandle # a name already in your source — resolved by the real language service modular mod language <mod-id> --hover --file src/mod.tsx --line 12 --character 8
--hover is the stronger answer where it applies: it runs a TypeScript language
service over your mod with these exact SDK types loaded, so it resolves generics
and follows aliases at that precise position. It needs a position, which is why
--symbol exists — that one resolves a name you have not written yet, and a
miss returns didYouMean.
The reference on this site is a third answer to the same question, reading the same generated output those two read. None of the three is a transcription of another.