---
title: "Documentation – Relyo"
description: "Add co-browsing for support to websites and Flutter apps: quick start, how a session works, server and project keys."
lang: en
canonical: https://relyo.de/en/docs/
---

# Documentation

Relyo (pronounced /rɪˈlaɪ.oʊ/, “ri-LAI-o”) adds [co-browsing](/en/co-browsing) for support to your website or Flutter app. The user taps “Support” and reads out a code; you see their screen live, point and draw, and take control after a second consent.

## How a support session works

1. **Tap Support.** The user taps “Support” in your website or app. The SDK connects to the server and shows a 6-digit code, valid for 10 minutes and usable once.
2. **Read out the code.** The user tells you the code by phone or chat. You enter it on [relyo.de](/en/), no account needed.
3. **Share.** A dialog with “Share” and “Decline” appears on the user's device. Screen content is only transmitted after “Share”.
4. **Help live.** You see the screen, point with a pointer and draw arrows and circles. During the session the SDK shows a status indicator with “End” that cannot be hidden.
5. **Take control if needed.** You can request control. The user has to allow it in a second dialog; any input of their own ends it at once.

Password fields, payment data and areas you mark are masked on the device itself. Screen content is only forwarded live, never stored.

## Server: relyo.de or self-hosted

The SDK connects to a Relyo server (relay). You have two options:

- **relyo.de**, the free demo service: `relayUrl: 'wss://relyo.de'`. Usable as it is, without warranty, with limits on concurrent sessions and duration (see [terms of use](/en/nutzungsbedingungen)). If you add Relyo for the users of your own website or app, the [data processing agreement](/en/avv) applies.
- **Self-hosted**: one container with relay, console and SDK, for example behind a Cloudflare Tunnel. This is the recommended way for production use.

> **Project key:** The open service without sign-up is not yet enabled on relyo.de. Until then, every website and app needs a project key (`projectKey`) bound to its addresses (origins such as `https://example.com`). Request a key by email to [mail@jochen-maurer.com](mailto:mail@jochen-maurer.com?subject=Relyo%20project%20key). Once the open service is active, simply leave out `projectKey`.



Self-hosting instructions will follow once the repository is public.

## Quick start: web

One script and one link are enough. The SDK only connects when someone taps “Support”.

```html
<a href="#" id="support">Support</a>

<script src="https://relyo.de/sdk/relyo.js"></script>
<script>
  const relyo = Relyo.init({
    relayUrl: 'wss://relyo.de',
    projectKey: 'pk_yourproject', // not needed with the open service
  });
  document.querySelector('#support').addEventListener('click', (event) => {
    event.preventDefault();
    relyo.showCode();
  });
</script>
```

If your page has a Content Security Policy, add `https://relyo.de` and `wss://relyo.de`. How to load the SDK only on click, how it looks in React and Next.js and what exactly the CSP needs is described under [Websites](/en/docs/web).

## Quick start: Flutter

Add the dependency, call `Relyo.init` before `runApp`, wrap the app in `RelyoScope` and offer a support entry, for example in the settings.

```dart
import 'package:relyo_flutter/relyo_flutter.dart';

void main() {
  Relyo.init(
    relayUrl: 'wss://relyo.de',
    projectKey: 'pk_yourapp', // not needed with the open service
    connect: RelyoConnect.lazy, // connect only on “Support”
  );
  runApp(RelyoScope(child: const MyApp()));
}

// In the settings:
TextButton(
  onPressed: () => Relyo.instance.showCode(context),
  child: const Text('Support'),
)
```

Dependency, masking, router and platform notes are described under [Flutter apps](/en/docs/flutter).

## What the supporter sees

- **Websites:** the browser tab with the page, live as page structure (not video), plus mouse pointer, clicks, scrolling and the current address. Not other tabs or programs.
- **Apps:** the app's Flutter UI as a sequence of images, up to 10 per second, plus touches and the current route. Not other apps, system dialogs or the keyboard.
- **Never:** the content of password fields and masked areas. It does not leave the device in plain text.

## For coding agents

Every page of this documentation is also available as Markdown at the same address with `.md` (for example [/en/docs/index.md](/en/docs/index.md)), plus an overview at [/llms.txt](/llms.txt). Give your agent these addresses rather than a summary. Ready-to-copy prompts are under [Websites](/en/docs/web#adding-it-with-a-coding-agent) and [Flutter apps](/en/docs/flutter#adding-it-with-a-coding-agent); agents with skill support find the guide under [/.well-known/agent-skills/](/.well-known/agent-skills/index.json).

The SDK dialogs are currently in German only; English texts will follow.
