Privacy policy
What the game does with data, in plain words. Applies to app version 1.0.0. Last updated: 15 November 2026.
In short. Spore Wars sends nothing to us. It has no accounts, no analytics and no crash reporting of ours, and the game's own code reads no identifier and does not ask your permission to track you. On iOS and Android, if you have not bought the Full Game, the game shows at most one full-screen ad (Google AdMob) after a match you play on your own; the ads are not personalised, and Google's advertising code, not ours, sends Google the technical data listed under "Ads". If you own the Full Game, the advertising code never starts. On Android, Google's billing library sends its own diagnostic information to Google: that is Google's code talking to Google, and none of it reaches us. What the game remembers (your name, settings, progress, replays and maps) stays in files on your own device. The only network traffic is when you choose to play with other people: over a local network, or, on macOS, through an online server you type in. On iOS and Android there is one optional in-app purchase, the "Full Game"; Apple or Google handles it, not us. We run no server, so nothing of ours checks that purchase. Details, platform by platform, follow.
Who is responsible
The game and this website are published by Tan Nguyen. Questions about privacy: support@nvata.com.
This page applies to the Spore Wars game on iOS (including the TestFlight build), macOS and in a web browser, and to this website. Android is described where it differs, as there is no Android version yet. "Version 1.0.0" is the version number that TestFlight, the App Store and your device show for the app; the game shows the same number, with the build number, on its main menu and at the foot of Settings (for example "Version 1.0.0 (457996)"; "· TEST ADS" after it means the build carries Google's test ads). It was written from an audit of the game's code and of the built apps; each statement on it was checked against that code.
What we collect
Nothing: the game sends us nothing. Specifically:
- The game does not send data to us. It has no web-request (HTTP) code, no built-in address of any server of ours and no feature that reports to the developer; there is no server run by us for the game today. The only things it can connect to are other players' devices (LAN play) and, on macOS, an online server whose address you type in (see "What goes over a network").
- There is no account, sign-in, e-mail or phone number. The game's own code reads no device or advertising identifier, does not show Apple's tracking-permission prompt (App Tracking Transparency) and does not track you itself. The exception is the ads on iOS and Android, described under "Ads": Google's advertising code, which runs only if you do not own the Full Game, collects identifiers of its own.
- There is no analytics and no crash-reporting service of ours. The only advertising is Google's, on iOS and Android, described under "Ads". The daily challenge's "compare with friends" and the ranking are not available yet and send nothing. One thing on Android: Google's Play Billing library, which the Android build uses for the purchase, sends its own diagnostic events to Google through Google's data-transport library. That is Google's code talking to Google: the game cannot read or add to it, none of it reaches us, and we have found no description from Google of exactly what the events contain. The iOS build has nothing like it: Apple's StoreKit is part of iOS, and the game's purchase plug-in makes no network call of its own and logs nothing.
- The game does not use your camera, microphone, photos, location, contacts or motion sensors, and does not ask for those permissions.
- The web build contains no third-party software development kits. The macOS build contains one extra library, the open-source WebRTC library (libdatachannel, MIT licence), used only for online play with other people. The iOS build contains Apple's StoreKit (part of iOS) reached through one small purchase plug-in, and Google's advertising code (Google Mobile Ads and Google's User Messaging Platform, linked through the open-source godot-admob plug-in), and nothing else third-party. The Android build contains Google's Play Billing library, through a small plug-in, and Google's advertising code, together with the Google libraries that library depends on: the Google Play services client libraries and Google's data-transport library (which carries the diagnostic events described above). One of those, Google's location library, is included but unused: the app holds no location permission and no code calls it. We use no analytics or tracking library of our own on any platform; the only advertising library is Google's.
- The one purchase. On iOS and Android the game sells one thing, once: the "Full Game" (chapter 3 and some extras). The payment, your Apple or Google account and the receipt are handled by Apple or Google under their own privacy policies, not by us; we do not receive them, and the stores show us sales reports. What the game itself sends to the store is only the name of the product, to ask whether you own it and what it costs in your currency, to buy it, or to "Restore purchases"; the store answers yes or no and the price. The game keeps one yes/no flag in its save file saying you own it, so that chapter 3 works offline; it stores no receipt, account or payment detail. The macOS and web builds have no purchase and contact no store.
- No receipt check. There is no server of ours, so nothing checks your purchase against a record of ours. The flag in your save is corrected the next time the store answers (a refund removes it). Anyone who edits their own save file can switch chapter 3 on for themselves; that does not affect other players.
- The game reads your clipboard only when you press "Paste" (in the Map editor, to paste a map code), and writes to it only when you press "Copy" (a map code) or "Copy the code" (an online room code).
Apple's own services are separate from the game: if you use TestFlight, Apple can pass us the crash reports and feedback you choose to send, and the App Store shows us anonymous, aggregated statistics from people who agreed to share analytics with developers. Apple's privacy policy covers that, not this page.
Ads (iOS and Android)
The macOS and web versions have no ads. On iOS and Android, if you do not own the Full Game, the game may show one full-screen ad after a match you played on your own (skirmish, campaign or daily challenge), before the result screen: at most one every 4 minutes, never in your first 3 matches, never during a match, and never in a game with other people, a co-op game, a replay or the map editor. The ads come from Google AdMob. Buying the Full Game removes them.
The builds made so far (version 1.0.0) carry Google's test ads: Google's published test identifiers, no AdMob account of ours, and no real advertiser. The version line in the game says "· TEST ADS". The data below is what Google's advertising code is described to collect; it applies to these builds as it will to a later build with real ads.
The ads are not personalised: the game asks Google for non-personalised ads only, does not show Apple's tracking-permission prompt and does not read your advertising identifier. It marks the app as not directed at children and asks for ads rated for a general audience.
What Google receives. The game sends nothing to Google itself; Google's advertising code, which is built into the app, does. By Google's own description it may collect your IP address (which can show roughly where you are; the game never asks for or reads your location), identifiers of your device that Google uses for advertising and analytics (on iOS the advertising identifier is all 0s unless you allow tracking, which the game never asks you to do, and Google lists other device identifiers besides it), which ads were shown to you, how you interact with them (app launches, taps, video views), and performance and crash information about the app and the advertising code. We do not receive any of this and cannot see it; Google's privacy policy covers what Google does with it. We have not captured this traffic ourselves, so this list is Google's description, not our measurement.
If you own the Full Game, none of this runs. The advertising code (including the consent request) starts only when all of these hold: the store has told the game that you do not own the Full Game, you have played more than 3 matches, the game has just asked the store again and the answer is still "not owned", and you are at a menu, not in a match. For an owner, for someone the store has not answered yet and for a new player, no consent form appears and nothing is sent to Google's ad servers. If you buy or restore the Full Game, the game stops the advertising code at once: the loaded ad is thrown away and none is asked for again; the code itself stays in the app's memory until you close the app, and starts again only if the store later says you no longer own the game (for example after a refund). (The advertising code is part of the app file whether you own the Full Game or not; it is not started.) In a test on an Android emulator we recorded the network: for a player who owns the Full Game, and for one whose store never answered, no request went to any advertising server; for a player who does not own it, the requests went to Google hosts such as fundingchoicesmessages.google.com (the consent request), googleads.g.doubleclick.net, pagead2.googlesyndication.com and pagead2.googleadservices.com. That test was on an emulator, not a phone, and could see which servers were contacted but not what was sent; on iOS we have not recorded the network.
Consent. Where the law requires it (for example in the European Economic Area and the United Kingdom), Google's consent form (User Messaging Platform) asks you before any ad is requested, and only at the title screen or the main menu, never in a match. Google keeps your answer on your device. Where the law requires a way to change it, Settings has an "Ad privacy" entry that opens it again. The game itself stores one extra number for the ads: the time the last ad was shown, to keep to the 4-minute limit.
What stays on your device
The game keeps files in its own data folder on your device. It never uploads them. They hold:
| What | What is in it |
|---|---|
Save file (spore_wars.sav) | Your player name (up to 24 characters; "Commander" until you change it); games, wins, losses and time played; your last skirmish setup and chosen cosmetics; settings (volume and sound switches, colour-blind mode, screen shake, vibration, "keep my army on the left", game speed, language, and the last LAN address and the last online server address you typed and used, kept only to fill those two fields next time); progress (unlocked heroes, best win times, campaign stars, daily-challenge attempts and best times for the last 60 days, per-hero game and win counts); whether you own the Full Game (a yes/no flag, not a receipt) and when the last ad was shown (a time, no more). The first language is chosen from your device's language (Vietnamese or English) on the device itself. |
Replays (replays/) | One file for each match you play: the map, the random seed, for each seat whether it was a person or the computer, its team and hero, every command given, checksums, and the time it was recorded. Player names are not recorded. The game keeps the 50 newest replays and deletes older ones on its own; in the Replays screen you can pin up to 20 replays to keep them, and delete any replay. |
Your maps (maps/) | Maps you make in the Map editor. A replay of a match on one of your maps carries that map inside the replay file; it is rebuilt in memory when you play the replay and is not written as a separate file. |
| Match marker | While a match against other people runs, a small file with the hero's name sits beside the save, so that a crash can be counted as a loss at the next start. It is removed when the match ends. |
Diagnostic reports (net_reports/) | If a match with other people goes out of step, the game writes a report on the device (game and engine version, operating system name, the match setup and the commands). The newest 5 are kept. They are never sent anywhere; the game only shows you where the file is. |
| Engine log and cache | On macOS the game engine writes a text log (logs/godot.log); the game's own code does not write names, addresses or URLs to it. The engine also keeps a graphics cache. |
The save file is scrambled so that it cannot be edited by hand. That is to protect the game's progress, not your privacy: do not treat it as encrypted against someone who has your device.
Where the files are
- iOS: in the app's own private storage. They are not shown in the Files app and not shared through iTunes file sharing.
- macOS:
~/Library/Application Support/Godot/app_userdata/Spore Wars/. - Web: in your browser's IndexedDB storage for the site that serves the game. The game sets no cookies and does not use
localStorageorsessionStorage.
Your device's own backups (for example an iPhone or Mac backup) may include these files. That is how the operating system works; the game does not control it.
Deleting your data
Delete the app (iOS), delete the folder above (macOS) or clear the site's data in your browser (Web), and everything the game stored is gone. Inside the game you can delete single replays and maps; the game itself deletes replays beyond the newest 50 that you have not pinned. There is no "erase everything" button yet. Because we hold no copy, nothing needs to be deleted on our side.
What goes over a network
The game's own network code (LAN and Online play) does not run at start-up or in the background: it opens a connection only when you host or join a game with other people. The store lookups and Google's advertising code on iOS and Android are separate and are described above.
Local network (LAN) play: iOS and macOS
- Hosting. While you are hosting (in the lobby and during the match), your device listens on UDP port 47010 on all its network connections, for up to four players. Other devices that can reach yours can connect to your lobby; there is no password. Leaving the room closes it.
- Joining. The game connects to the address you type, or the address of a room you pick from the list of rooms the game found on your network. It does not check that the address is on your own network: if you type an address on the internet, the game connects to it.
- What is sent to the other player(s), by category: to connect – the game version, a data-layout check number, your player name (up to 24 characters), a secret random token that lets you take your seat back if the connection drops, refusals (room full, wrong version) and keep-alive and ping timing; lobby and match setup – the host sends the list of players with their names, the map, the random seed, mode and speed and, per seat, team, hero and computer level, you send your hero pick and "ready"; during the match – your orders each tick, checksums of the game state, delay settings, notices that someone left, surrendered, was removed by the host or was disconnected, the end-of-match result and rematch requests; catching up – if a player falls out of step, the host sends a snapshot of the match state. Nothing else: no contact details, files, photos or location.
- What the others see: your player name and, because the connection is direct, your device's network address; you see theirs. The lobby also shows your own local address so that others can type it. We do not receive any of this.
- Finding rooms (iOS and macOS). While the "Find rooms on the network" screen is open, your device sends a small question (256 bytes, nothing about you) to every address of its own local network, up to 254 addresses per network, at most four networks, about 100 a second, and again every few seconds. While you host, the game answers such a question from another device on the local network with the room name (by default your player name), number of players, maximum, mode, game version and port. On macOS (and Android, when it exists) a hosted room also announces itself once a second to the whole local network (UDP 255.255.255.255, port 47000) with the same details, so that older versions of the game see it; iOS sends and listens to no such announcements. The web build does none of this. If rooms are not found, you can always type the host's address.
- On iOS, the system asks you once to allow "Local Network" access for the game. Without it, iOS blocks LAN play and finding rooms.
Online play: macOS only
- Not on iOS. The iOS build has no online play: its menu does not offer it, the code that would start it refuses on iOS, and the WebRTC library is not in the iOS app.
- On macOS, the "Online" screen connects to a server whose address you type in the Server field. The game runs no server for you: it says so on that screen, the field starts empty and the online buttons stay off until you type an address. (A development copy that includes the server software starts with
ws://127.0.0.1:47100, your own computer.) The last address you used is kept on your device, only to fill the field next time. The game points at no other server. - Not in the browser. The web version has no LAN or Online entry in its menu, and the code that would open an online connection refuses to run in a browser. The web version makes no network connection of its own.
- To that server the game sends your player name, the game mode, room codes and choices you make in the lobby, and what is needed to connect the players to each other (WebRTC offers and answers with connection candidates, which contain network addresses); if a direct connection fails, the match data is relayed through the server.
- The game uses no STUN, TURN or other third-party service. Players in the same online match can see each other's network addresses.
- No online server exists yet for the game, and it has not been decided who would run one or what it would log. The server software is not part of the apps, and a web browser is refused by it unless the operator allows the site, which is why the web version does not offer online play. If an online service is ever offered, this page will say who runs it and what it keeps before the game points at it.
By platform
| iOS (TestFlight) | macOS | Web | |
|---|---|---|---|
| LAN host / join by address | Yes | Yes | No (a browser cannot do it) |
| Finding LAN rooms | Yes | Yes | No |
| Online play (server you type in) | No | Yes | No |
| Data stored | App storage | Application Support folder, plus a log | Browser IndexedDB |
| In-app purchase (Full Game) | Yes, through the App Store | No | No |
| Ads | Yes, if you do not own the Full Game: one Google ad after a match you play on your own, not personalised | No | No |
| Extra third-party library | The App Store's purchase code (StoreKit, with a plug-in) and Google's advertising code (started only if you do not own the Full Game); on Android: Google's Play Billing library, Google's advertising code and the Google libraries they need | WebRTC (open source) | None |
| System permission prompt | Local Network (no tracking prompt; in some regions Google's consent form for ads) | None (the macOS firewall may ask about incoming connections while you host) | None |
| Data sent to us | None | None | None |
Android (not released yet)
There is no Android version yet. When there is, the app will ask Android for permission to use the network (INTERNET, for play with other people and for talking to Google Play), to vibrate the device (VIBRATE) and, for the purchase, com.android.vending.BILLING (to buy through Google Play) and ACCESS_NETWORK_STATE, which Google's billing library adds. It asks for no camera, microphone, location, contacts or storage permission. (ACCESS_NETWORK_STATE comes with the Google libraries that carry the billing library's diagnostics.) Google's advertising code, which the Android app also contains (see "Ads"), adds a few more permissions of its own: the app is built without the Android advertising-ID permission and without the three Privacy Sandbox advertising permissions (ACCESS_ADSERVICES_AD_ID, ACCESS_ADSERVICES_ATTRIBUTION, ACCESS_ADSERVICES_TOPICS), and keeps WAKE_LOCK and FOREGROUND_SERVICE, which Android's background-work library (used by Google's advertising code) declares. The build is checked for this each time it is made. In a test on an emulator (see "Ads"), a player who owns the Full Game sent nothing to the advertising code's servers; the only network use there was Google Play Billing's diagnostic upload described above, the same as in a version without ads. For a player who does not own it, the servers contacted were Google's (the consent request and the ad servers named under "Ads"); the test could not read what was sent.
On Google Play, the app's "Data safety" entry is meant to list Purchase history (under "Financial info") as collected, not shared, and used for app functionality. We declare it because the app uses Google's billing library to handle your purchase and Google's guidance asks apps that use it to say so. The game itself sends no purchase data to us or to anyone other than Google Play, and keeps only a yes/no flag on your device (see "The one purchase"). Because of Google's advertising code, the entry is also meant to list the data types Google says its ads code collects (IP address, device identifiers, app interactions and diagnostics), as collected and shared for advertising, analytics and fraud prevention. It lists no location: the app asks for no location permission.
App Store privacy information
What this page describes is what the app does: we collect nothing and the game sends us nothing; the data that leaves your device goes to the other players you choose to play with, to Apple or Google if you buy the Full Game (they handle the purchase), and, on iOS and Android if you do not own the Full Game, to Google's advertising code (see "Ads"). On Android, Google's billing library also sends its own diagnostics to Google (see "What we collect"). The App Store's privacy information for the app is filled in by the publisher from this page; because of the ads it lists the data types of Google's advertising code (device ID, advertising data, product interaction, coarse location, and crash, performance and other diagnostic data), and it marks none of them as used to track you, because the game does not ask for tracking permission and its ads are not personalised. It does not say "Data Not Collected".
This website
This website is made of plain pages. It sets no cookies, runs no analytics and loads nothing from other sites (fonts and images come from the site itself).
Like any website, the server that delivers these pages receives your IP address, the page you ask for, the time and your browser's identification, and may keep them in ordinary access logs. The hosting service for this site has not been chosen yet; this page will name it, and say how long it keeps logs, once it is.
The same goes for the web version of the game: whoever serves its files (the page, the game program and data) receives these technical details when you open it, and may log them. Apart from loading its own files from that same place, the game makes no web requests and opens no other connection. Where the web version is hosted has not been chosen yet either. The data the web version stores (see "Where the files are") belongs to the site that serves it.
Children
The game asks for no personal information from anyone, including children, and sends none to us. The game is not directed at children: its ads (iOS and Android, only if the Full Game is not owned) are requested as not personalised and rated for a general audience, but Google's advertising code may still collect the technical data described under "Ads" from anyone who plays without owning the Full Game. A child's name typed into the player-name box stays on the device and is shown to other players only when they play together.
Your choices and rights
We hold no personal data about you, so there is nothing for us to give you a copy of, correct or delete. What Google's advertising code collects is held by Google, under Google's privacy policy; where the law requires it, the "Ad privacy" entry in Settings lets you change your ad consent. What is on your device is under your control (see "Deleting your data"). You can refuse the iOS Local Network permission; the game then cannot do LAN play, and everything else works. If you have a question or think this page is wrong, write to support@nvata.com.
Changes to this page
This page will be updated, and its date changed above, before any of these happens: an online service or ranking is switched on; an account, analytics, crash-reporting or receipt-checking feature is added, or any purchase other than the Full Game; the ads change (another ad network, personalised ads, a tracking-permission prompt, ads for owners or in games with other people, or ads on another platform); online play is enabled on iOS or in the browser; a replay, map or save can be uploaded; or the game is released on a new platform. The app version that this page describes is 1.0.0 (see the top of this page).
What is not decided yet
- Who would run an online service for the game, where, and what it would log.
- Which company hosts this website and how long it keeps access logs.
We state these plainly instead of guessing. This page will be updated when they are decided.