Kromatika is a color-gradient puzzle game built by Ian Handy. I designed it to collect as little data as possible about the people who play it. This page explains what does and doesn't leave your device, why, and what you can do about it.
kroma.ianhandy.com. Random device
identifiers associate these actions with the same device without
requiring an account or real name.If you sign in to Game Center, Apple relays your scores (daily time, daily moves, and daily streak) and earned achievements. I don't receive your Apple ID or Game Center identity through Kromatika's community backend. Apple manages Game Center identity and leaderboard data under its own privacy policy.
Tapping the thumbs-up after solving a puzzle uploads the
puzzle's JSON structure, its difficulty level, and an
opaque per-install UUID to
kroma.ianhandy.com. The UUID is a random identifier
generated on first launch and used only so the server can make
sure one device can only like the same puzzle once. It associates
your contributions with the same app installation. It is not tied
to your Apple ID, phone number, or contacts.
Other players may receive puzzles you've liked when their game pulls from the community pool. No identifying information is ever sent along with the puzzle.
Tapping the thumbs-down sends the same UUID, puzzle JSON, and level to the server. The dislike is used to decrement the puzzle's community like count and is logged separately for future improvements to the puzzle generator.
When you solve a puzzle in challenge mode that's currently in your liked-puzzle pool, your solve time, move count, and whether you solved it perfectly are recorded locally and may be sent to the community pool for generator tuning. No timestamps or identifiers beyond the opaque install UUID are attached.
If you choose to join the daily-streak leaderboard, Kromatika
sends your longest daily streak, the date it runs through, and
an opaque device UUID to kroma.ianhandy.com.
The server immediately hashes the UUID and publishes only the
streak with a generated anonymous handle. Turning leaderboard
sharing off removes that record from the server.
In the Godot edition, written feedback goes directly to Kromatika's service, hosted by Vercel and stored in Turso, rather than Google Forms. It includes your message, app version, platform, game mode, level, completion status, elapsed seconds, mistakes and reduced-motion setting. Reports are private to authorized administrators. A random per-message receipt prevents duplicates; no hardware identifier or account identity is included. Unsent reports stay on your device and retry while the game is open. Stopping retries cannot recall a report already received.
In the original native iOS edition, when you send feedback from the menu, your written comments, difficulty and quality ratings, puzzle and session details (including level, mode, solve time, mistakes, and completion), accessibility settings, app version, and operating-system version go to a Google Form to help improve the game. Game feedback has no puzzle ratings, but still includes the current session details. A stable device identifier is not included in this feedback form payload. Avoid including personal information in your comments.
Thumbs-up and thumbs-down also submit puzzle feedback to that form. Community likes and dislikes separately send the random installation identifier described above to the Kromatika backend.
Opening the in-game puzzle menu prepares a share link by uploading
the puzzle's JSON structure to kroma.ianhandy.com, even
if you do not then send the link. Other share actions also upload
the puzzle to create a short link. The stored puzzle expires after
90 days. If you choose to share, the link is handed to the iOS share
sheet and travels through whichever channel you choose.
Publishing uploads the puzzle's structure, title, difficulty level,
and a random device identifier to kroma.ianhandy.com.
The title is the name you give the puzzle, not a required personal
name. Community votes send the puzzle identifier, vote, and the same
device identifier. These records support publishing, moderation,
and duplicate-vote prevention. Submissions await community review
before they appear in the public pool.
This community identifier is stored in the device Keychain and is separate from the installation identifier used for likes and dislikes. It may persist after reinstalling the app. The backend stores identifiers alongside their contributions; these records are associated with a device, even though no account is required.
Blocking a submitter and hiding a
single puzzle are both local-only, they change what your device
shows and nothing leaves it. Reporting a puzzle
hides it on your device immediately and sends the puzzle's
identifier, the reason you picked (offensive, spam, not their
puzzle, or something else), and the community device identifier to
kroma.ianhandy.com so it can be reviewed. All three
are available as VoiceOver / Voice Control accessibility actions,
not just long-press gestures.
If you tap "save image" after solving a puzzle, the rendered image is saved to your Photos library. This requires Photo-Library-Add permission, which iOS will prompt for the first time. I never read your photo library, I only write one image when you ask me to.
If your device is signed into iCloud and iCloud Drive is on, zen and challenge progression, aggregate stats, and daily completion history sync across your own devices via Apple's iCloud Key-Value Store, I never see that data, only you do.
Kromatika has no advertising, account system, or chat. The optional community features use the random device identifiers described above. Do not include personal information in puzzle titles or feedback.
kroma.ianhandy.com. Standard HTTP access logs.
See Vercel's privacy policy.If the game changes in a way that changes what data is collected, I'll update this page and bump the "last updated" date above. The app itself doesn't show privacy prompts beyond what iOS requires (Photos permission, Game Center sign-in) so material changes will be reflected here first.
Questions, deletion requests, or anything else: help@ianhandy.com.