FruitConnect — Privacy Policy

Last updated: 2026-10-06 · Effective date: 2026-08-03 · Contact: David Kaiser, fruitconnect@davidkaiser.dk
Applications: FruitConnect for macOS (companion application) and FruitConnect for Meta Quest (Quest 2 / Pro / 3 / 3S)
Plain-language summary. FruitConnect streams your Mac's screen to a 2D panel inside Meta Quest, or into a virtual room (Full VR). We build no profile of you and track no individual: there is no advertising, no third-party analytics, no behavioural data, and nothing is sold, shared, or rented. The only things we count are anonymous totals — how many people opened the app, how many machines checked for an update, how many pages were viewed, what was typed into the FAQ search — kept as bare numbers with no identifier attached (sections 2.6 and 2.7). Your screen content, keystrokes, and files never reach any server we control.

What the app actually does:

Meta Horizon Platform data we access (Data Use Checkup)

FruitConnect uses the following Meta Horizon Platform features, requested through Meta's Data Use Checkup. This section articulates, in Meta's own terms, every category of Developer User Data and User Data the app collects, uses, and processes; the numbered sections referenced below give the full technical detail.

Platform featureData we accessHow we use itShared with third parties?Retention
User ID Your Meta user identifier. Binds each paired Mac to your Meta account so a different account signed in on the same headset cannot inherit or access your saved pairings (anti-hijack security). See section 1.4. Also, only when you activate a FruitConnect AI subscription, sent once to our server together with a one-time proof from Meta so the server can verify the subscription with Meta (section 2.3.1). Not shared. Never sent to any server we control, except at AI-plan activation (section 2.3.1), where our server verifies it with Meta and keeps only a salted hash. Until you uninstall or switch Meta account (section 1.4). The salted hash on our server: while your AI subscription is active and 30 days after.
User profile Your Meta Horizon username (display name). This permission also exposes your profile photo, which FruitConnect does not access or use. Shows your display name on your paired Mac(s) so you can see who is connecting; you can override it in Settings. See section 1.4. No. Same as User ID (section 1.4).
In-app purchases A purchase request for the Pro SKU and a Meta-validated entitlement/receipt (Pro: yes/no). Unlocks the optional Pro upgrade. See section 2.3. No — billing details and purchase history are never sent to our servers. Not stored by us.
Subscriptions Your subscription status and billing-period start/end time for the Pro and FruitConnect AI subscriptions, read from Meta — on the headset, and, for the AI plans only, by our server through Meta's server API (product, active state, period end, cancellation state) when you activate the plan. Determines whether your Pro subscription is currently active so the app can unlock unlimited streaming, and whether a FruitConnect AI plan is active so our server can grant and meter it. See sections 2.3 and 2.3.1. No. Read at runtime on the headset; for the AI plans, the tier and period end are kept on our server while the subscription is active and 30 days after.

FruitConnect does not use Meta's User age group data. The app serves a single audience rated 13+ (Teens & Adults) and applies no age-based logic in the app (see section 5, Children's privacy).

The voice assistant (section 2.8) uses no Meta Horizon Platform feature or data; it runs on your Mac and talks to the model provider described there.

1. Data stored on your device

All data below is stored exclusively on your Quest headset. None of it leaves the device unless you take an action that requires it.

1.1 Device identifier

1.2 Paired Macs

1.3 User preferences

1.4 Meta account identifier (v3.35+)

2. Data sent over the network

2.1 Local network (LAN) pairing and streaming

When your Mac is on the same Wi-Fi or USB-tethered, all communication stays inside your local network.

2.2 Internet pairing and streaming (Remote Access)

If your Mac is not on the same network, FruitConnect can connect over the internet.

2.2.1 Rendezvous mailbox

2.2.2 STUN servers

2.2.3 TURN relay (optional, build-time)

If a TURN relay is enabled in this build (some networks behind symmetric NAT require it), encrypted media bytes may be relayed through the configured TURN provider. The TURN provider sees encrypted bytes only — they cannot decrypt video, audio, or input events.

2.2.4 Encrypted media stream

Once Quest and Mac have established a WebRTC connection (via the rendezvous mailbox and STUN), all video frames, input events, and control messages are end-to-end encrypted using DTLS-SRTP (the WebRTC standard). Neither we nor any third party can read the contents of this stream.

2.3 Meta Horizon Platform (In-App Purchases & Subscriptions)

If you tap the Pro upgrade button, or whenever the app checks whether your Pro subscription is active:

Meta's privacy policy governs data Meta collects during this transaction: https://www.meta.com/privacy/policy/

2.3.1 FruitConnect AI subscriptions (activation)

