SaaS & member dashboards
Answer questions about a plan, workspace or feature while the person is using it. Pass those details to Visitor Data.
Keep chat in the app as people move from screen to screen. Give your team the user context that makes support easier.
Follow the guide ↓Doing it with AI? Start here ↗Answer questions about a plan, workspace or feature while the person is using it. Pass those details to Visitor Data.
Keep each app’s identity clear while the same small team handles all the conversations in one inbox.
Your AI assistant can add the integration to the app it helped build. Give it the docs and test the result, just as you test the rest of your product.
A traditional site loads another document when you follow a link. A single-page app often keeps the same document and replaces the content of the screen. That means a chat widget belongs in the persistent application shell, rather than in a component that is recreated for every route.
You do not need to become a framework expert to understand the goal: one widget, the right project, useful customer data and a conversation that remains available while someone navigates. React, Vue and Angular can all use the JavaScript SDK; a framework that renders on the server needs a browser-only initialization step.
Open Orka → Settings → your project → Installation. Use that project’s ID. The example below uses YOUR_PROJECT_ID, not a real account identifier. Create separate projects for products whose support context should remain separate.
npm install orka-web-sdkCall this helper from your persistent client root after it mounts. The cached promise prevents repeated configuration when routes or components remount. For React, call it in a client effect; for Vue, in the persistent root’s mounted lifecycle; for Angular, in a browser-only application service.
The package reads window, so keep its import out of server rendering. This example matches the default export in the published package.
// orka-client.js — called from the browser after mount.
let sdkPromise;
export function getOrka() {
if (typeof window === "undefined") return Promise.resolve(null);
if (!sdkPromise) {
sdkPromise = import("orka-web-sdk").then(({ default: Orka }) => {
Orka.configure("YOUR_PROJECT_ID");
return Orka;
});
}
return sdkPromise;
}Once your app knows who is signed in, supply the fields your team needs. Your own data provides the values: a subscription, installation date, usage tier or current feature. Call update again when relevant values change.
These attributes help with support; they are not a replacement for authentication or server-side permissions. Explore custom visitor data ↗
// Once your client has the signed-in account data:
const orka = await getOrka();
orka?.update({
name: "Alex Morgan",
email: "[email protected]",
plan: "Pro",
workspace: "Studio Fern",
current_screen: "Billing"
});Keep the widget mounted while people change screens. Use update for changing attributes. The browser reset() method refreshes the current page title and URL but also closes chat, so choose when that behavior is useful.
You can open chat from a Help button with the browser SDK once it has loaded. Avoid inserting a second installation script on every click.
Claude, ChatGPT, Gemini or Grok can help you find the shared layout and add Orka. A coding tool with access to the repository can propose the change directly; a chat-only assistant may give you files to copy.
Replace the placeholder ID, list the fields you want and ask it to explain its changes. Then test a real conversation. A confident “done” from the assistant is not the same as a working integration.
More about installing with AI ↗Add Orka to this single-page application using the official orka-web-sdk package.
Read these docs first: https://penida.gitbook.io/orka-livechat/how-to-add-orka-.../how-to-add-orka-on-your-single-page-application-spa
Use my project ID: YOUR_PROJECT_ID
1. Identify the app's persistent root and client-only lifecycle.
2. Initialize Orka once. Use the package's default export. Do not import browser-only code during server rendering.
3. Send the support fields I choose from existing account state with update(). Do not invent data or include API keys, access tokens or payment credentials.
4. Update useful context after route or account changes. Do not claim reset() securely signs a user out; review account switching separately.
5. Avoid duplicate widgets on navigation or remount. Preserve the current layout and consent settings.
6. Show the changed files and a test plan for navigation, messages, replies and logout.
Fields I want to show in Visitor Data: [LIST YOUR FIELD NAMES HERE]Navigate through several routes and use Back/Forward. Confirm the launcher is not duplicated.
Check Visitor Data with test accounts, then change the plan or relevant app state.
Send a message, answer from Orka and confirm the reply returns to the customer.
Test sign-out and account switching. Do not assume reset alone removes identity or conversation access.
Try a narrow screen, a refresh on a deep URL and any consent rules your app uses.
If a call runs too early, wait for the widget API. Check the project ID, network and browser console if chat does not appear.
Still wondering about something?
Ask a human at Orka ↗
A web app that changes screens in the browser without loading a completely new HTML document for every click. Many React, Vue and Angular apps work this way, and frameworks such as Next.js or Remix can combine server rendering with client navigation.
SaaS founders, Shopify app developers, product teams, agencies and people building with AI. It is especially useful when customers need support inside a signed-in dashboard and your team needs account context.
The basic integration is small: install the package, configure your project once in the browser and test a conversation. Connecting account fields or handling server rendering and logout needs more care. The exact effort depends on your app.
Yes, with a tool that can read and edit your project, or by applying its proposed changes. Give it the official documentation, your project ID and the fields you want. Ask it to explain and test navigation, duplicate loading and account changes before publishing.
Yes. Install it once in the persistent shared layout and set initial ORKA_SESSION data before the widget script. Choose either the snippet or the npm integration so the same project is not loaded twice.
No. Keep the widget attached to the persistent app shell. Send changed visitor fields with update. If you use reset to refresh page title and URL, remember that it also closes the chat.
The published package accesses window. Load it only in the browser, for example through a dynamic import after a client component mounts. Do not import it in server-executed code.
The published orka-web-sdk 1.0.4 source and type declarations export the SDK instance as default. Some older documentation examples show a named import. This guide uses the published package API checked in September 2026.
Do not rely on it for that. The documented behavior is to close chat and send current page context. Test account switching and logout explicitly so the next person cannot inherit the wrong conversation. Ask Orka for the appropriate session flow if needed.
Create or select the right Orka project for each product. All those conversations can flow into one shared inbox. The free Solo plan includes unlimited projects; the team and AI options are listed on the pricing page.
Checked in September 2026. Questions or corrections? [email protected].
One inbox for every app, store and idea you run.
Start with Orka ↗