Mahjong Table VR is built to run without collecting your data. There are no accounts, no advertising and no tracking, and we do not sell or share any personal information, because we do not hold any. There are three exceptions, all described below: an anonymous daily count of how many devices play, whether you own the optional Online Pass purchase, which the Meta platform tells us, and a report you choose to send us about another player.
To know how many people play, and how many try a table with other people, the app sends us at most two short notes a day from each device: one when the game opens, and one the first time that day it connects to a friends or public table. Each note says only which of those two it is, the kind of device (Meta Quest store app, Quest browser, phone, tablet or computer), whether this device has sent that note before, the app version and the date. Cloudflare adds the country it already knows from the connection. We add these notes up into daily totals and keep nothing else: no name, no identifier for you or your device, no IP address and nothing about how you play. The record of which notes your device has already sent stays in its local storage, and clearing the app's site data resets it.
When you play at a private table with friends, your device sends us a short note whenever something happens to its connection: it joined or lost the table, the host went quiet, a voice link was redialled, the page went behind another app, or which route the connection took. Each note carries only the four-letter room code, your seat number at that table, the kind of device, the app version, the event and a one-line description written by the app. No name, no identifier for you or your device and no IP address is sent or stored. We use these notes to find out why a game dropped and for nothing else. Public tables with strangers send none. While you sit at a friends' table your device also sends a short "here" note about once a minute, with the same fields. The first screen adds those notes up to say how many people are at tables right now; it shows the number only, never a room code or who is there.
Your display name, avatar choice, table-height preference, sound mix and other settings are stored in your browser's local storage on your own device. A random identifier is also stored locally so that if you disconnect from a friend's table, you can rejoin the same seat. None of this is sent to us.
There are two ways to play with other people. A friends table is one you open or join with a room code you share yourself. A public table is one you are matched into with players you do not know, by pressing "Play with people online". Both work the same way technically; the difference is who ends up at the table, and public tables carry the mute and report controls described below.
Playing with other people uses peer-to-peer WebRTC connections. Your game actions, name and avatar are sent directly to the other players at your table, and a third-party signaling service (PeerJS) briefly relays connection details such as room codes and network addresses to establish those connections. Game data and voice audio travel between players, with relay infrastructure used where needed for connectivity. We do not record or store voice audio.
The microphone is used only if you enable voice chat, and only to stream your voice to the players at your table. If you decline the microphone permission, voice chat works in listen-only mode. You can mute or leave at any time.
Conduct at shared tables, and what reporting a player does, are covered in the house rules & terms.
While waiting or playing, you can send text messages to everyone connected to your table. The table host relays those messages to the other players. You may choose to share a time or contact details; this is optional, and every connected player can read what you send. We do not receive or store table chat on our servers.
The app keeps up to 40 messages in memory for the current room and clears that conversation when you leave. If you press “Save this chat”, up to ten conversations are saved in local storage on your device. Saved chats remain until you clear them or clear the app’s site data. Other players may independently save messages they receive.
At any table you can mute an individual player. Muting happens entirely on your own device, takes effect immediately, and is not announced to anyone.
You can also report a player. Reporting mutes them and blocks them permanently on your device: they are silenced automatically if you ever meet again, and if you are hosting they cannot reconnect to your table. That block is stored only on your device. Reporting also sends us a short message so that we can see when the same player is reported by several different people. That message contains the reported player's display name, the random device identifier described above for both you and the player you reported, the room code, the app version and the time. It does not contain any audio, any game content, or anything you have said — we do not record voice chat, and cannot listen to a table. Reports are read by us and are not shared with anyone else or used for any other purpose.
The version of the app installed from the Meta Horizon Store offers one optional, one-time in-app purchase called Online Pass. The purchase is made through Meta's platform: Meta handles the checkout, payment and billing, and we never receive your name, payment details or billing address. To unlock the feature, the app asks the Meta platform (via the Digital Goods API) whether your Meta account owns Online Pass, and receives only a yes-or-no ownership status. That status is the only purchase-related data made available to us, it is used solely to enable the feature, and it is not combined with any other data, shared with anyone or used for any other purpose. Meta's handling of your account and purchase data is described in Meta's privacy policy.
Apart from this ownership status, we do not receive any user data from Meta. If we ever request access to further Meta platform data, this policy will be updated first to say exactly what is collected and why.
The app's files are served by Cloudflare Pages, which keeps standard, short-lived server logs (such as IP addresses) to operate the service. We do not use those logs to identify you.
The app is not directed at children under 13 and does not knowingly collect personal information from anyone.
If this policy changes, the new version will be posted at this address with an updated date. Questions: hello@mahjongtable.fun.