If you subscribe to a FruitConnect AI plan (Pro + AI 1x or 3x) in the Meta Horizon Store, the headset activates it with our server so that your Mac can use the plan without any account or licence key:

To exercise your rights over this data, email fruitconnect@davidkaiser.dk (section 6).

2.4 Diagnostic and feedback uploads (opt-in, never automatic)

FruitConnect contains a "Send debug log" button (macOS menu), a "Send Feedback" form (both platforms), and a "Suggest a feature" form on the Quest app's Roadmap page. These three, and only these three, are the ways the application transmits anything you wrote or recorded to a server controlled by the Licensor, outside of the rendezvous mailbox described in section 2.2. Each is described below; none of them runs unless you tap it. The application also performs licence validation (section 2.3), checks for updates, and increments the anonymous counters described in section 2.6 — none of which carry content you authored.

2.4.1 Diagnostic submission — https://davidkaiser.dk/fruitconnect/signal/diagnostic.php

2.4.2 Feedback submission — https://davidkaiser.dk/fruitconnect/signal/feedback.php

2.4.3 Feature suggestions — https://davidkaiser.dk/fruitconnect/signal/wishes.php

The Quest app's Roadmap page lets you suggest a feature and later see what happened to your suggestion. This is the only part of the roadmap that stores anything you wrote.

2.4.4 Roadmap votes — https://davidkaiser.dk/fruitconnect/signal/roadmap.php

The Roadmap page also lets you vote on suggested features with the ▲/▼ buttons.

2.4.5 Your control

2.5 Voice chat (optional, strictly opt-in)

FruitConnect includes an optional voice-chat feature (protocol v5) so the people connected to the same Mac — for example the owner and an invited guest in a co-op session — can talk to each other.

2.6 Anonymous onboarding counters

The Quest application increments a small number of anonymous counters during first-run setup, so we can tell how many people open the app and how many of them turn out not to own a Mac (without one, FruitConnect has nothing to connect to). Nothing here identifies you, and nothing is stored about you as a person.

2.6.1 Update-check counter (macOS)

The macOS application asks our server whether a newer version exists — once when it starts, and then once an hour while it runs (this is the update check already mentioned in section 2.4). Each request adds one to a plain daily total on the server, so we can tell whether the number of active installations is rising or falling.

2.7 The website (davidkaiser.dk/fruitconnect)

The website sets no cookies at all — not for analytics, not for preferences, not for sessions — and stores nothing in your browser. There is no consent banner because there is nothing to consent to. Two things are counted on our own server, both as plain totals:

As with every endpoint (section 2.4), the caller's IP address is used only to enforce a rate limit and is never itself written to disk; the rate-limit key is an HMAC of the IP under a server-side secret, so it cannot be reversed to an IP even if that directory were exposed, and the counter file is deleted 24 hours after it was last used.

We would rather be exact than flattering: a search phrase is free text, and free text is the one thing a person could accidentally type something personal into. That is why it is filtered, capped in length, stripped of everything around it, and deleted after 90 days — and why it is described here in full rather than folded into a claim that we collect nothing.

2.8 Voice assistant (optional, off by default)

FruitConnect for macOS includes an optional voice assistant you talk to from the headset. It is an AI model, not a person, and it is switched off until you turn it on. Nothing in this section applies unless you use it.

What it is. When you press Talk, your headset microphone is streamed to your Mac over the same encrypted connection as voice chat (section 2.5), transcribed on the Mac, and the text is sent to an AI model whose answer is read back to you. You can also type to it in the assistant window on the Mac. Depending on the permissions you allow, the model may also be shown your Mac screen and may be allowed to act on the Mac.

How the model is reached. The FruitConnect AI plan — the only way for customers. The assistant is part of a FruitConnect AI subscription bought in the Meta Horizon Store; without one, the assistant is not shown at all. No Anthropic account of your own is needed. Your transcript and, only if you allow See the screen, a screenshot are sent from your Mac to our server at davidkaiser.dk and forwarded to Anthropic PBC (USA), which acts as our processor under Anthropic's commercial terms and data processing addendum. Our server forwards the request and returns the answer without keeping the content: it stores only usage counters per subscription (units, turns and token counts per month), never what you said or what was on your screen. How the plan is activated, and what our server learns about your subscription, is described in section 2.3.1.

Bringing your own AI is not offered. Anthropic does not allow third-party products to offer sign-in to a Claude account or to use a customer's subscription on their behalf, and FruitConnect does not let customers use their own Anthropic API key either. The app has no sign-in of any kind, never sees or stores Anthropic credentials, and the option is switched off for every customer licence. It can be enabled by us on our own development licences only; on such a Mac the assistant runs there against that account, and nothing about it reaches other users.

