Documentation

Relyo (pronounced /rɪˈlaɪ.oʊ/, “ri-LAI-o”) adds screen-sharing 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, 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 bar at the top 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). If you add Relyo for the users of your own website or app, the data processing agreement 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 [email protected]. 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”.

<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.

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.

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.

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), plus an overview at /llms.txt. Give your agent these addresses rather than a summary.

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

This page as Markdown