Dependency & Compatibility Guide
For client apps integrating @revrag-ai/embed-angular · SDK 2.0.0
Which Angular, builder and TypeScript versions the SDK works with, what it adds to the host app, and what to do when the host is outside the supported ranges.
Everything here comes from the package's package.json, its build, and the apps it was checked against for 2.0.0.
| Status | Meaning |
|---|---|
| Exercised | An app on that stack was built against the 2.0.0 package and checked |
| In range | The peer ranges allow it, but no app covers it |
Treat "exercised" as strong evidence, not a release certification.
Stack A uses the SDK's packaged build through a local file link. Stack B used the packed 2.0.0 tarball. Neither installed the package from npm.
Table of contents
- Known-good stacks
- Peer dependencies
- What the SDK adds to the host
- Angular versions, router, builders and app styles
- Outside the ranges: workarounds
- TypeScript
- Browsers and runtime
- Package managers
- Out of scope
1. Known-good stacks
Pin to one of these when you can.
| Stack | Angular | App style | Builder | TypeScript | RxJS | zone.js | Checked how |
|---|---|---|---|---|---|---|---|
| A. Angular 19 | 19.2.19 | standalone, router | application (esbuild) | 5.7 (bundler) | 7.8 | 0.15 | examples/angular in the SDK repository: production build, then the widget driven in a browser with no errors |
| B. Angular 16 | 16.2.12 | NgModule, router | browser (webpack) | 5.1 (node) | 7.8 | 0.13 (the Angular 16 ng new default) | A fresh ng new app built for production against the packed 2.0.0 tarball |
Both use lottie-web 5.13 and livekit-client 2.x.
Stack A bootstraps with bootstrapApplication, provideZoneChangeDetection, provideRouter and provideAnimations().
Stack B also compiles code written against 1.0.7. It references a deprecated 1.0.7 export, which still type-checks in 2.0.0.
2. Peer dependencies
Your app installs these. The SDK uses your copy.
| Package | Declared range | Status |
|---|---|---|
@angular/core, @angular/common, @angular/animations, @angular/router | >=16.0.0 | 16 and 19 exercised; 17, 18 and newer in range |
rxjs | ^7.4.0 | 7.8 exercised |
livekit-client | ^2.0.0 | 2.x exercised |
lottie-web | ^5.10.0 | 5.13 exercised |
- Every peer is required. npm 7+ installs missing peers for you; with yarn classic, install
livekit-clientandlottie-webyourself. - All
@angular/*packages must be the same version as each other, and as the rest of your Angular packages. @angular/routeris required to install, but not to run. The provider injects the router optionally, so an app that never configures routes works through[currentPath].@angular/animationsmust match your Angular version — install it pinned first (see §5).- RxJS 6 is outside the range. Angular 16 and newer accept RxJS 6 or 7, so check
npm ls rxjs. The SDK importsmap,filteranddistinctUntilChangedstraight fromrxjs, which RxJS 6 doesn't support. Upgrade to 7.4 or newer. zone.jsis not a peer. Use the version your Angular release asks for. See zone.js for zoneless apps.
3. What the SDK adds to the host
Runtime dependency (npm installs it for you):
| Package | Range | Notes |
|---|---|---|
tslib | ^2.6.0 | Every Angular app already has it; npm shares one copy when your version matches |
livekit-client and lottie-web are peers, not dependencies, so add them to your own package.json. The install command does this for you.
Bundled inside the package (not installed, cannot conflict):
@revrag-ai/embed-core— inlined into the package's bundle. Never install or import it. Import only from@revrag-ai/embed-angularand@revrag-ai/embed-angular/diagnostics.- The default avatar animation — its own chunk, loaded on demand.
What reaches your bundle:
| Piece | When it loads |
|---|---|
| The SDK itself | With your app |
livekit-client | In its own chunk, when a call starts |
lottie-web | In its own chunk, when the avatar first renders |
| The default avatar animation | In its own chunk, only if your dashboard has no custom avatar |
In examples/angular the whole app's initial bundle is 653 KB (178 KB transferred) — inside Angular's default 1 MB error budget. Before 2.0.0, the same app was 1.01 MB and failed the build.
653 KB is still past Angular's default 500 kB warning budget, so you may see bundle initial exceeded maximum budget as a warning. Raise the initial budget in angular.json if you see it.
The Angular CLI warns: Module 'lottie-web' … is not ESM.
lottie-web ships CommonJS. The warning is harmless; silence it in angular.json:
"allowedCommonJsDependencies": ["lottie-web"]Stylesheet. @revrag-ai/embed-angular/styles/widget.css (~46 KB) is precompiled and required. Add it to styles in angular.json (see the integration guide).
- Every rule is scoped to the widget's own
embed-*classes; there is no global reset. - It works with or without Tailwind, Angular Material or your own design system.
Check the result after installing:
npm ls @revrag-ai/embed-angular # 2.0.0
npm ls @angular/core @angular/common @angular/animations @angular/router # one copy each, all the same version
npm ls rxjs # 7.4 or newer
npm ls livekit-client lottie-web # one copy eachTwo copies of @angular/core are never acceptable.
- This usually happens in monorepos or with linked packages.
- Dedupe them:
npm dedupe, oroverrides/resolutionspinned to your app's Angular version.
4. Angular versions, router, builders and app styles
Angular
| Version | Status | Notes |
|---|---|---|
| 19 | exercised (A) | |
| 17, 18 | in range | Same code path |
| 20 and newer | in range | The peer range is open-ended. @angular/animations is deprecated from 20.2 and npm prints a warning; the SDK still needs it. Angular 22 needs TypeScript 6.0 |
| 16 | exercised (B) | The oldest supported version |
| 15 and older | unsupported | The build fails: the SDK uses signals (Angular 16+) |
Angular 17, 18 and 20+ have not been run by an app.
The SDK's templates use only *ngIf / *ngFor, not the newer @if / @for blocks. Its only Angular 16+ API is signal. Still, run a production build and test the widget before you release.
Angular Router
- With Angular Router set up:
<revrag-embed-provider>follows navigation by itself. It uses the URL path, without?queryor#fragment. - Without Angular Router: pass
[currentPath]. Otherwise the provider readswindow.location.pathnameonce, on start, and never updates. - If you pass
[currentPath], it always wins over the router.
Builders
| Builder | Status | Notes |
|---|---|---|
application (esbuild — the default since Angular 17) | exercised (A) | @angular-devkit/build-angular:application. Also covers ng serve |
@angular/build:application | in range | The same esbuild builder, published in its own package |
browser (webpack — the default up to Angular 16) | exercised (B) | |
browser-esbuild | in range | |
Nx (@nx/angular) | in range | Add the stylesheet to project.json instead of angular.json |
App styles
| Status | Notes | |
|---|---|---|
| Standalone components | exercised (A) | Import EmbedProviderComponent, plus provideAnimations() in your app config |
| NgModule | exercised (B) | Import EmbedModule, plus BrowserAnimationsModule |
SSR (@angular/ssr, Angular Universal) | in range | The widget no-ops on the server |
OnPush components | in range | The SDK updates its own components itself |
Zoneless (provideExperimentalZonelessChangeDetection) | untested | Keep zone.js |
| Angular Material / CDK | in range | CDK dialogs attached to document.body stay visible to the agent |
Animations are required in both styles. The widget's components use Angular animations. Without provideAnimations() (or BrowserAnimationsModule), the collapsed button appears, but Angular throws NG05105: Unexpected synthetic property as soon as the widget opens or shows its nudge. Only development builds throw; a production build shows no error.
zone.js
- With zone.js (the default for most apps): exercised with 0.15 (A).
- Zoneless apps (
provideZonelessChangeDetectionor its older nameprovideExperimentalZonelessChangeDetection, and new projects on recent Angular versions): not exercised. If your app is zoneless, test opening and closing the widget, a full call and live captions before you release.
5. Outside the ranges: workarounds
| Host | Symptom | Do |
|---|---|---|
| Angular 15 or older | Build error: signal is not exported by @angular/core | Upgrade Angular to 16 or newer. There is no workaround |
No @angular/animations installed yet | npm ERR! ERESOLVE — npm picked a newer major than your Angular | npm install @angular/animations@<your Angular version> first, then the SDK (below) |
Still on SDK 1.0.7, no skipLibCheck | TS2307: Cannot find module '@revrag-ai/embed-core' | Upgrade to 2.0.0 |
| yarn berry with PnP | resolution errors | nodeLinker: node-modules in .yarnrc.yml |
--legacy-peer-deps / legacy-peer-deps=true | Missing modules at build time (livekit-client, lottie-web, @angular/animations) | npm skips peers in this mode. Install every peer from §2 yourself |
Plain http:// (not localhost) | Calls fail silently: no mic prompt, no console error | Serve over HTTPS |
Fixing the @angular/animations ERESOLVE. Find your Angular version, install the missing packages at that exact version, then install the SDK:
npm ls @angular/core # e.g. @angular/core@19.2.19
npm install @angular/animations@19.2.19 @angular/router@19.2.19
npm install @revrag-ai/embed-angular livekit-client lottie-webUse the version npm ls printed for you, not 19.2.19.
Do not up- or downgrade the host's unrelated dependencies to fit the SDK.
Apart from Angular 15, every mismatch above has a fix that leaves the host's versions alone.
Do not reach for --force or --legacy-peer-deps to get past ERESOLVE.
They can leave you with an @angular/animations that doesn't match your @angular/core, or with peers missing. Pinning the version, as above, fixes the cause.
6. TypeScript
| Versions | 5.1 (B) and 5.7 (A) exercised; whatever your Angular version requires works: 4.9–5.1 for Angular 16, 5.5–5.8 for 19, 6.0 for 22 |
moduleResolution | bundler (A) and node (B) exercised. Both resolve @revrag-ai/embed-angular and @revrag-ai/embed-angular/diagnostics |
| Types | Bundled, including /diagnostics. No @types package to install |
skipLibCheck | Not needed since 2.0.0. The package's types check cleanly with skipLibCheck: false |
| Strict templates | Stack A runs with strictTemplates: true |
7. Browsers and runtime
| Requirement | Detail |
|---|---|
| Browsers | The browsers your Angular version supports |
| JavaScript | The package ships ES2022 code (fesm2022). The Angular CLI compiles it for your project's browsers, the same way it compiles your own code |
| Calls | WebRTC + getUserMedia, in a secure context (HTTPS, or localhost). Elsewhere the call fails silently: no mic prompt and no console error |
| Storage | sessionStorage is required: the widget doesn't render without it. localStorage is optional. IndexedDB is optional (falls back to memory) |
| Test on | Desktop Chrome and iOS Safari, on the production build. iOS Safari only allows the mic and audio after a user gesture |
| SSR | The widget renders nothing on the server and appears after hydration |
8. Package managers
| Manager | Notes |
|---|---|
| npm 7+ | Installs peers automatically. Expect ERESOLVE only in the §5 cases |
npm with legacy-peer-deps | Doesn't install peers. Install every package in §2 yourself |
| yarn classic | Doesn't install peers: add livekit-client and lottie-web yourself, and @angular/animations / @angular/router at your Angular version if your app doesn't have them |
| yarn berry | Use nodeLinker: node-modules |
| pnpm | Works; pnpm 8+ installs peers by default (auto-install-peers). In a workspace, check pnpm why @angular/core for a single copy |
9. Out of scope
- React, Next.js and Preact use
@revrag-ai/embed-react— see the React integration guide. - React Native has its own package,
@revrag-ai/embed-react-native— see the React Native integration guide. - AngularJS (1.x) isn't supported.
- Vue isn't supported.
- Plain
<script>/ CDN usage without a bundler is untested.
Setup code: Angular integration guide. What changed in each version: Angular releases. Visibility, positioning and screen rules: Advanced provider setup. Still on 1.0.7: Angular 1.0.7 guide.
Support
- Docs: https://docs.revrag.ai
- Email: contact@revrag.ai
- Dashboard: app.revrag.ai