Permissions, and what leaves your Mac at each. Talk (on whenever the assistant is on): your words as text, and the assistant's own notes about your preferences (kept in ~/.fruitconnect/assistant-notes.md and included in each request). See the screen (off by default): additionally a screenshot (JPEG) and the text read from it, only for requests that concern the screen. Control the screen (off by default): the model may click, type, open apps and run Shortcuts, and reads the screen as text to check its work; it cannot read your files or run other commands, and the app blocks any attempt. Run commands on this Mac (off by default, only the paired owner can enable it, separate confirmation): the model may run commands in your user account and read or change files you ask it to — including, if you ask, files such as your Messages database. Whatever it reads at any level becomes part of what is sent to the model provider. Files you add to a message in the Mac's assistant window may be read by the model for that request and sent to the model provider with it. At every level a fixed list of dangerous commands (administrator rights, disk formatting, keychain secrets, disabling security features) is blocked by the app, and the model is instructed to describe and wait for your yes before anything irreversible or outward-facing, and never to handle passwords, keys or card numbers.

Speech recognition. Transcription happens on your Mac: with a local speech model if dictation is installed, otherwise with Apple's Speech Recognition, which runs on-device where macOS supports it for the language and otherwise uses Apple's servers under Apple's privacy policy. The microphone is captured only while Talk is active; with "Keep listening after each answer" (off by default) it stays open between exchanges until you press Stop.

Installing dictation. The local speech model is not part of the app and is never installed without you choosing it — the app offers it during setup, after an update, and when you press a dictation button that cannot work yet. Choosing it downloads two files (about 876 MB in total) from our server at davidkaiser.dk over HTTPS and unpacks them into ~/.fruitconnect/whisper.cpp/; each file's checksum is verified before it is used. The request carries nothing about you beyond what any download does — your IP address and the file requested — and our web server's ordinary access log is the only record of it. No audio, no text and no account information is sent, and the download does not tell us who you are. Once installed, speech never leaves your Mac for transcription at all, which is why it is offered: it replaces Apple's servers for languages macOS does not handle on-device. You can remove it again by deleting that folder, and uninstalling FruitConnect offers to remove it for you. The software and model are third-party open source under the MIT licence, credited in “Open Source Licenses” next to the app.

On your Mac only. Your conversations with the assistant (what you asked and what it answered) are kept in ~/.fruitconnect/conversations/ so you can continue them later. Copies of files you add to a message are kept in ~/.fruitconnect/attachments/. The assistant's notes, its activity log (~/.fruitconnect/assistant-activity.log — every command it ran or was blocked from running, at most 1 MB before rotation), the mailbox files under ~/.fruitconnect/inbox/, and the record of which permissions you allowed, when and from which headset, are stored on your Mac and nowhere else. On a licence where we have enabled our own development option, the API key lives in that Mac's keychain and its status in the app's settings; a customer is never asked for one. None of this is part of "Send debug log" (section 2.4.1). If you ask the assistant to send feedback, it uses the feedback endpoint of section 2.4.2 on your behalf and only after reading the message back to you.

Retention. A conversation stays until you delete it in the assistant window. Deleting it also deletes its attachments, and attachments are removed automatically after 30 days. Other files on your Mac stay until you delete them (section 6). On the FruitConnect AI plan, Anthropic handles your requests as our processor under the terms described above; on a licence where we have enabled the development option, what Anthropic retains under that account is governed by Anthropic's terms, not ours.

Your controls. Nothing beyond talking is on until you allow it: the first time a request needs a permission, the headset asks you before anything is captured or run, and the request is only carried out after you allow it. Allow once covers the one request it was given for — including that request running again right after you allow it — and the next request asks again. Always allow keeps the permission on until you turn it off, and is recorded as your consent. One control — Turn everything off — in the AI menu on the headset and in the FruitConnect menu on the Mac switches every permission off at once, puts them all back to Ask every time, and takes effect for the next action; Permissions lets you review or change them. Stop ends the current work at once. The Assistant activity page on the headset shows the log. The assistant is only shown while a FruitConnect AI plan is active; cancel the plan in the Meta Horizon Store and it disappears again.

2.9 Full VR and headset screenshots

