Nexora

Data safety

How the Nexora app handles data. This page is generated from the answers Nexora gives on the Google Play Data safety form and says the same as the privacy policy.

Effective 10 October 2026

Effective 10 October 2026. It matches the answers Nexora gives on the Google Play form.

What leaves the device

Your sources, channels, favourites, watch history and settings are stored on your device and are removed with the app. Nexora has no accounts and no server that receives your data.

FlowGoes toDeclared?Why
Playlists, guides, streams, add-on and Jellyfin/Emby requestsThe servers the user addedNoRequests to services the user chose, under their own policies; Nexora (the developer) never receives them.
Title look-ups and subtitle requests (NX-DEC-424, NX-DEC-910/911)The catalog and subtitle add-ons the user turned onNoA title's name (and year) to match it across sources; for subtitles, the playing file's name, size and hash; genres and people's names for suggestions and cast pages (a person page may search those add-ons for the person's name, NX-DEC-1112). Once a day on an unmetered network, up to 12 catalog page requests to the user's own installed catalogs so cast pages work (NX-DEC-1115); what they return is kept on the device only (credits index, no-backup storage, NX-DEC-1111). Requests to services the user chose; nothing reaches the developer.
Jellyfin/Emby session reportsThe user's own home media serverNoThe device name, a random per-installation device ID and playback start/stop, as those servers expect.
Add-ons store lists (Official catalog, Community list, blocklist)Nexora's hosting (GitHub Pages)NoPlain downloads of public files; nothing about the user is sent (the host sees the network address, as any web request).
In-app update policy (app-update.json, NX-DEC-1190) and Google Play's in-app update checkNexora's hosting (GitHub Pages); Google PlayNoWhen the app's main screen opens (release builds), a plain download of a public file with the newest and minimum version (nothing about the user is sent; the host sees the network address), and Play's own check whether a newer Nexora build exists for this device, which Google Play runs under its terms.
Peer-to-peer playback and downloads (when the user turns it on)Other peers in the swarm, the DHT, the torrent's trackers and, when it names fewer than five, six public trackersNo (disclosed in the app and policy)Direct user-initiated peer traffic with a notification; not collected by the developer (NX-DEC-951/954/955).
Phone ↔ TV pairing and sync (including automatic sync, typed text and backups)The user's other device on the same networkNoLocal and end-to-end encrypted, except the TV's optional "Back up or restore in a browser" page, which is plain HTTP on the local network behind a one-time code (NX-DEC-1013).
Pairing QR opened by a phone's own cameraNexora's website (GitHub Pages)NoThe page loads like any web page (the host sees the network address); the pairing code stays in the address fragment and is never sent (NX-DEC-946).
Casting, "Open in another app" and "Play with" (NX-DEC-1130–1138, Pro: NX-DEC-1170–1174)The renderer or app the user picks, on the same deviceNoThe stream's address (which can contain the provider sign-in), its title, start position, an add-on's subtitle links and, for MX Player, the stream's request headers — handed over at the user's request (explicit intent, no chooser); the app returns only where it stopped. Nexora Pro (round 15): a Jellyfin/Emby link carries the user's own server access key as api_key (moved from the request header so the app can open it); a torrent goes as a link to Nexora's own on-device stream (127.0.0.1, per-session token) while Nexora keeps the torrent connected with a visible notification.
Crash recordsStay on the deviceNoThe app's own short crash record; shared as editable text when the user sends "Report a problem" through a support-email draft or fallback share sheet; its count range and latest exit kind also accompany an explicit diagnostic report when crash sharing is on. (Firebase Crashlytics, below, sends crash reports only when the user turned sharing on.)
Google Play Billing (Nexora Pro)Google PlayNoPlay collects payment data directly; the app learns the plan, whether it is active and whether a trial is offered, and keeps only the time Play last confirmed Pro.
Google code scanner (phone: scan the TV's pairing QR code)Google (ML Kit)Yes — see belowML Kit "encrypts the data in transit using HTTPS" and sends device information, app information, per-installation identifiers, performance metrics, API configuration, event types and error codes, mapped by Google to App info and performance and Device or other IDs (https://developers.google.com/ml-kit/android-data-disclosure).
Usage statistics (only when the user allows "Share usage statistics"; off until then)Google Analytics for Firebase (Google, as Nexora's service provider / processor)Yes — see belowFeature-usage and playback-quality events from the fixed allowlist below, with fixed values only; Firebase adds its app-instance ID, device and app information, its automatic events (including Google Play in-app purchase events for Nexora Pro) and an approximate location Google derives from the IP address. Over HTTPS.
Crash reports (only when the user allows "Send crash reports"; off until then)Firebase Crashlytics (Google, as Nexora's service provider / processor)Yes — see belowJava/Kotlin crash and ANR reports (stack trace, exception details, device state, a Crashlytics installation ID); since NX-DEC-1152 also the fixed crash keys below, reports of handled errors with their message removed (at most 10 per session), and explicit Settings problem reports (at most three per session) and — only when usage statistics are on too — the recent allowlisted events as breadcrumbs. Over HTTPS. Debug builds (unless a developer turns on the debug-only Firebase test mode), Firebase Test Lab / Google Play pre-launch devices (NX-DEC-1345) and builds made without Firebase send nothing.

Answers on the Play Data safety form

QuestionAnswer
Does your app collect or share any of the required user data types?Yes (Google code scanner on the phone, and the optional usage statistics and crash reports)
Is all of the user data collected by your app encrypted in transit?Yes (ML Kit, Google Analytics for Firebase and Firebase Crashlytics all use HTTPS)
Do you provide a way for users to request that their data is deleted?Yes — by e-mail to greate43.sk.dev@gmail.com; turning "Share usage statistics" off also resets the analytics data and the app-instance ID on the device, and turning "Send crash reports" off deletes unsent crash reports.

Data types

Every data type not listed here is neither collected nor shared.

Category → typeCollectedSharedProcessed ephemerallyRequired or optionalPurposes
App activity → App interactionsYesNo (Google processes it as Nexora's service provider)NoOptional (off until the user allows it on the consent page or in Settings → Storage & privacy, phone and TV: "Share usage statistics")Analytics
App info and performance → Crash logsYes (Firebase Crashlytics: stack traces and exception details of Java/Kotlin crashes and ANRs, and of handled errors with their message removed; the fixed crash keys; no NDK)No (Google processes it as Nexora's service provider)NoOptional (only when "Send crash reports" is on)Analytics
App info and performance → DiagnosticsYesNoNoOptional (the code scanner, only when the user scans a pairing QR code; the device, app and crash-time diagnostics Firebase adds and Nexora's crash keys, only when crash reports are on; the playback-quality ranges, only when usage statistics are on)App functionality, Analytics
Location → Approximate locationYes (derived by Google from the connection's IP address, only when the statistics switch is on; the app itself reads and sends no location)No (Google processes it as Nexora's service provider)NoOptional (only when the usage-statistics switch is on)Analytics
Device or other IDs → Device or other IDsYes (the Firebase app-instance ID and the Crashlytics installation ID, only when sharing is on; and the Google code scanner's per-installation identifiers)NoNoOptional (only when sharing is on, or the user scans a pairing QR code)App functionality, Analytics
Financial info → Purchase historyYes (Firebase Analytics automatically records Google Play in-app purchase events — the Nexora Pro product and its price — only when sharing is on; since NX-DEC-845 Nexora also sends purchase_started / purchase_completed with only the plan (monthly, yearly, lifetime) and whether a free trial applies — no price, order or account)No (Google processes it as Nexora's service provider)NoOptional (only when sharing is on)Analytics

App interactions, Crash logs and Purchase history come only from the optional usage statistics and crash reports below. The Diagnostics and Device or other IDs rows come from them (only when you allow sharing) and from Google's code scanner, which the phone app uses only to scan the TV's pairing code (the TV app has no scanner). Google describes the scanner's data at ML Kit's data disclosure. Nexora does not use the advertising ID.

Usage statistics and crash reports (Google Analytics for Firebase and Firebase Crashlytics)

Nexora asks once, on first start or later in Settings ("Share usage statistics and crash reports"), whether you allow usage statistics and crash reports. Sharing is off until you allow it (opt-in); accepting the terms is not that permission, and developer debug builds never collect. When you allow it, Nexora uses Google Analytics for Firebase and sends only the events below, with fixed values, and Firebase Crashlytics sends a report when the app crashes or stops responding. Nexora never sends what you watch, titles, links, add-on or source names, searches or anything you type, adds nothing of its own to crash reports, and never uses your advertising ID or Android ID; ad personalisation and Google signals are off. Crash reports are not anonymous: they contain the stack trace and technical details of the error. Google processes the data for Nexora as a service provider; statistics are kept for 2 months and crash reports for up to 90 days. Turning sharing off stops collection at once, resets the analytics data and the app-instance ID on your device and deletes crash reports not yet sent; to ask Nexora to delete data already collected, e-mail greate43.sk.dev@gmail.com.

EventWhenParameters (fixed values only)
screen_viewedA main screen opens (once per change)screen, form_factor
feature_usedA feature is usedfeature, form_factor
play_startedA new playback starts (not a retry or reconnect)play_kind, form_factor
source_addedA new source's first import succeedssource_type, form_factor
addon_installedA JSON add-on is installed (count only)form_factor
setting_changedA counted switch is flipped (any settings screen, or Sync now)setting, state, form_factor
app_openedThe app comes to the foregroundform_factor
session_lengthThe app goes to the backgroundsession_bucket, form_factor
free_limit_reachedFree's daily viewing allowance refuses or stops playback (NX-DEC-845)kind, form_factor
paywall_viewedThe Nexora Pro page opensfrom, form_factor
purchase_startedGoogle Play's purchase sheet opens for a planplan, trial, form_factor
purchase_completedGoogle Play reports that purchase as madeplan, trial, form_factor
playback_failedPlayback stops on an error (not a live stream rejoining its window) — NX-DEC-1150failure, form_factor
playback_startupA start shows its first frame: how long it took, as a rangestartup, form_factor
playback_stallsA playback that showed a frame ends: how often it re-buffered, as a rangestalls, form_factor
sync_resultA phone ↔ TV Sync now (or one-tap sync) endsresult, form_factor
purchase_flowA Nexora Pro step ends: plans loaded, Play's sheet opened, the purchase answeredstep, result, form_factor
addon_resultA JSON add-on install endsresult, form_factor

The fixed values

ParameterValues
form_factorphone, tv
screenhome, movies, series, live_tv, guide, my_list, library, search, favourites, history, groups, settings, add_source, addons, pro; NX-DEC-1151: player, now_playing, details, person, category, addon_store, sources, source_diagnostics, extensions (debug builds only since NX-DEC-1214), downloads, devices, playback_settings, p2p_settings, guide_settings, appearance, storage_privacy, backup_restore, parental_controls, about
featuresearch_used, continue_watching_resumed, cast_started, picture_in_picture, devices_paired, backup_created, backup_restored; NX-DEC-1151: seek_preview_used, skip_intro_used, up_next_played, external_player_opened, sync_now, favourite_added, download_started, problem_reported
play_kindlive, movie, series, p2p
source_typem3u, m3u_file, xtream, jellyfin, emby, other_server
settingfollow_system_theme, dark_mode, dynamic_colours, floating_preview, brightness_gesture, volume_gesture, screen_rotation, tunnelled_playback, clock_12h, remote_control, no_pictures, refresh_on_open, peer_to_peer
stateon, off
session_bucketunder_1_min, under_10_min, under_1_hour, over_1_hour
kindlive, on_demand
fromlimit, settings, banner, other
planmonthly, yearly, lifetime
trialyes, no
failurenetwork, bad_response, timeout, source, decoder, drm, other (Media3's error-code groups)
startupunder_1_s, under_3_s, under_10_s, over_10_s
stallsnone, one, two_to_five, over_five
resultok, cancelled, offline, unavailable, pending, invalid, refused, failed
stepplans, sheet, purchase

What Firebase adds

FieldValue
App-instance IDA random ID Firebase creates for this installation while the switch is on; reset (a new one is made) when the user turns the switch off. Not the advertising ID, not the Android ID
Device and app informationCollected by the Firebase SDK: app version, device model and brand, Android version, language, first-open time and similar (Google's "automatically collected user properties")
Approximate locationCountry, region and city, derived by Google from the connection's IP address (the app has no location permission and reads no location)
Firebase's own eventsGoogle's automatically collected app events (for example first_open, session_start, user_engagement, app_update, os_update, and in_app_purchase for a Nexora Pro purchase through Google Play); automatic screen_view is off
Crash reports (Firebase Crashlytics)Uncaught Java/Kotlin crashes and ANRs: stack trace and exception message, device state (model, OS version, memory, orientation and similar), app version, a Crashlytics installation ID, Nexora's fixed crash keys and breadcrumbs (above). No NDK crashes, no user ID. Exception messages of uncaught crashes written by libraries are not filtered (handled errors are), so reports are not described as anonymous
RetentionAnalytics: 2 months, event and user data (GA4 minimum; reset on new activity off). Crashlytics: up to 90 days

Google describes what the Firebase SDK collects in Configure Analytics data collection and usage and Automatically collected events, and what Crashlytics collects in Firebase's data disclosure.