Privacy policy
Last updated: 1 November 2026
In short
- Kubelo has no account, no ads, no analytics and no tracking. To join the leaderboard you only choose a name: no e-mail and no password.
- Everything you do in the app is stored only on your device: your times, records, guide progress, settings and cubes. Nothing about you leaves your device unless you use the leaderboard (see below).
- The camera is used only to read the colours of your own cube. The camera pictures are read in memory. They are never saved and never sent anywhere.
- The leaderboard is optional, and for people aged 13 or older. If you join, the name you choose, your best times and a replay of each solve you post are public. They are kept on a server in the EU. Before you join, the app only asks the server for the lists and for a cube to solve. None of that includes your name or anything about you.
- You can delete everything at any time with Delete all data.
- Vibration can be turned off in the settings.
Who is responsible
Kubelo is made by Tore Meling (Norway), who is the data controller. If you have questions about privacy, write to us in the app (Menu → Settings → About Kubelo → Write to us).
Camera
Kubelo can use your phone's camera to read the colours of your own cube (Scan).
- When the camera is used: only when you tap Scan. You can use everything else in the app without the camera.
- Permission: Before your browser asks, the app explains what the camera is for, and you can choose "Not now". The permission request itself comes from your browser. If you say no, the rest of the app still works.
- What happens to the picture: The video is read in your phone's memory. The app measures the colours of the squares and keeps only those colours, to work out how your cube is mixed. No photos or videos are saved, and nothing from the camera is sent anywhere. No outside service, analytics or AI model is involved. It all runs on your phone.
- What is saved: The result is your cube's position, meaning which colour is where. The app also remembers which camera you used, so it opens the same one next time. Both stay on your phone.
- When the camera turns off: when the scan is done, when you close it, and as soon as the app is hidden or you switch apps. The torch is only on when you tap Light.
- To withdraw permission: touch and hold the app icon, choose "Site settings" and then "Camera". You can also go to your browser's settings, Site settings, Camera.
The leaderboard
The leaderboard is optional. You can use everything else in Kubelo without it. It lists the fastest ranked solves of the 3×3 on the screen, for this week and for all time. A ranked solve starts from a cube made by the Kubelo server, has 15 seconds of inspection, and has Help and Undo off. Solves with a real cube are not on the leaderboard. Read the leaderboard rules before you join.
What is sent, and when
The app only talks to the Kubelo server when you do something with the leaderboard. Nothing is sent in the background, with one exception that you asked for yourself: a solve you chose to post while you were offline waits on your phone, and is sent when you are back online, as long as its ticket is still valid (2 hours). After that it is dropped.
- When you open World: the app asks for the list, whether or not you have joined. If you have joined, it also asks where you stand, using your secret key.
- When you start a ranked solve, and each time you tap Scramble to get the next one: the app asks the server for a new cube. The answer is a ticket: the position of the cube, a random attempt ID and an expiry time, signed by the server. If you have joined, the request includes your secret key, so the ticket is made for you. The app never asks for a ticket in advance or in the background, only in a ranked solve you started.
- When you join: the name you chose, a secret key (random, made on your phone), and your confirmation that you are 13 or older and accept the rules. The server answers with a random player ID.
- When you post a solve: your secret key, the ticket the server gave you, the time, any +2 penalty, how long you looked at the cube first (the inspection time), every move with the time it was made, whether you moved the cube by dragging or with buttons, and the app version. The inspection time is only used by the server to check the penalty, and is not stored.
- When you report a time or a name, change your name, or leave: the report (the solve and one of three fixed reasons, no free text), the new name, or the request to delete everything.
The server stores your name, the random player ID, a hash of your secret key (not the key itself), the date you joined, and for each solve you post the time, any +2 penalty, how the moves were made (dragging, buttons or both), the moves with their times, the date and the app version. It also keeps the ID of each ticket you have used, so a ticket counts once. It does not store your IP address, and it does not store the inspection time.
Who sees what
- Everyone who opens the leaderboard sees your name, your best times and the dates. Anyone can also watch a replay of each solve you post, with all its moves. Your name does not need to be your real name, and the app suggests one you can use.
- Your player ID is public too. It is a random code, not your name. It appears in the lists and in links to a place, so anyone can see which times belong to the same ID.
- Reports and moderation: everyone can report a name or a time. A name is hidden automatically when several players report it, and we may hide a name or a time, or stop a player from posting. A hidden name shows as "Player" with a number. We aim to answer reports within 48 hours.
- Blocking: you can block a player. This is stored only on your phone. Their name is replaced by "Blocked player", and their time stays on the list.
Why, and who handles the data
- The legal basis is a contract with you, to give you the list you asked to join (GDPR Article 6(1)(b)), and our legitimate interest in security, checking for cheating and moderation (Article 6(1)(f)).
- Tore Meling is the data controller. The server runs on Cloudflare, Inc., which acts as our data processor under its data processing agreement. The data is stored in a Cloudflare D1 database in the EU. Requests are handled at the Cloudflare location closest to you.
- Your IP address: as with any visit to a website, Cloudflare sees your IP address. It is used briefly in memory to limit the number of requests, and we do not store it. If a request is blocked for too many tries, Cloudflare's security log keeps the IP address for a short time.
- Logs: technical logs without your IP address or key (the path, the status and how long a request took) are kept for at most 3 days.
- The solves are checked by computer. Times that look impossible, and very fast times on the all-time list, are looked at by a person before they appear. Nobody is profiled, and no decision about you is made by a computer alone.
How long it is kept
- Your player and your solves: until you leave, or 24 months after your last posted solve.
- Used tickets and rejected attempts: 30 days.
- Reports: 90 days. A handled report is deleted 90 days after it was handled, and a report nobody has looked at is deleted 90 days after it was made.
- The log of moderation actions: 12 months. When a player is deleted, the lines in the log about that player and the player's solves lose their target, so no player ID is left. Only a line saying that a player was deleted stays, without an ID or a name.
Age
You must be 13 or older to join. The app asks you to confirm it, and does not let you join without it.
Delete your leaderboard data
- In the app: open World, tap your name and choose Leave the leaderboard. Your name and all your times are removed from the server. Your solves stay on your phone.
- With Delete all data: if you have joined and you are online, the app first removes you from the leaderboard, then deletes everything on your device. If you are offline, the app tells you. You can then choose Delete anyway, and your name and times stay on the server until you ask us to remove them.
- If you have lost your phone, or cannot open the app: write to kontakt@kubelo.app with your leaderboard name and roughly when you set your best time. We delete it when we can reasonably tell that it is yours. If we are unsure, we hide the place instead until the owner gets in touch.
- If you never made a backup: the name stays on the server without an owner, and nobody else can take it. It is deleted by itself 24 months after the last posted solve.
A new phone: save a backup first (… → Settings → Your data). It includes your leaderboard name and secret key, so your name and times come with you when you restore it. Whoever has the file can post in your name, so keep it private. If the new phone already has a leaderboard name, it keeps that one and the app tells you.
What is stored on your device
Kubelo keeps its data in your browser's storage on your device, tied to this website. If you install the app from Google Play, it opens full screen in your browser, usually Chrome, and the data is kept in the browser's storage on your phone. The names in the "Stored as" column are the storage keys, so you can check them in your browser's developer tools.
| What | Contents | Stored as | Why |
|---|---|---|---|
| Your solves | Time, number of moves, when the solve was completed, how the cube was mixed, any penalty (+2 or DNF), whether inspection was on, whether Help was used, whether you solved on the screen or with a real cube, and the date if it was the daily cube. | kube.solves.v1 |
Records and statistics. |
| Cubes in progress | One per size (2 to 7): the position, the moves you can undo and redo, the time so far and when the cube was saved. | kube.session.v1.2 to kube.session.v1.7 |
So you can continue where you left off. |
| Your progress in the guide | Which steps you have done, where you are, and how long you have used the guide. For your own cube, also the position from the scan, the moves you have confirmed with Done, and whether camera checks are on. | kube.guide.v1 |
So you can continue the guide. |
| Choices in the guide | Sound, vibration, move letters under the cube, camera checks, automatic mode and its pace. | kube.guide.prefs.v1 |
So the guide stays the way you set it. |
| Lessons | Which lessons are open and completed, the days and sessions you practised, each attempt (time, moves, help used and result), the task in progress, short answers about practising on a real cube, and a random five-character code that is not linked to you. The code is used in user tests, where a test leader reads the results on the same phone. | kube.learn.v1 kube.learn.log.v1 kube.learn.current.v1 |
So the lessons open in the right order. |
| Settings | For example size, finish, colours, time of day, controls, sound, vibration, inspection and the real-cube timer. | kube.settings.v1 |
So the app stays the way you set it. |
| Choices in the interface | Options that only concern the look and feel on this device, such as the glass style, the language and the real-cube timer. | kube.ui.v1 |
So the app looks the way you chose. |
| Where you are in the app | The part of the app that was open last: home, Free cube or the guide. In test builds only, also a switch for the test leader. | kube.nav.v1 |
So the app opens where you left it. |
| Introduction | Whether you have turned and rotated the cube. | kube.onboarding.v1 |
So it is not shown again. |
| Camera choice | An ID for the camera you used last. The browser makes this ID for this website only. It is not a photo and says nothing about you. | kube.scan.camera |
So the scan opens the same camera. |
| Saved cubes | Cubes you saved to use again or send to a friend: the moves, the date and a short name if you gave one. For a cube a friend sent you, also the first name and the time that came in the link. At most 50. A cube you share as a link is only in the link, not stored here. | kube.scrambles.v1 |
So you can use the same cube again, and see your time next to your friend's. |
| Your first name for a challenge | A first name, only if you choose to give one when you send a challenge link. It is kept on your phone, and leaves it only when you send a link yourself: the link then holds the cube, your time and this name. Without it, your friend sees “Your friend”. | kube.duel.name.v1 |
So your friend knows who the link is from. |
| Your leaderboard identity | Only if you join the leaderboard: the name you chose, a random secret key made on your phone, a random player ID and the day you joined. It is part of a backup, so whoever has a backup file can post in your name. | kube.board.v1 |
So you stay on the leaderboard and can post. |
| Blocked players | The players you blocked on the leaderboard: their player ID and the name they had. It is never sent anywhere. | kube.board.blocked.v1 |
So you do not see their names. |
| Saved leaderboard | The last lists you opened (this week and all time): names, times and dates of the players on them. | kube.board.cache.v1 |
So you can read the lists without a connection. |
| A solve waiting to be posted | If you post without a connection, the solve (time and moves) waits here until you are online again, for at most 2 hours. | kube.board.pending.v1 |
So the post is not lost. |
| The moving message | Only in the last version on the old web address: the time after which the message about Kubelo moving to Google Play may show again (three days after you tap "Not now"). | kube.farewell.snooze.v1 |
So the message does not show every time you open the app. |
| Error log | The last 20 technical errors in the app: the error message, where in the code it happened (a stack trace), the app version and the time. | kube.errors.v1 |
So you can tell us what went wrong. It only leaves your phone if you copy it yourself (see below). |
| Technical information | The data format version, when the app last asked for persistent storage, a copy of your data from before the last restore (so it can be undone), data that could not be read (set aside), a test write that is deleted immediately, and leftovers from older versions of the app. | kube.data.schema kube.persist.v1 kube.restore.before kube.probe kube.settings.rev kube.seenIntro.v1 kube.leverHint.v1 kube.solves.v1.unreadable kube.learn.v1.unreadable kube.learn.log.v1.unreadable kube.guide.v1.unreadable |
So storage works safely. |
| Temporary | When the graphics last failed, whether simpler graphics was chosen, a language chosen by a link, the zoom level, and whether the app was opened from Google Play. Deleted when you close the app. | kube.lost kube.graphics kube.learn.lang kube.session.zoom kube.play |
So the app does not restart in a loop, and keeps your choices while it is open. |
| Replays of your solves | The moves of each solve you did on the screen, and when you made each move, so a solve can be played back on the cube. Only your best solve and your first solve for each size are kept for good; of the rest, the latest 300. A replay is deleted when you delete its solve. Solves with a real cube have none. | kube-replays (IndexedDB) |
So Records can play back your best solve. Replays are not part of a backup. |
| Landscape cache | Computed terrain for the background, at most 40 MB. It is rebuilt when needed. The pictures for the Earth view, when you choose it, are loaded from the same address as the app and stored on your phone. | kube-terrain (IndexedDB) |
Faster start-up. |
| App files | Program code, fonts and images. | The app's offline cache | So the app works offline. |
Kubelo does not store your e-mail address, phone number, location, photos or any other contact details. If you join the leaderboard, it stores the name you choose, which does not need to be your real name.
The app asks the browser for persistent storage so that your data is not deleted when the device runs low on space. The browser may answer without asking you.
What is sent from your device
Kubelo sends no information about you or how you use it off your device, unless you join the leaderboard. If you do, the app sends what is described under The leaderboard, and only when you do something there. Even then, we never receive your settings, your cube, the camera pictures or anything else you do in the app. Only the solves you choose to post are sent.
When you open the app for the first time, and when it checks for a new version, your device downloads the app's files from this website. The website is hosted by GitHub Pages (GitHub, Inc.).
- As with any visit to a website, the host sees your IP address and the technical information your browser sends, such as the browser type. The host may keep this for a short time in logs for operations and security.
- We do not use these logs and do not combine them with any other information. The host's own privacy policy applies.
- The legal basis for this processing is our legitimate interest in delivering the app securely and reliably (GDPR Article 6(1)(f)).
The app uses no cookies, advertising ID, analytics, crash reporting or content from other websites. The fonts are part of the app.
When you share or save something yourself
This only happens when you tap a button, and we receive none of it.
- Challenge someone on the daily cube, and Share or Challenge on a solve, open your phone's share menu. The text contains the cube size, your time and sometimes the number of moves or the date. The link goes to the app. In the app from Google Play, the text also ends with a link to Kubelo's page in Google Play. The link says only which kind of share it came from, never who you are. You choose where it goes. Without a share menu, the text is copied to the clipboard.
- Share when you have solved the cube in the guide shares a short text with your time, without a link.
- Copy on a solve in Records copies how it was mixed to the clipboard.
- Export CSV in Records saves your solves for one size as a file on your device.
- Save a backup (… → Settings → Your data) saves a file to your Downloads. It holds your solves, settings, cubes in progress, guide progress and lessons, whether the introduction has been seen, and your leaderboard name with its secret key if you have joined. Replays of your solves are not included. Whoever has the file can post in your name on the leaderboard. It is not encrypted, so keep it like any other private file. You decide where it goes. The app never uploads it.
- Restore from a file reads a file you choose, only on your device.
- Copy in the error log (… → Settings → About Kubelo) copies the technical errors to the clipboard, so you can send them to us if you want to.
- Send feedback (… → Settings → About Kubelo → Write to us) opens your own email app with a ready text: the subject, the app version and whether the scanner was used in this session. You see everything before it is sent and can delete any of it. If you send feedback, it goes from your own email app. Kubelo itself sends nothing. Rate (only in the app from Google Play) opens the app's page in Google Play.
- Solve a real cube by hand (in the menu, when it has a beginner video) opens a video. If you open the beginner video, it opens on YouTube, and YouTube's own privacy policy applies there. Kubelo does not embed YouTube or send anything to it.
If you test Kubelo before launch
Before Kubelo comes to Google Play, volunteers test it. Signing up happens at Google, not in the app, and the app sends nothing about it. Signing up collects nothing in the app or on the Kubelo web pages: they collect nothing and set no cookies. Only the missions below collect answers, and only when you send them.
- The tester group: you join the Google group «Kubelo testers» and then become a tester in Google Play, both with your Google account. Google's own privacy policy applies there. Only Tore Meling can see the member list of the group, and members do not see each other. The list is kept for as long as the tester promise applies, because it shows who gets everything in the Kubelo app free. We use it for nothing else. You can leave the group at any time. You must be 13 or older to join.
- Missions: your answers are linked to a random code made on your phone, not to your name. Your name is optional. The answers are used only to improve Kubelo and to apply for release on Google Play, and they are deleted when the test is over.
- Screenshots and feedback by email go to the Kubelo contact address and are read by Tore Meling. AI tools may be used to sort and summarize them. They are deleted when the test is over. Leave out anything personal.
- Google Play: private feedback you send in Google Play is handled by Google under Google's privacy policy.
- Who is responsible: Tore Meling. Write to the Kubelo contact address in this policy to see or delete what we have about you.
Other permissions
Apart from the camera, Kubelo does not ask for microphone, location, contacts or notifications, and it only reads files you choose yourself. Sound is generated in the app. Vibration can be turned off in the settings. While you solve, the app keeps the screen awake.
Children
Children can use Kubelo. The app has no chat, no ads and no purchases. Unless you join the leaderboard, it collects no personal data from anyone, including children. The leaderboard is only for people aged 13 or older: you confirm this when you join, and the app does not let you join without it. This also applies to the camera: the pictures are only read on the phone and are never saved or sent.
How long data is kept, and how to delete it
Your data stays on your device until you delete it. The browser may also delete it by itself if the device runs low on space and persistent storage has not been granted.
- The leaderboard: choose Leave the leaderboard in World, or use Delete all data while you are online. See Delete your leaderboard data, also for when you no longer have your phone.
- Solves: In Records you can delete solves one by one, or delete all solves for a size. This also deletes their replays.
- Everything in the app: Choose … → Settings → Your data → Delete all data. This deletes everything in the table above from your device: your times and records, guide progress, lessons, saved cubes, settings, camera choice, error log, the replays of your solves and the landscape cache. The app starts again as new, on the home screen. The app's own files stay, so it still works offline.
- Everything on an Android phone: Touch and hold the app icon, choose "Site settings" and delete the data. You can also go to your browser's settings, Site settings, All sites, find this website and delete the data there. This also removes the camera permission.
- Everything in a browser: Delete the site data for this website in your browser's settings.
- Note: Uninstalling the app does not necessarily delete the data, because it is kept in the browser. Save a backup first if you want to keep it.
- Backups and CSV files are deleted like any other file.
Security
The app is downloaded over an encrypted connection (HTTPS). Unless you join the leaderboard, we store no information about you on any server. If you do, the server stores only a hash of your secret key, never the key itself, and everything is sent over HTTPS. The accounts that control the website and the app are protected with two-step verification.
Your rights
Under the GDPR you have the right of access, rectification, erasure, restriction and data portability, and the right to object. Unless you join the leaderboard, we hold no information about you, so we have nothing to show or delete. Everything is kept by you and can be deleted as described above. If you have joined, you can delete everything we hold about you yourself with Leave the leaderboard, or by asking us.
You can still ask us at any time, by writing to us in the app (see Contact below). We reply within one month. You can also complain to the Norwegian Data Protection Authority, Datatilsynet (datatilsynet.no).
Changes
When the app changes, we update this policy and the date at the top. If we change what the leaderboard collects, or the app will later send other information off your device, you will be told in the app before the change takes effect.
Contact
Write to us in the app: open Menu, then Settings → About Kubelo → Write to us. We reply within one month.
This page works without the app and without a network connection once the app has been opened.