Full VR places your Mac's screen in a virtual room. It runs entirely on the headset: the rooms, skies and sounds ship with the app, and nothing is downloaded when you use them. Your head, controller and hand movements are processed on the headset only, to draw the room and to control your Mac as described in section 2.1, and they are not sent anywhere. The app's own debug log (section 2.4.1) can note a position when you place or recentre a window and which button or pinch was pressed, for troubleshooting — never a continuous trace of where you look, move or point — and that log leaves the headset only if you send a diagnostic report yourself. Passthrough, where you see your real surroundings, is drawn by Meta Horizon OS, and FruitConnect never receives camera images of your surroundings. You can try Full VR without a Mac. In the demo, a placeholder stands where your Mac would appear, and nothing is sent anywhere.

Screenshot (in the Full VR menu) takes one picture of what you see in the headset. Android asks you to confirm screen capture each time, and nothing is captured unless you do. The picture is saved in the headset's Pictures/FruitConnect folder, where you can delete it, and can be copied to your paired Mac's clipboard over the encrypted connection. It is not sent anywhere else.

3. Data we do not collect

To make this concrete, FruitConnect explicitly does not:

4. Permissions the app requests

Android permissionWhy we request it
INTERNETRequired for Remote Access (internet pairing/streaming). Not used during LAN-only sessions.
ACCESS_NETWORK_STATEDetect whether you are online before attempting Remote Access.
ACCESS_WIFI_STATEDetect Wi-Fi changes to auto-upgrade from Remote Access to LAN when your Mac becomes reachable.
CAMERA (runtime prompt)Scan the QR code shown on your Mac when pairing. The camera feed is processed locally on the headset by ML Kit's barcode scanner; no frames leave the device. Granted only when you open the QR-scan screen, and you can deny it and use the 6-digit code instead.
horizonos.permission.HEADSET_CAMERAQuest-specific equivalent of the Android camera permission, required by the QR scanner.
com.oculus.permission.HAND_TRACKINGAllows the UI to respond to hand-tracking input as an alternative to controllers.
MODIFY_AUDIO_SETTINGSAudio focus and volume control for Mac audio and voice playback on the headset. Playback control only — this permission cannot access the microphone.
RECORD_AUDIO (runtime prompt)Optional voice chat (section 2.5) and the optional voice assistant (section 2.8). The app asks for it once when you first open it — one line explaining why, then Android’s permission dialog — so it can be answered outside Full VR, where the dialog cannot be shown; if you choose Not now or decline, the dialog appears again the first time you turn your mic on or press Talk. Allowing it does not switch the microphone on: the microphone is captured only while your mic is switched on (OFF by default) or while you are talking to the assistant. Deny it and everything except voice chat and the assistant keeps working.
FOREGROUND_SERVICE, FOREGROUND_SERVICE_MEDIA_PLAYBACKKeeps the connection to your Mac and its audio running while the FruitConnect window is in the background. Android shows a notification while it runs.
FOREGROUND_SERVICE_MEDIA_PROJECTIONThe Screenshot button in Full VR (section 2.9): captures one picture of what you see, only after you confirm Android's screen-capture prompt.
POST_NOTIFICATIONSShows the notification Android requires while the connection or a screenshot is running.

The app does not request location, contacts, calendar, storage, SMS, telephony, or any other permission. On macOS, the companion app additionally asks for the system microphone permission the first time you enable voice chat there (see section 2.5) and for Speech Recognition the first time you use the voice assistant without a local speech model (section 2.8). The Accessibility and Screen Recording permissions used for streaming and remote input also cover the assistant's Control the screen level, which additionally triggers the macOS Automation prompt for each app it controls.

5. Children's privacy

FruitConnect is not directed at children under 13. The Meta Horizon Store age rating for this app reflects this. We do not knowingly collect personal data from children. If you believe a child has used the app on your headset, uninstalling the app will permanently delete all locally stored data.

6. Your rights

You can at any time:

For privacy questions or to exercise other rights, email fruitconnect@davidkaiser.dk and a response will be sent within 30 days.

If you are in the EU/EEA or UK, you have rights under GDPR including access, rectification, erasure, restriction, portability, and objection. Use the same email above to exercise these rights.

7. Data security

8. Open source attribution

FruitConnect is built on top of several open-source libraries (most notably WebRTC and its sub-components, plus Jetpack Compose, Kotlin, AndroidX, CameraX, and Google ML Kit on the Quest side). The complete list of components and their licenses is shipped with the application:

The same list is also available at https://davidkaiser.dk/fruitconnect/third-party-licenses.html. Including the list does not give those projects access to any of your data — it only fulfils the attribution requirement of their licenses.

9. Changes to this policy

We may update this policy as the app evolves. The "Last updated" date at the top changes when we do. Material changes that affect what data is collected or how it is used will be highlighted in-app the next time you launch FruitConnect after the update is published.

10. Contact

David Kaiser
fruitconnect@davidkaiser.dk