Breaking Change Notice: Version 3.0.0 introduces a new import structure. All imports must be updated to use the unified @roomle/web-sdk entry point.
Overview
Version 3.0.0 simplifies the import structure of the Roomle Web SDK. Previously, types and classes were distributed across multiple deep import paths. This made it difficult to discover exports and required knowledge of the internal package structure.
What Changed:
Before (v2.x): Multiple entry points with deep path imports
After (v3.0.0): Single unified entry point via @roomle/web-sdk
Why This Change:
Simpler, more discoverable API surface
Better IDE autocomplete and TypeScript IntelliSense
Improved tree-shaking with modern package.json exports field
Consistent with modern npm package best practices
Industry Standard Pattern
This unified import approach is the standard pattern used by major frameworks and libraries:
If you're using Vite, exclude the SDK from optimization (this was required in v2.x and still applies):
Webpack
No special configuration needed for v3.0.0, but ensure you're using Webpack 5 for best compatibility with package.json exports field.
Ember with Embroider
Technical Details
What Changed Under the Hood
Build System:
Switched from Rollup to Vite with vite-plugin-dts
Types are now bundled into a single lib/roomle-sdk.d.ts file (376KB)
Modern package.json exports field for proper module resolution
Package Structure:
Benefits:
Simpler Developer Experience: One import path instead of 10+
Better Tree-Shaking: Modern bundlers can optimize unused exports
Improved Type Resolution: TypeScript resolves types faster with bundled definitions
Future-Proof: Follows current npm and Node.js ESM best practices
FAQ
Q: Do I need to update my code beyond import statements?
A: No. Only import statements need to change. All APIs, method signatures, and runtime behavior remain identical.
Q: Can I migrate incrementally?
A: No. Version 3.0.0 removes the old deep path exports entirely. You must update all imports when upgrading to v3.0.0.
Q: Will my build size change?
A: Build size should remain similar or slightly improve due to better tree-shaking with the new exports field.
Q: Do I need to update my bundler configuration?
A: Most likely not. The Vite exclusion rule from v2.x still applies (see Bundler Configuration section). Modern bundlers (Webpack 5, Vite, Rollup) support the exports field by default.
Q: What if I'm using custom types augmentation?
A: Custom type augmentation for Window or global types continues to work. The bundled types preserve all global type declarations.
Q: Is there a way to keep using the old import paths?
A: No. The old structure is removed in v3.0.0. We recommend updating all imports as part of the upgrade process.
Q: What version should I use if I can't migrate yet?
A: Stay on the latest v2.x version until you're ready to migrate. We recommend planning the migration as the new structure significantly improves developer experience.
Getting Help
If you encounter issues during migration:
Check the Troubleshooting section above
Review the Complete Import Path Reference for the correct import path
# Using grep
grep -r "from '@roomle/web-sdk" src/
# Using ripgrep (faster)
rg "from '@roomle/web-sdk" src/
import RoomleSdk from '@roomle/web-sdk';
import { type RoomleConfigurator } from '@roomle/web-sdk/configurator-core/src/roomle-configurator';
import { type RoomlePlanner } from "@roomle/web-sdk/planner-core/src/roomle-planner";
import type { GlbViewer } from '@roomle/web-sdk/glb-viewer-core/src/glb-viewer';
import type { UiPlanObject } from '@roomle/web-sdk/typings/kernel';
import {
RoomleSdk,
type RoomleConfigurator,
type RoomlePlanner,
type GlbViewer,
type UiPlanObject,
} from '@roomle/web-sdk';
# Run TypeScript type checking
npm run typecheck # or tsc --noEmit
# Run your tests
npm test
# Build your project
npm run build
import { RoomleConfigurator } from '@roomle/web-sdk/configurator-core/src/roomle-configurator';
import type { UiPlanObject } from '@roomle/web-sdk/typings/kernel';
import type { RapiId } from '@roomle/web-sdk/typings/rapi-types';
import {
RoomleConfigurator,
type UiPlanObject,
type RapiId
} from '@roomle/web-sdk';
import type { PlanInteractionHandler } from '@roomle/web-sdk/typings/planner';
import type { WallDefinition } from '@roomle/web-sdk/planner-core/src/roomle-planner';
import type { RapiMaterial } from '@roomle/web-sdk/typings/rapi-types';
import type {
PlanInteractionHandler,
WallDefinition,
RapiMaterial
} from '@roomle/web-sdk';
import { ConfiguratorUiCallbacks } from '@roomle/web-sdk/configurator-core/src/services/configurator-ui-callback';
import type { KernelComponent } from '@roomle/web-sdk/typings/kernel';
import {
ConfiguratorUiCallbacks,
type KernelComponent
} from '@roomle/web-sdk';
import { type PlanElementViewModel } from '@roomle/web-sdk/common-core/src/view-model/plan-element-view-model';
import type { WallDimensionTransferable } from '@roomle/web-sdk/planner-core/src/view-model/wall-plan-element-view-model';
import type {
PlanElementViewModel,
WallDimensionTransferable
} from '@roomle/web-sdk';
import { createExtObjId } from '@roomle/web-sdk/common-core/src/roomle-sdk';
import { RoomDesignerApi } from '@roomle/web-sdk/homag-intelligence/src/api';
import type { HiApiOptions } from '@roomle/web-sdk/homag-intelligence/src/hi-api-types';
import {
createExtObjId,
RoomDesignerApi,
type HiApiOptions
} from '@roomle/web-sdk';