Browse In-App Agent

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.

StatusMeaning
ExercisedAn app on that stack was built against the 2.0.0 package and checked
In rangeThe 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

  1. Known-good stacks
  2. Peer dependencies
  3. What the SDK adds to the host
  4. Angular versions, router, builders and app styles
  5. Outside the ranges: workarounds
  6. TypeScript
  7. Browsers and runtime
  8. Package managers
  9. Out of scope

1. Known-good stacks

Pin to one of these when you can.

StackAngularApp styleBuilderTypeScriptRxJSzone.jsChecked how
A. Angular 1919.2.19standalone, routerapplication (esbuild)5.7 (bundler)7.80.15examples/angular in the SDK repository: production build, then the widget driven in a browser with no errors
B. Angular 1616.2.12NgModule, routerbrowser (webpack)5.1 (node)7.80.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.

PackageDeclared rangeStatus
@angular/core, @angular/common, @angular/animations, @angular/router>=16.0.016 and 19 exercised; 17, 18 and newer in range
rxjs^7.4.07.8 exercised
livekit-client^2.0.02.x exercised
lottie-web^5.10.05.13 exercised
  • Every peer is required. npm 7+ installs missing peers for you; with yarn classic, install livekit-client and lottie-web yourself.
  • All @angular/* packages must be the same version as each other, and as the rest of your Angular packages.
  • @angular/router is required to install, but not to run. The provider injects the router optionally, so an app that never configures routes works through [currentPath].
  • @angular/animations must 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 imports map, filter and distinctUntilChanged straight from rxjs, which RxJS 6 doesn't support. Upgrade to 7.4 or newer.
  • zone.js is 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):

PackageRangeNotes
tslib^2.6.0Every 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-angular and @revrag-ai/embed-angular/diagnostics.
  • The default avatar animation — its own chunk, loaded on demand.

What reaches your bundle:

PieceWhen it loads
The SDK itselfWith your app
livekit-clientIn its own chunk, when a call starts
lottie-webIn its own chunk, when the avatar first renders
The default avatar animationIn 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 each

Two copies of @angular/core are never acceptable.

  • This usually happens in monorepos or with linked packages.
  • Dedupe them: npm dedupe, or overrides / resolutions pinned to your app's Angular version.

4. Angular versions, router, builders and app styles

Angular

VersionStatusNotes
19exercised (A)
17, 18in rangeSame code path
20 and newerin rangeThe 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
16exercised (B)The oldest supported version
15 and olderunsupportedThe 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 ?query or #fragment.
  • Without Angular Router: pass [currentPath]. Otherwise the provider reads window.location.pathname once, on start, and never updates.
  • If you pass [currentPath], it always wins over the router.

Builders

BuilderStatusNotes
application (esbuild — the default since Angular 17)exercised (A)@angular-devkit/build-angular:application. Also covers ng serve
@angular/build:applicationin rangeThe same esbuild builder, published in its own package
browser (webpack — the default up to Angular 16)exercised (B)
browser-esbuildin range
Nx (@nx/angular)in rangeAdd the stylesheet to project.json instead of angular.json

App styles

StatusNotes
Standalone componentsexercised (A)Import EmbedProviderComponent, plus provideAnimations() in your app config
NgModuleexercised (B)Import EmbedModule, plus BrowserAnimationsModule
SSR (@angular/ssr, Angular Universal)in rangeThe widget no-ops on the server
OnPush componentsin rangeThe SDK updates its own components itself
Zoneless (provideExperimentalZonelessChangeDetection)untestedKeep zone.js
Angular Material / CDKin rangeCDK 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 (provideZonelessChangeDetection or its older name provideExperimentalZonelessChangeDetection, 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

HostSymptomDo
Angular 15 or olderBuild error: signal is not exported by @angular/coreUpgrade Angular to 16 or newer. There is no workaround
No @angular/animations installed yetnpm ERR! ERESOLVE — npm picked a newer major than your Angularnpm install @angular/animations@<your Angular version> first, then the SDK (below)
Still on SDK 1.0.7, no skipLibCheckTS2307: Cannot find module '@revrag-ai/embed-core'Upgrade to 2.0.0
yarn berry with PnPresolution errorsnodeLinker: node-modules in .yarnrc.yml
--legacy-peer-deps / legacy-peer-deps=trueMissing 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 errorServe 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-web

Use 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

Versions5.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
moduleResolutionbundler (A) and node (B) exercised. Both resolve @revrag-ai/embed-angular and @revrag-ai/embed-angular/diagnostics
TypesBundled, including /diagnostics. No @types package to install
skipLibCheckNot needed since 2.0.0. The package's types check cleanly with skipLibCheck: false
Strict templatesStack A runs with strictTemplates: true

7. Browsers and runtime

RequirementDetail
BrowsersThe browsers your Angular version supports
JavaScriptThe package ships ES2022 code (fesm2022). The Angular CLI compiles it for your project's browsers, the same way it compiles your own code
CallsWebRTC + getUserMedia, in a secure context (HTTPS, or localhost). Elsewhere the call fails silently: no mic prompt and no console error
StoragesessionStorage is required: the widget doesn't render without it. localStorage is optional. IndexedDB is optional (falls back to memory)
Test onDesktop Chrome and iOS Safari, on the production build. iOS Safari only allows the mic and audio after a user gesture
SSRThe widget renders nothing on the server and appears after hydration

8. Package managers

ManagerNotes
npm 7+Installs peers automatically. Expect ERESOLVE only in the §5 cases
npm with legacy-peer-depsDoesn't install peers. Install every package in §2 yourself
yarn classicDoesn'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 berryUse nodeLinker: node-modules
pnpmWorks; 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