Last updated and in effect from 13 October 2026
Open Historia is a free, open-source strategy game. It runs on your own device: in the browser at openhistoria.com, as a desktop app for Windows, macOS and Linux, and as an Android app. This policy covers all of them, in their stable and beta versions. It explains what the game keeps on your device, what it sends elsewhere and to whom, what the project itself holds about you, and the rights you have.
Who is responsible. "We" means Nicholas Krol, an individual in the United States who runs the Open Historia project and its servers, and who is the data controller for what this policy describes. You can reach us at [email protected]. Open Historia is a non-commercial project: it has no advertising, sells nothing and has no paid accounts.
Everything you make and play is stored on your device: in your browser's storage on the website, in the app's storage on Android, and in the app's data folder on the desktop. That includes:
.trash inside its data folder, where they stay until you delete that folder;hub-cache folder in the app's data folder;You can delete any of it in the game, by clearing the site's data in your browser, or by uninstalling the app. On the desktop, uninstalling leaves the app's data folder in place: delete that folder too if you want everything gone.
Playing over your own network. If you turn on "Let other devices connect" in the desktop app, any device on your network can open, change and delete your games and scenarios and read the app's log, because the app's server has no password and no encryption. It is off unless you turn it on; use it only on a network you trust. If you run the game's server yourself, you are the one holding everything it stores.
| What | Set by | Why | How long |
|---|---|---|---|
| The game's own storage (local storage, IndexedDB and a cache of map files) | The game | Needed to play: your games, scenarios, settings, AI keys, logs and map data, as listed above | Until you delete it |
oh:analytics-consent (local storage) | The website and the game | Needed to remember your answer about counting visits | 180 days, then you are asked again |
oh:asset-sizes:v1 (local storage) | The website's front page | Remembers the download sizes it showed you, so they need not be fetched again. It identifies nobody | 6 hours |
_ga and _ga_H9EQ4JFZXZ (cookies) | Google Analytics | To tell a returning visitor from a new one. Set only after you say yes | Up to two years; deleted at once if you take your yes back |
| A security cookie | Cloudflare, which hosts the website | Cloudflare may set one to tell people from automated traffic | Decided by Cloudflare |
Umami sets no cookie and stores nothing on your device. Nothing else in Open Historia sets cookies.
To play, you connect an AI provider: for example Google Gemini, OpenAI, Anthropic, Groq, OpenRouter or DeepSeek, or a model running on your own computer or network. The game sends that provider prompts built from your game: the state of the world, recent events, and what you type as orders, chat and diplomacy. It can also do this in the background while a game is open. If you play in a language other than English, the game also sends scenario text, and the titles and descriptions of community posts, to be translated. Your key is sent with every request.
What happens to that data is set by the provider's own privacy policy and terms; the provider, not us, is responsible for it. Some providers keep prompts, and some may use them to train models, depending on your plan. We never receive your key or your prompts. On the desktop app, a request that a provider won't accept straight from the page passes through the app's own local server on your computer on its way; it is not stored. If you let other devices on your network send AI calls through the desktop app (a setting in the beta versions), their keys and prompts cross your network without encryption. On Android, a request to a model on your local network is sent by the app itself.
If you want nothing to leave your computer, use a local model through Ollama, LM Studio or llama.cpp. The AI setup guide explains how.
We would like to know how many people visit and play, and which version they use. For that the website's pages, and the game itself on the website and in the desktop app, can load two visit counters, only after you say yes. The first time you open a page it asks; until you answer, and if you say no, neither counter is loaded and nothing is sent to either. Saying no costs you nothing: everything works the same.
You can also change it in the game under Settings → General → Privacy, or with the Privacy choices link at the foot of each page. Taking a yes back switches both counters off at once and deletes Google's cookies. Your answer is kept on your device for 180 days, and then you are asked again.
Global Privacy Control and Do Not Track. If your browser sends a Global Privacy Control or Do Not Track signal, we treat it as a no: neither counter is loaded and you are not asked.
If you say yes:
cloud.umami.is and gateway.umami.is.The game also tells Umami which application it is: the website, the desktop app, the desktop beta, the multiplayer build, or a copy of the game's server that you run yourself. That is how we count the players of each. From the desktop app the address the counters receive is only localhost. A server you run yourself is counted only when you open it on the same computer, never at any other address, and not at all if you start it with OH_VISIT_COUNT=0. Our Umami account is in the United States, and we keep these counts for as long as the project runs; nothing in them is your name, an email address, an IP address or a cookie.
The Android app loads neither counter and never asks.
Older versions. Desktop versions released before 13 October 2026 loaded both counters whenever the game was open and online, without asking. Updating the app ends that. In such a version, blocking googletagmanager.com, google-analytics.com, cloud.umami.is and gateway.umami.is in a firewall or DNS filter stops both.
Any service you connect to sees your IP address and basic browser information. These are the services the game contacts besides your AI provider and, after a yes, the two visit counters:
| Service (who runs it, where) | When | What it receives |
|---|---|---|
| Website hosting (Cloudflare, United States and worldwide) | When you visit openhistoria.com | The pages and files you request |
| Map imagery (Esri ArcGIS Online, United States) and terrain (Amazon Web Services' open terrain tiles, United States) | When the game starts and whenever the map is shown, while you are online | Which parts of the map you look at. A map-editor document made in an old version may also load OpenStreetMap's tiles |
| World map data on the website | Website only, while you play | See The World Map below |
| Community hub (GitHub, United States) | When you open the Community, Flags or Basemaps browsers, and in the background when you have scenarios from the hub, have published one, or play in a language other than English | Nothing beyond the request. Post images and avatars load from GitHub |
| Hub downloads on the website and Android (our own Cloudflare Worker) | When you import, update or preview a scenario, flag or basemap, or suggest changes to one | Which hub file you asked for. Our code keeps no record of it; the Worker fetches the file from GitHub for you. On the stable website the content node you are using is asked for the file first (see The World Map). In the desktop app the file is fetched from GitHub by the app itself |
| Update checks and downloads (GitHub; the website checks openhistoria.com) | At launch and every few minutes while the game is open. The desktop app also downloads the map from GitHub on its first launch, and downloads an update it finds when it starts. The beta Android app downloads an update when there is one; the stable Android app opens the download in your browser when you tap Update. The check cannot be switched off | Nothing beyond the request |
| Place search (Komoot's Photon, Germany) | When you type in the map's place search | The text you type |
| Setup video (YouTube, in its privacy-enhanced mode; Google, United States) | Only when you press Play on the AI setup prompt's tutorial video | Nothing beyond the request until you press Play; after that, what YouTube's player collects |
| Flags not built into the game (flagcdn.com, Flagpedia) | When such a flag is shown. In the beta versions every country's flag ships with the game and is not fetched; the stable version fetches each flag it shows | Which flag is shown |
| Institution emblems (Wikimedia Commons, asean.org; beta versions) | When an institution's emblem is shown | Which emblem is shown |
| Pictures a scenario names on another website (whoever runs that website) | A scenario file can give a web address for a flag, a background or an emblem, and the picture is loaded from there when it is shown. The community hub refuses scenarios that do this (flagcdn.com aside), so it concerns scenario files you got elsewhere | Which picture is shown |
| Download sizes (GitHub) | The website's front page | Nothing beyond the request |
| Spellchecker (Google) | The desktop app on Windows and Linux may download a dictionary the first time one is needed | Which language's dictionary to download |
The game's fonts are part of the game and of the website; none are fetched from Google. A picture that the text of a scenario or of an AI answer points to on another website is not loaded by itself: it is shown as a link. Links to Discord, Reddit, GitHub and other sites open in your browser; those sites' own policies apply there.
When the Discord app is running on the same computer, the desktop app (and a copy of the game's server you start yourself) tells it what you are playing: the country you lead, the scenario and the in-game date, with how long you have been playing and a link to openhistoria.com. Discord shows this on your profile to people who can see your activity. This passes between the two apps on your computer and never reaches us; Discord's own privacy policy covers what it shows and keeps. To stop it, switch off "Show what I am playing on Discord" under Settings → General → Privacy, or turn off activity sharing in Discord (User Settings → Activity Privacy). In versions without that setting, only Discord's own switch stops it.
On the website, the world map is downloaded while you play. In the stable version it comes from our Cloudflare Worker and from content nodes: computers run by volunteers that keep copies of the map files, so that we do not have to serve them all. When the game opens, it asks the Worker for the list of nodes, checks which of them answer, and then keeps in touch with the one it uses about every 20 seconds while you play. Each node it contacts sees your IP address and your browser type; map files may be loaded from any of them, and the node you use sees which map and hub files you load. Nodes are not run by us and their operators are not vetted. The map files they serve are checked against the project's signature before the game uses them, so a node cannot change the map; a community file fetched through a node is not checked in that way. The node software we publish keeps the addresses of its current visitors in memory for about two minutes to count them, and writes nothing down.
The beta versions do not contact content nodes at all: there the map is part of the site or of the app, and comes from wherever the site is hosted.
The hub shows how many times each scenario's file has been downloaded. GitHub counts that itself when the game downloads the file from the hub, and the count is public. The game reports nothing of its own.
Versions of the game from before 6 October 2026 reported each import to a counter we ran. To count each install once, it kept a one-way hash of your IP address, mixed with a secret, for 365 days, and for an import made while signed in to an old website account, a scrambled marker of that account. That counter no longer stores anything, and the hashes it already holds expire by themselves within a year of being written.
The beta versions can play one game together. Hosting needs the desktop app; anyone can join with an invite code. When you host or join:
relay.damus.io, nos.lol, relay.primal.net, nostr.mom and relay.nostr.net, each run by its own operator, in various countries) and asks address-lookup servers run by Cloudflare and Google what your public address is. Each of these sees your IP address. The relays cannot read the messages, which are locked with a key made from the invite code.None of this passes through or is stored on a server of ours. A host is another player, not us: play with people you trust.
The community hub is a public GitHub repository, and every post there is a GitHub issue. Publishing needs a GitHub account: the game prepares the file and opens GitHub's form, and you submit the post yourself. Everything in a post is public, including:
The hub checks every file and republishes the checked copy, together with a list of the posts (your username, avatar and the post's text), in the same public repository; that list and those copies are what the game reads. Suggesting changes to someone's scenario posts a public comment with a file of your changes and the name and note you give. Likes are public GitHub reactions.
Scenarios are public domain. Every scenario made in Open Historia that is posted or shared in any way, and every change suggested to one, is dedicated to the public domain under CC0 1.0: anyone may copy, change and share it, for any purpose, without asking or giving credit. That cannot be taken back.
You can edit your posts on GitHub. To take one down, close it on GitHub with "Close as not planned", or ask us: its file and its entry are then removed from the hub. Copies people already downloaded, and the repository's history, are beyond our reach. We close or remove posts that are broken or abusive. GitHub's privacy statement covers GitHub itself.
Earlier versions of the website offered an optional account, through an email link or Google sign-in, to sync games between devices. That feature has been removed, and the game deletes what an old sign-in left in your browser the next time it opens. If you made an account, we still hold on our server: your email address, the copies of what you synced, and a record of which content node you last used. The synced copies are encrypted, but the key can be recovered by us (that is how an account could be recovered), so we are technically able to read them. We don't. Email us from the address you signed up with and we will delete everything tied to it, or send you a copy first if you ask.
If you run a content node, our registry records its id, address, public key, capabilities, region, software version, capacity, when it was first and last seen, and the optional operator name you give. The public directory lists the id, address and status; the operator name is shown only to us. We keep the record until the node is removed; email us to have yours removed. As an operator you see the IP addresses of the players your node serves: use them for nothing but serving the files, and keep no record of them.
Contributions to the code need a signed Contributor License Agreement, collected through cla-assistant.io with your GitHub account. It records your name, email address and, if you sign for one, your organisation. Commits you make are public on GitHub with the name and email address you gave them.
The app asks for no location, contacts, camera, microphone or advertising identifier, and contains no advertising or analytics software.
| What | Where | How long |
|---|---|---|
| Your games, saves, keys and settings | Only on your device | Until you delete them; what happens to a deleted game or scenario is described under What Stays on Your Device |
| Analytics, if you said yes | Google Analytics, United States | At most 14 months for the detailed data |
| Visit counts, and which application was used, if you said yes | Umami Cloud, in the United States | For as long as the project runs. They hold no name, email address, IP address or cookie |
| How many times each hub file was downloaded | GitHub (public) | While the hub shows them |
| Hashed IP addresses from the old import counter | Our import counter on Cloudflare | Up to 365 days from when each was written; no new ones are written |
| Old account data, if you had an account | Our server on Cloudflare | Until you ask us to delete it, or until we delete all of it, whichever comes first |
| Content node records | Our server on Cloudflare | Until the node is removed |
| Your hub posts, comments and likes | GitHub (public) | Until you or we remove them |
| Contributor License Agreements | cla-assistant.io and GitHub | For as long as the project uses the contribution |
| Emails you send us | Our inbox | As long as needed to answer them and to keep a record of what we did about a request |
Requests to our website and our Worker pass through Cloudflare, which keeps its own short-lived technical logs. We keep no logs of our own of who visits or plays.
Where data-protection law such as the EU's GDPR or the UK GDPR applies, this is what we rely on for each thing:
| What | Legal basis |
|---|---|
| Counting visits with Google Analytics and Umami, and the cookies Google Analytics sets | Your consent. You can take it back at any time, as easily as you gave it |
| Playing the setup video from YouTube | Your consent, given by pressing Play |
| Serving the website and the game's files, keeping them secure and available (Cloudflare, content nodes) | Our legitimate interest in running the site you asked to visit, safely |
| Drawing the map, flags and emblems, place search, hub browsing and downloads, update checks and downloads | Our legitimate interest in providing the features of the game you are using; each sends no more than the request itself |
| Connecting a shared game | Our legitimate interest in connecting you to the players you chose to play with, at your request |
| Showing what you play in Discord | Our legitimate interest in a feature of the app; it happens on your computer and you can switch it off |
| Old account data | Kept only so that you can ask for it or have it deleted (legitimate interest); it is used for nothing |
| Content node records and Contributor License Agreements | Our legitimate interest in running the node directory and in being able to show that the project may use the code it was given |
| Answering your emails and acting on your requests | Our legitimate interest in answering you, and legal obligation where the law requires us to act |
You never have to give us personal information to play, and there is no contract that requires it. We make no decisions about you by automated means and build no profiles.
Most of what the game handles never reaches us, so you control it on your device. For anything we hold, email [email protected]. We answer within 30 days, free of charge, and we may ask you to show that the data is yours (for an old account, by writing from its email address). Data held by Google Analytics, Umami, GitHub, Discord or your AI provider is covered by their own policies, but we will help where we can.
You have the right to:
This section is the notice that the laws of California and of other US states ask for, whether or not those laws apply to a project of this size.
We are based in the United States, and so are most of the services above: Cloudflare, Google, Umami, GitHub, Esri, Amazon, Discord and most AI providers. Komoot is in Germany. The relay servers shared games use, and content nodes, are run by their own operators in various countries. Your data may therefore be processed in the United States and other countries whose laws differ from yours.
For personal data from the European Economic Area, the United Kingdom and Switzerland, these transfers rest on the European Commission's and the UK's adequacy decisions for US companies certified under the Data Privacy Framework, where the provider is certified, and otherwise on standard contractual clauses in the provider's terms, or on the fact that the transfer is needed to do what you asked for, such as connecting a shared game or fetching a file. Email us if you would like to know which applies to a particular provider.
Open Historia isn't directed at children under 13, or under 16 where the law sets that age, and we don't knowingly collect personal information from children. The game has no accounts, no advertising and no profiling, and the visit counters stay off unless someone says yes. If you are under the age at which you can agree to that yourself where you live (13 in the United States and the United Kingdom, up to 16 in parts of Europe), please answer no, or ask a parent or guardian. If you believe a child's personal information has reached us, email us and we will delete it.
Because your AI keys are stored on your device without encryption, don't share your device or browser profile with people you don't trust with them. Set a spending limit with your AI provider, and revoke a key there if you think someone else has it.
When the game starts handling data differently, we update this page and the date at the top. We announce significant changes in the release notes and on our Discord, and if a change affects something you agreed to, you are asked again.
Questions or requests about privacy: [email protected]. The source code of the game is public on GitHub, so you can check what this page says about it for yourself.
Play Open Historia