The short version: Dual IRL Stream and Dual IRL Bro need no account with us and never send us your settings or credentials, except the publish credential of a Dual IRL Cloud Streaming Ingest you choose to stream to. An app you link to your Dual IRL account also uses the account service, and one with the Rumble emote sharing switched on sends the public emote list of the Rumble chats it follows, with the key from your Rumble Live Stream API URL, which is used once to confirm each chat and is neither kept nor logged. Your camera and microphone go only to the streaming server you enter, which is a server of ours only if that is a Dual IRL Cloud Streaming Ingest. Your settings and credentials stay on your device and are kept out of Android’s cloud backup and device transfer, except a backup file you export yourself. Features you turn on connect to the platforms involved (Twitch, Kick, Rumble, YouTube and the services they rely on, such as 7TV and BetterTTV). Apart from the Dual IRL account and Cloud Streaming services, our own servers receive only an update check, a few relayed requests and privacy-friendly, cookieless counts, all described below. Dual IRL Control works with your Dual IRL account, and the account and Cloud Streaming services keep the data, logs and recipients described under “What your Dual IRL account keeps” and the sections after it, with how long each is kept and how to have it removed. There is no analytics SDK, no advertising and no crash reporting.
Who this covers
This policy applies to the Dual IRL Stream Android application (“the app”), distributed under the Dual IRL brand, to Dual IRL Bro and Dual IRL Control, and to the dualirl.com website and its browser-source tools.
Dual IRL Bro is a free stream monitoring app. It captures no camera or microphone and never broadcasts. It plays the public live video of the channels you choose to monitor locally on your device, merges their public chat, and can play audio-only web sources you add. Like Stream’s, its in-app updater downloads a newer Bro only when you tap Download & install, checks that it is signed with the Dual IRL key, and hands it to Android’s installer, which asks you to confirm; Bro asks Android’s “install unknown apps” permission for this.
Dual IRL Control is the Android app for your Dual IRL account’s Cloud Streaming. It captures no camera or microphone and never broadcasts; it is a control panel. Unlike Stream and Bro, which work without one, it works with your Dual IRL account, as described under “Your Dual IRL account (Control)” below. The camera and microphone sections apply to Dual IRL Stream only.
It also covers the Dual IRL Accounts service, the sign-in and account service behind the website at dualirl.app that Control and the account page use, and the Dual IRL Cloud Streaming service, which keeps the Cloud Streaming settings of an account that includes Cloud Streaming or once did. What they keep, who receives it and how it is removed is under “What your Dual IRL account keeps” and the sections after it.
Your stream
When you go live, Dual IRL Stream captures your camera and microphone, encodes them into a video stream and sends it only to the streaming server you enter yourself — for example your own RTMP/RTMPS, SRT or SRTLA server, or a platform endpoint you choose. The app sends it directly to that address and does not copy it or relay it through any server of ours. If that address is a Dual IRL Cloud Streaming Ingest (for example one you open in Dual IRL Stream from Dual IRL Control), the destination is a server of ours, which receives the stream and the publish credential for that Ingest. Your stream keys and passphrases go only to the destination you entered.
What stays on your device
Your Dual IRL Stream and Dual IRL Bro settings — including stream keys, server URLs and passphrases, a Twitch login token, a Rumble Live Stream API URL (which contains a secret key for your channel) and a YouTube Data API key — are stored on your device. We never receive them, and those apps use no account or backend of ours that holds them. Dual IRL Control is the exception, as described below, and so is the publish credential of a Dual IRL Cloud Streaming Ingest, which goes to that Ingest when you stream to it, and so is the key in your Rumble Live Stream API URL if you switch on the optional Rumble emote sharing in a linked app: it goes, once for each chat that is shared, to our Accounts service and token broker, which use it to ask Rumble about that chat and neither keep nor log it. Apart from that, your Twitch login token, Rumble Live Stream API URL and YouTube Data API key are sent only to the platform each belongs to (Twitch, Rumble or Google), never to us or to your stream destination.
These stored credentials are excluded from Android’s cloud backup and device-to-device transfer. The exception is a backup you export yourself from Settings → Backup & restore in Dual IRL Stream: that file is encrypted with a password you choose and includes the stream keys, passphrases, Rumble URL and YouTube key you have entered. You decide where to save it, we never receive it, and Dual IRL Bro can import it. Uninstalling the app removes the stored copies.
Platforms you connect
Features you turn on contact the platforms involved, directly from your device or browser except where a request is relayed through our backend, as described under “Our own services”. A platform contacted directly sees your IP address and what you ask it for; a relayed request shows it our backend’s IP address instead. Each platform is governed by its own privacy policy: Twitch, Kick, Rumble, Google (YouTube), 7TV and BetterTTV.
- Channel status. A Twitch or Kick channel name, your Rumble Live Stream API URL or a YouTube channel handle with your YouTube Data API key lets the app read a channel’s public live status and viewer count for the status badge. Signing in to Twitch is optional and uses Twitch’s standard device-authorization flow.
- Live chat. The chat overlay reads public chat from Twitch, Kick, Rumble and YouTube, and shows it only to you, the operator. Kick chat and Rumble’s real-time chat stream use anonymous read-only connections that carry no account or key; Rumble chat also reads your channel’s Live Stream API with your URL, and YouTube chat uses your Data API key. Emote and badge images load from the platforms’ own image servers, or from another host a chat message points to, which then sees the IP address of the device showing the overlay. Both apps fetch 7TV and BetterTTV emotes by default; the “Enable 7TV/BTTV emotes” chat setting turns that off.
- Bro video. Bro plays the public live video of Kick, Twitch, Rumble and YouTube channels you choose by loading the same public pages and streams the platforms serve to any viewer.
The in-app operator overlays drawn inside Dual IRL Stream (chat, stats, viewer count) are shown only to you and are never part of your broadcast video. The website browser-source tools below are different: you deliberately add them to your own scene, so they appear in your broadcast if you include them.
Our own services
Beyond the platforms above, these are the only things that contact us. In Dual IRL Stream and Dual IRL Bro they are the update check, the relayed chat badge requests and the counting, and, for an app you link to a Dual IRL account, that account’s service; the website tools use the relayed requests and the counting too.
- Update check. By default each app asks
dualirl.comfor a small file listing the latest published version number each time it launches, so it can tell you if a newer build exists. You can turn that off with the “Check automatically on launch” switch in Settings → App updates. The request sends no account, device identifier, advertising id or information about how you use the app, though like any web request it shows your IP address to our server. Dual IRL Stream can also download its own update; that download is counted, as described under “Counting”. - Relayed requests. Some features go through our own backend at
api.dualirl.combecause a platform requires a credential we hold or refuses direct calls: Twitch sender-badge images, YouTube channel-member badge lists, the Twitch and Rumble numbers in the website tools, a YouTube channel’s current live video, and Kick and Rumble chat in the website chat tool. The backend receives only what the relay needs, such as a channel name, a video or chat id or, for Rumble, the key from your Live Stream API URL, and passes it on; the platform then sees the backend’s IP address rather than yours. A Rumble key, a video id, a chat id or a channel handle is never logged. The backend also holds public Rumble emote lists that were read from some chats’ public chat pages, by us or from the app of an account holder who switched on the Rumble emote sharing described under “What your Dual IRL account keeps”, never a viewer’s data, and returns them for the chat id it is asked about. Your YouTube Data API key is never sent to us. - Counting. We count page loads and the requests above with self-hosted, GoatCounter analytics, as described under “This website” below.
Your Dual IRL account (Control)
Dual IRL Control works with your Dual IRL account. You link it by approving a short code from your account on dualirl.app, and the session that link creates is kept on your device until you unlink the app, which asks Dual IRL to end it; if Dual IRL cannot be reached, the app still forgets the session on your device, and you remove the app under Linked apps in your account settings on the website to end it.
Control talks to the Dual IRL Accounts service at dualirl.app over HTTPS to read your account details and your Cloud Streaming status and to carry out what you ask: starting and stopping your server and stream, managing your extra Ingests, Destinations and Anti-Drop settings, and the saved OBS configuration. An Ingest’s connection details, including its publish password, are read only when you ask to see, copy or open them in Dual IRL Stream, and are dropped again when you hide them. For an account with Cloud Studio, Control asks Accounts for a short-lived ticket and connects to your studio’s OBS Remote to switch scenes and manage overlays. Control plays a muted preview of your Ingest, and for an account with Cloud Studio of your studio’s Program output, through the Accounts service only when you ask for it.
By default Control asks dualirl.com for its own small version file each time it launches; you can turn that off with the “Check automatically on launch” switch in Settings → App updates. Its settings, such as which cards you have collapsed and the update-check switch, stay on your device. Control has no analytics SDK and no crash-reporting service, and its only permission is network access. The Accounts service does count each action Control carries out through it (linking, unlinking, starting or stopping your server and stream, and changing Ingests, Destinations and Anti-Drop settings) on our own self-hosted analytics as a hit against a fixed event name, never your account, your stream details or the real request.
Dual IRL Stream and Dual IRL Bro can be linked to a Dual IRL account in the same way (Settings → Dual IRL Account) and then use the Accounts service for the Cloud Streaming controls and previews they offer. Neither needs an account, and an app that is not linked sends nothing to the Accounts service.
Sharing Rumble emotes (optional). A linked Stream or Bro has a Share Rumble emotes with Dual IRL switch (Stream: Settings → Chat settings; Bro: Settings → Channel settings), off until you turn it on. While it is on, the app sends, for each Rumble chat it follows through your Live Stream API URL, that chat’s id, the public emote page Rumble serves for it and the key from your Live Stream API URL (the key only, not the URL) to the Accounts service with the app’s session, which passes them to the token broker that runs on our own server. The page is Rumble’s public popup page, which holds nothing about you. The key is a credential, so it has one use: the broker asks Rumble once whether it shows a live stream of that chat, which stops a list being kept for a chat your own Rumble access does not show, and neither the Accounts service nor the broker logs or keeps it. The broker keeps only the list of emotes it reads from the page, with your account’s identifier, as described under “What your Dual IRL account keeps”. Withdraw what I shared in the same settings removes it.
What your Dual IRL account keeps
You create a Dual IRL account on dualirl.app by entering your email address and the one-time code we email you, and you sign in the same way or by approving a code from Dual IRL Control. The Dual IRL Accounts service behind that website keeps the categories of data below about you. For each, this says how long it is kept, and “Closing your account and removing your data” below says how it is removed and what closing the account keeps.
- Your account. Your email address, when you verified it, when the account was created and, if you close it, when it was closed, and which Dual IRL features it includes. The account is created the first time you enter a correct code. It is kept for as long as the account exists, and closing the account does not delete it.
- Sign-in codes. For every email address that asks for a code, whether or not it has an account: the address, a hashed form of the code, when it was created and when it expires, and the number of wrong guesses. A code is valid for ten minutes. The record is removed when the code is used, when a newer code replaces it, when too many wrong codes are entered, or when a cleanup that runs every ten minutes finds it expired.
- Sign-in sessions. One for each place you are signed in: a hashed form of its sign-in token, your account, and when it was created and when it expires; for an app you linked, also the installation’s id, which app it is, its release channel and version, and when it was last used. A session ends 30 days after you last use it or 180 days after it began, whichever comes first, and sooner if you sign out, remove the linked app or close the account. The website keeps you signed in with a cookie, and sets a second, short-lived cookie only while you connect a platform.
- App link requests. When you link an app, its request is kept for ten minutes: hashed forms of the two codes, the installation’s id, app, channel and version, when the request was created and when it expires and, once you approve it, your account. It is removed when the app collects its session or when the cleanup finds it expired.
- Connected platforms. If you connect Kick or Twitch: your id and username on that platform, the access and refresh tokens it gave us (stored encrypted), the permissions you granted, when you connected and when the access token expires. They are kept until you disconnect the platform or close the account.
- Preview records. While you watch a Cloud Streaming preview, a record of the preview’s path and identifier, your account, a hashed form of your sign-in session and the feature that admitted the preview (Ingest or Cloud Studio). It is removed once the Cloud Streaming service confirms the preview is gone. That happens when your browser ends the preview or, if it never does, at the first of the service’s checks (every fifteen seconds) after your sign-in session ends or your account stops being allowed to watch it; until the service confirms it, the record stays and is tried again.
- Shared Rumble emotes. Only if you switched on the Rumble emote sharing in a linked Dual IRL Stream or Dual IRL Bro. For each Rumble chat the app shared: your account’s identifier, the chat’s id, the list of emotes read from that chat’s public emote page (each emote’s name and the address of its image on Rumble’s own servers) and a number that orders it against the others. The page itself, your Live Stream API URL and its key are not kept. The token broker keeps this in its emote file, not the Accounts service. It keeps at most 16 chats for an account, 8 accounts for a chat and 256 in all, and a newer one replaces the oldest under those limits. The list is returned, without your account, to anyone who asks the broker for that chat’s emotes by its id (the website chat tool does) when we have uploaded no list for that chat ourselves, combined with the lists other accounts shared for it. It is kept until you withdraw it with Withdraw what I shared, until the same account shares that chat again, until newer ones replace it under the limits above, or until you close the account.
- Short-lived records in memory. These are never saved to disk and are lost whenever the service restarts: the times of recent code requests, code checks, Rumble emote sharing requests and link and connection attempts, counted against a network address, an email address or an account for up to an hour (up to a day for how many codes were sent to one email address) to limit abuse; the details of a platform connection while you complete it, valid for ten minutes; and the names of your preview paths, reused for a few seconds. An entry that has run out is deleted only when the same address, email address or account next makes an attempt, when the service is holding too many of them, when someone next starts connecting a platform, or when it next reads anyone’s preview paths, so on a quiet service it can stay in memory until then or until the service restarts.
What Cloud Streaming keeps
Only an account that includes Cloud Streaming, or once did, has Cloud Streaming data. The Dual IRL Cloud Streaming service keeps these categories of it under your account’s identifier. Closing your account stops your broadcast and tears down your Cloud Studio server if you have one, but it does not delete the records below. Neither does taking the last Cloud Streaming feature off your account, which also stops your broadcast and tears down your Cloud Studio server, if you have one, before the change is saved. The sections after this one say how to remove the records and how to ask us to remove them; an account that no longer includes any Cloud Streaming feature can no longer use the control panel to do it.
- Destinations. For each Destination: its name, platform, publish address (for an SRT address that can include a passphrase), stream key, whether it is on, its bitrate ceiling and its video codec. Kept until you delete the Destination.
- Ingests. Your main Ingest and any extra ones: its identifier, server, path and public host, its publish username and password, its read password and when it was created. When you delete an extra Ingest, its record is removed once the service has confirmed that no publisher is still connected to it and that it has stayed empty for ten seconds; if that cannot be confirmed, for example because the Ingest server cannot be reached, the record stays and the service keeps trying, about every ten seconds. Your main Ingest is kept with your account.
- Anti-Drop settings. Your bitrate thresholds, round-trip trigger, retry count, instant-recovery setting, scene names and output bitrate cap. Kept with your account.
- Your server. Whether your Cloud Studio server is on, how it is doing and when that last changed; while a server exists, the details of the machine that runs it (the infrastructure provider’s id, name, addresses and region, and the passwords and tokens the machine was started with); and Destination changes the server has not yet confirmed, which include those Destinations’ publish addresses and stream keys. Kept with your account.
- Saved OBS configuration. A snapshot of the scene collections and profiles in your studio’s OBS, which can contain addresses or keys you entered in them, with its size and when it was saved. Kept until you discard it.
- Preview records. For a preview of your Ingest or Program output that you start in the Cloud Streaming control panel: a hashed form of your control-panel session, the preview’s path and its identifier. Removed once the service confirms the preview is gone, which happens when your browser ends it or, if it never does, when your control-panel session ends or expires. If that cannot be confirmed after a few tries, the record stays and the service tries again when it next restarts.
- Server start times. The times of your recent server starts, used to apply the daily limit on starts. An old entry is dropped only when your account next uses Cloud Streaming, so the times stay after you close the account.
- Records of our own actions. If we suspend your account or change its limits: whether it is suspended, the kind of suspension, a case reference and when, any changed limit, and a history of those actions with our notes. These are written only when we act, and the service has no way to delete them.
Logs
The services also write logs that can name you:
- Accounts service log. Your email address, when a request for a sign-in code goes over the limit, when a sign-in email cannot be sent, when a code cannot be created and when a code cannot be checked because the record of it could not be saved; and, when a Cloud Streaming preview cannot be tracked, the preview’s path and, if its record could not be saved, its session identifier.
- Cloud Streaming service log. Your account’s identifier, when your Cloud Streaming records cannot be read, when an Ingest you removed still has a publisher connected, when a publisher is cut for exceeding your bitrate limit and when we suspend your account, release it or change its limits, with the case reference we supply for those actions.
- Cloud Streaming web server log. Each request to the Cloud Streaming service’s public address, including Control’s direct connection to your studio’s OBS Remote, with the details a web server records for a request, such as the requesting network address and the address requested, with the ticket value in that address removed.
Nothing in our deployment configuration sets how long any of these logs is kept: each stays for as long as the server’s own logging keeps it. Closing your account does not erase those lines.
Who receives it, and why
We do not sell any of this data. It goes to these recipients, and only for the reasons given:
- The email delivery service we send your sign-in code through. It receives your email address and the message containing your code and its expiry, for every address that asks for a code, whether or not it has an account, so that the code reaches you. Nothing in our deployment configuration sets how long that service keeps the message.
- Our own self-hosted analytics service. It counts what happens on the account website: signing in, signing out, closing the account, connecting or disconnecting a platform, linking or removing an app, sharing or withdrawing Rumble emotes and each Cloud Streaming action, and the loads of the account page. Each is a hit against a fixed event name, along with your browser’s user agent and language and your network address, from which it derives a rough country or region and which it does not store; never your email address, your account, your session or the request itself, as described under “This website” below. Nothing in our deployment configuration sets how long it keeps those hits.
- Anyone who asks for a chat’s emote list. The website chat tool, and anyone else who asks the token broker for a Rumble chat’s emotes by its id, receives the emotes shared for that chat, never the account that shared them.
- The platform you connect (Kick or Twitch). It receives your approval of the connection, the exchange of that approval for the tokens we keep, and one request for your username on it, so that the connection can be made. It is governed by its own privacy policy, linked under “Platforms you connect” above.
- The infrastructure provider that hosts your Cloud Studio server. When a server is started, the provider receives a label that includes your account’s identifier, a generated name for the machine and the start-up instructions, which carry the passwords and tokens the machine runs with, including the read credentials of your extra Ingests, and your Anti-Drop settings; later we ask it to list and delete the machine by that label, and when monitoring is on it also holds the machine’s usage metrics. The server runs on the provider’s infrastructure, so the provider hosts everything the server handles: your live Ingest video, your saved OBS configuration, which the server downloads from the service when it starts and sends back while it runs and when it stops, and your Destinations with their publish addresses and stream keys, which the service sends to the server while it runs so that it can send your stream on. Nothing in our deployment configuration says how long the provider keeps these once the machine is deleted.
- The Destinations you set up. Each Destination that is on receives your stream at its publish address with its stream key, sent by the Cloud Streaming service, and is governed by its own privacy policy.
Closing your account and removing your data
Closing your account (Account settings → Danger zone → Close account on dualirl.app) cannot be undone. It stops your broadcast and tears down your Cloud Studio server if you have one, deletes every connected platform with its stored tokens, ends every sign-in session, including every linked app’s, removes every Rumble emote list your account shared, and marks the account closed so that you cannot sign in to it again. If the token broker cannot remove the emote lists, the account is not closed and you are asked to try again.
It does not delete your account record (your email address, the dates, the features the account included and the date you closed it), the Cloud Streaming records listed above, the logs, or what the recipients above already hold. Closing the account does not currently delete these, and a closed account cannot sign in to remove them itself.
You can remove most of what is kept before you close the account:
- Sessions. Sign out in Account settings, and remove a linked app under Linked apps to end its session.
- Connected platforms. Disconnect Kick or Twitch under Connected platforms.
- Shared Rumble emotes. Tap Withdraw what I shared in Dual IRL Stream’s Chat settings or Dual IRL Bro’s Channel settings.
- Cloud Streaming data. In the Cloud Streaming control panel, delete a Destination or an extra Ingest while your account includes any Cloud Streaming feature, and discard the saved OBS configuration with Reset saved OBS configuration while it includes Cloud Studio.
- Codes and previews. Sign-in codes, app link requests and preview records end by themselves, as described above.
To ask us to remove anything else, including anything kept after you have closed the account, email privacy@dualirl.com.
Website tools
The free browser-source tools on this site run in your browser or your streaming software. Their settings, including channel names, any Rumble URL, YouTube key or RTIRL key and your home point, are kept in the overlay URL’s # fragment when the builder generates it, and browsers do not send a fragment to a server. The location tracker also accepts non-sensitive options (such as shape, zoom or size) written by hand in the URL’s ? query, which the browser does send to this site’s server; its home point and RTIRL key are read from the fragment only. A page load of each tool is counted like every other page of this website.
- Weather & time overlay. Sends the latitude and longitude it shows weather for to Open-Meteo, which returns weather and time zone, and to OpenStreetMap’s Nominatim service, which returns a place name, and, only if you supply an RTIRL pull key, polls RTIRL. By default the displayed place is coarsened to state and country; the coordinates sent to those services are not coarsened, and you can opt into a finer displayed level in the builder. Weather & time data is by Open-Meteo (CC BY 4.0) and place names are © OpenStreetMap contributors; governed by Open-Meteo and the OpenStreetMap Foundation.
- Platform-stats and viewer-count widgets. Make no requests until you configure a channel, then read its live status and viewer count: Kick directly from your browser, and Twitch and, if you supply your Rumble Live Stream API URL, Rumble through our backend, which holds the Twitch app credential so your browser never needs one and relays only the key from your Rumble URL to Rumble.
- Fan Finder. Sends the Kick channel and username you submit directly from your browser to Kick, and nothing until you submit. They are form inputs, never part of this site’s URLs or access logs.
- Merged chat overlay. Reads public Kick, Twitch and YouTube chat, and Rumble chat if you give it your Rumble Live Stream API URL, in the same read-only, anonymous ways as the app’s chat overlay, with Twitch badges, Kick and Rumble chat, and YouTube handle and member-badge lookups going through our backend as described above. It fetches 7TV emotes by default; if you also enable 7TV namepaints (off by default), it looks up each Twitch chatter’s account id with 7TV. A YouTube Data API key you supply goes from your browser only to Google. Emote and badge images load from the platforms’ own image servers or the host a chat message points to.
- Location tracker overlay. A label-free minimap following your device’s live GPS. It loads map tiles from OpenFreeMap, which sees the IP address of the device and the map area you are in, that is your live route, and, only if you supply an RTIRL pull key for an off-device rig, polls RTIRL with that key. Because it broadcasts live location it fails hidden: it renders nothing until you set a private home point, blacks the map out near home, and hides when GPS is unavailable or stale or the map fails to load. Your home point is compared only in your browser and is never transmitted or drawn. Map resources are attributed as OpenFreeMap © OpenMapTiles Data from OpenStreetMap; governed by OpenFreeMap’s terms and privacy policy and the OpenStreetMap Foundation.
Where a tool shows a condition, status or emoji icon, it loads it as an image from jsDelivr (Twemoji, CC BY 4.0) instead of relying on your device’s own emoji font.
What the app does not do
- No analytics SDK and no third-party usage tracking or telemetry. The exceptions are our own self-hosted counting of requests to our backend and of Control’s actions, described above, which records only the categories our page-load analytics record, never a channel name, request path or per-device identifier (see “This website” below).
- No crash/error reporting services.
- No advertising and no advertising identifiers.
- No selling of personal data, and no sharing of it beyond the recipients named under “Who receives it, and why” above. Dual IRL Stream and Dual IRL Bro collect none to begin with, and Dual IRL Control uses only the account details described above. A Dual IRL Stream or Dual IRL Bro you link to your Dual IRL account uses only those account details and the optional Rumble emote sharing described above.
- No account, sign-up, or profile with us for Dual IRL Stream or Dual IRL Bro. Dual IRL Control works with your Dual IRL account, as described above. Either app can optionally be linked to a Dual IRL account you already have, as described above.
- No access to your contacts, photos, or files.
- No background-location permission, and no location tracking or storage by the app itself. The app requests only approximate (coarse) location, only while the app is open or a stream is live, and solely to hand to an operator-added web-source overlay that asks for it, such as the weather or location-tracker overlay — see the permissions table below.
This website
The dualirl.com website uses a small amount of privacy-friendly, cookieless analytics — self-hosted GoatCounter running on our own server, not Google. It records page views, referrers, browser, operating system, language, screen size, a timestamp and — derived from your IP address, which is not stored — a rough country and, for some larger countries such as the US, an approximate region, never a precise location. There are no cookies, no cross-site tracking and no personal identifiers; we cannot tie a visit back to you. It is on every page of this website, including the browser-source tools, and no third-party analytics or trackers are involved. Our public Beta copy of the website counts the same way into a separate analytics site, and a private preview copy records no page views. The weather and location-tracker overlays report a fixed page path rather than the page’s actual URL.
The same counting covers the requests to our backend described above and the six APK download links (Stream, Bro and Control, each with a separate Release and Beta build), each counted once per actual download request, so we can see aggregate Release-versus-Beta download counts per app, never who downloaded which. The in-app updater’s download of an available update, in Stream and in Bro, is counted too. No other information about your device or the app is sent.
Permissions and why they’re needed
These are Dual IRL Stream’s permissions:
| Permission | Why |
|---|---|
| Camera | Capture the video you stream. |
| Microphone | Capture the audio you stream, and — while the preview is open before you go live — measure the input level for the on-screen mic meter. Audio is never written to a file or sent anywhere except your stream. |
| Internet & network access | Send your stream to the server you choose, check dualirl.com for the latest version number, reach the Dual IRL Accounts service (dualirl.app) if you link the app to your Dual IRL account, and, for forced-network or SRTLA bonding, request, hold and bind the stream to specific Wi-Fi and cellular networks. Bonding can keep mobile data active alongside Wi-Fi, which may use cellular data even while Wi-Fi is connected. |
| Foreground service | Keep streaming reliably while the app is backgrounded or the screen is off. |
| Wake lock | Prevent the device from sleeping mid-stream. |
| Notifications | Show the ongoing “streaming” status notification. |
| Approximate location (coarse, optional) | Requested only so that a web-source overlay you deliberately add can use your location (e.g. the weather or location-tracker overlay). The app holds no location itself. It is approximate, foreground-only and can be denied — with it denied, those overlays simply don’t get a location. |
Dual IRL Bro is a monitor, so it asks for far less — no camera, microphone, or location:
| Permission | Why |
|---|---|
| Internet & network access | Fetch the public live video and chat of the channels you choose to monitor, check dualirl.com for the latest published version number and, if you link Bro to your Dual IRL account, reach the Dual IRL Accounts service (dualirl.app). Bro never broadcasts. |
| Foreground service (media playback) | Keep an audio-only web source playing while Bro is in the background, if you add one. |
| Notifications | Show the ongoing notification required by that audio-playback service while it runs. |
| Install apps | Let Bro’s in-app updater hand a newer Bro that you chose to download to Android’s installer, which asks you to confirm. Bro installs nothing else. |
Dual IRL Control asks for even less — no camera, microphone, location, or notifications:
| Permission | Why |
|---|---|
| Internet & network access | Reach the Dual IRL Accounts service (dualirl.app) to link your account and manage your Cloud Streaming, connect to your studio’s OBS Remote and play the Ingest and Program previews you ask for, and check dualirl.com for the latest published version number. |
Children
The apps are not directed to children, and we do not knowingly collect information from children. Dual IRL Stream and Dual IRL Bro collect no personal information at all, and Dual IRL Control only works with an existing Dual IRL account. A Dual IRL Stream or Dual IRL Bro you link to a Dual IRL account likewise only works with an existing one.
Changes to this policy
If this policy changes, the updated version will be posted on this page with a new “Last updated” date.
Contact
Questions about privacy? Email privacy@dualirl.com.