Known issues by SDK version
Use @tv/extension-sdk 1.15.1 or later. This page is for when you cannot, or when your module was scaffolded by an older release: it lists, newest first, what each release fixed that you would otherwise run into, and what to do about it by hand. The changelog has every change; this page keeps only the ones that break a step.
An issue is one of two kinds:
- SDK: in the CLI or the library. Upgrading removes it.
npx @tv/extension-sdkruns the copy in your module'snode_modules, so upgrade it there:pnpm add -w @tv/extension-sdk@^1.15.1. - Scaffold: in the files
init-modulewrote. Upgrading the SDK does not change a module that already exists, so fix the file as the table says, or scaffold again and move your code over.
Fixed in 1.15.1
| Kind | What goes wrong | On an older version |
|---|---|---|
| SDK | On Windows, login fails after you approve it in the browser: … longer than the platform limit of 2560 chars. The session is larger than Windows Credential Manager holds. | Use a portal API key in TV_API_TOKEN, or set TV_SDK_TOKEN_STORE=file before login and keep it set for every later command. |
| SDK | sandbox connect prints its tv-api URL and token as export lines. With them applied, sandbox install --sandbox looks the sandbox up on the sandbox itself, with the sandbox's token, and fails. | Do not apply them in the terminal you run sandbox commands from. If you did, unset TV_API_URL TV_API_TOKEN and export your portal key again. |
| SDK | sandbox install --sandbox=… --token=tvk_… fails with 401 when it registers the manifest: the portal key is sent to the sandbox as well. | Put the portal key in TV_API_TOKEN and leave --token out. |
| SDK | After any 401 or 403, sandbox install prints This is expected today: … ask for the module to be registered for you. That stopped being true on 2026-09-19. | Ignore the note, and check the credential with When something is wrong. |
| SDK | sandbox create, list and connect show the slug and organizationId only with --format=json, and create prints no sign-in line to send us. | Run npx @tv/extension-sdk sandbox list --format=json and send us those two values only. The same output holds each sandbox's apiToken, which stays secret. |
| SDK | sandbox create --help (or any sandbox <command> --help) answers Unknown flag: --help and exits 2. | npx @tv/extension-sdk sandbox --help prints the usage of all of them. |
| Scaffold | The standalone page (pnpm dev) goes blank as soon as the Shell calls useQuery: No QueryClient set, use QueryClientProvider to set one. | Wrap the tree in src/main.tsx in a QueryClientProvider, outermost, as in Build the frontend. |
| Scaffold | package.json has no packageManager field, so a pnpm 11 installed globally runs instead of 10.18.2, and fails on a fresh @tv release with ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION. | Add "packageManager": "pnpm@10.18.2" to package.json, then install again. |
| Scaffold | The first pnpm install warns about peer dependencies (i18next ^25 against react-i18next 17, @tv/ui ^1.4.1 against the SDK), and pnpm lint fails with eslint: command not found. | Set i18next to ^26.2.0, raise @tv/ui to ^2.2.0 or remove it if nothing imports it, and delete the lint script: pnpm typecheck is the static check. |
| Scaffold | init-module --external without --scope gives the module Tango Vision's identity: an id and package name under @tv, and "Tango Vision" as the author. | Scaffold again with --scope and --author (step 1), or change id and author in module-manifest.json and name in package.json by hand, keeping the module-<slug> part. |
Fixed in 1.15.0
| Kind | What goes wrong | On an older version |
|---|---|---|
| Scaffold | The federation container is named tv-module-<slug>, but the platform looks for the camelCase slug, so the shell does not find your module in its own remoteEntry.js. | In vite.config.ts, set the federation name to the camelCase slug: hello for hello, workOrders for work-orders. |
| Scaffold | react-router and react-router-dom are not shared, so a Shell that uses <Routes> throws inside Building OS: Cannot destructure property 'basename' of 'React.useContext(...)' as it is null. | Add both to shared in vite.config.ts and to dependencies (^7.0.0), and wrap <Shell /> in src/main.tsx in a <BrowserRouter> for the standalone page. |
| Scaffold | The comment at the top of src/Shell.tsx says to use PlatformContext from @tv/extension-sdk/react and "the shared axios client". The first throws inside Building OS; the second does not exist. | Ignore it. Use useSelectedBuildingId() and authorizationHeader(): Calling the API from a module. |
| SDK | getAccessToken(), authorizationHeader() and resolveAccessToken() do not exist yet, so a module has no supported way to authenticate its API calls. | Upgrade. Do not read localStorage['access_token'] instead: the sandbox shell does not write it. |
Fixed in 1.14.1
| Kind | What goes wrong | On an older version |
|---|---|---|
| Scaffold | A module scaffolded by 1.14.0 does not build: "useQuery" is not exported by "__vite-optional-peer-dep:@tanstack/react-query:@tv/extension-sdk", and no remoteEntry.js is written. | pnpm add -w @tanstack/react-query@^5 |
Before 1.14.0
| Kind | What goes wrong | On an older version |
|---|---|---|
| SDK | There is no init-module --external. The CI it generates calls private Tango Vision actions and fails outside our organisation. | Upgrade, and scaffold again with --external. |
| SDK | There is no sandbox install, and the scaffold has no dev:remote / serve:remote scripts. | Upgrade, and add the scripts by hand as in Serve your remote from your machine. |
| SDK | sandbox create --type=university is refused with Invalid --type. | Upgrade, or use office or mall. |