Ninehole app icon — a cream playing card tilted on dark green felt, carrying a bold black 9 and a yellow golf flag standing in its hole

▶ NOW SHIPPING  //  iPHONE + iPAD + MAC + ANDROID

Ninehole

Nine cards. Nine holes.
Lowest score wins.

Nine-card golf for a table of two to sixteen. Everybody brings their own screen — a phone, a tablet, a laptop — one of them hosts the table, and any empty seat is filled by a bot. You get nine cards in a three-by-three grid, all face down, and you turn two of them over to start. On your turn you draw the top of the deck or take the discard, then either swap it into your grid or throw it away and flip something. A queen is worth 25, a king is worth nothing, and a joker is worth −2. Three of a kind down a column cancels the whole column to zero. The first player to get all nine face up goes out, everyone else gets one last turn, and a knocker who isn't lowest takes +50 for the trouble.

Out now on the App Store and Google Play, paid once — no ads, no in-app purchases, no subscription, no account to make. One App Store purchase covers iPhone, iPad and Mac; buy it on any of the three and it is yours on all of them.

▶ THE LOOP

HOW IT PLAYS

A hole is nine cards; a game is as many holes as the host sets — one, three, six, nine or eighteen of them. One person opens a table, everyone else joins it, and the cards are dealt. Nobody shuffles, nobody argues about whether a jack is ten, and nobody has to remember whose turn it is.

▶ THE ARRANGEMENT

ONE DEVICE OWNS THE GAME

No server of ours. There isn't one to have.

Ninehole is self-hosted. One player's device holds the only real deck, runs every rule, and sends each of the other seats a version of the table with every face-down card blanked out before it leaves. That masking is not a courtesy — it is the only shape the game has. Nobody can see a face-down card, and that includes you, and that includes the host.

Online play is the newest and least-travelled part of this game. Solo and same-Wi-Fi tables are the ones we play, and they are the ones we would tell you to buy it for.

▶ THE HONEST BIT

ONE PRICE, FOREVER

Ninehole is a premium game and nothing else. No ads. No in-app purchases. No account to make. No analytics. The only sign-in in the game is an optional one, for the cross-platform save. There is no subscription, no season pass, no currency, no energy meter and no card-back shop — none of those things were built, so none of them can arrive in an update you didn't ask for. You buy it once and own all of it.

We do not print prices here. A figure written on this page goes stale the day a store moves it and nobody notices; the store page you buy from is always current and always right for your territory.

▶ ONE CODEBASE

WHERE IT RUNS

Built with Flutter: one codebase across iOS, iPadOS, macOS, Android and Windows. The rules are one pure-Dart engine that no screen, no bot and no network layer is allowed to second-guess, and the host's device is the one running it — so a phone and a laptop at the same table are reading the same game rather than each keeping its own opinion of it.

▶ ON THE RECORD

NOTHING YOU DIDN'T ASK FOR

Ninehole has no account of ours, no server of ours, no analytics and no crash reporter, and there is no advertising or in-app-purchase code in the build at all. Your name, your avatar, your settings, your lifetime stats and the table you are in the middle of are written to your own device's storage, and your stats and a few preferences are also kept in your own iCloud or Android backup, which we cannot read. The game itself sends nothing past your own network from a solo game or a same-Wi-Fi table. Two things happen only if you choose them on purpose: an Online table, found and carried through Epic Online Services, and the cross-platform save, which keeps your stats with Epic after you sign in with Google or Apple. The privacy page says exactly what reaches Epic for each, and what does not. Purchases are handled by the store you bought from; we never see payment details.

READ THE NINEHOLE PRIVACY POLICY

▶ WHERE THE PARTS CAME FROM

CREDITS

Every card, the felt and the app icon are drawn in code — painters and a fragment shader, no imported art. Every sound is synthesized rather than recorded. Type is Lilita One and Nunito, both under the SIL Open Font License, with the licence texts bundled in the app's own licence page. Everything else came off our own line.