Hey everyone, some of you might remember me from the Alternative Origins threads late last year. I was trying to get shared auth working across lots of indie game frontends on itch.io, CrazyGames and everywhere else indie games actually get played.
I thought I’d solved it with Alternative Origins, then Timo pointed out the ten origin limit. For a platform that eventually needed to support arbitrary third party games, that pretty much killed the approach. I said I’d give it some more thought. This is the follow up.
Quick origin story first, because it’s a very ICP one. CheddaBoards didn’t start as a product. It started as a leaderboard prototype for a cheese themed game I built for a memecoin project. My first ever canister went up in April 2025. A week later I lost access to the machine holding the identity, and after months of trying I never got it back. The source went with it.
Here’s the part that still gets me. For all I know, that canister is still out there. I can’t upgrade it, administer it or recover its internal state. It was my first real lesson in what ownership on ICP actually means when you’re the one who loses the keys. “Can’t be taken away” cuts both ways. It’s the most ICP lesson I’ve ever learned, and honestly it’s half the reason I rebuilt the whole thing properly instead of walking away.
The rebuild has been live in production since December 2025 and hasn’t stopped since.
So what is it. CheddaBoards is leaderboards as a service for indie game devs. The core backend is a single Motoko canister holding scores, players, sessions, achievements, moderation, the lot. There are open source SDKs for Godot 4, Godot 3.6 and Unity, plus a plain HTTP API for anything else. Someone recently built a C SDK against it that I didn’t write, which was a good day.
The auth problem from those old threads eventually got solved by stepping around it completely.
Instead of trying to make every game an Internet Identity frontend, the game shows a short code. The player opens cheddaboards.com/link in any browser, on any device, approves the code, and the session lives canister side. The game itself never touches OAuth, Internet Identity or Alternative Origins at all.
That one change is what made itch.io, CrazyGames, Quest browsers and random iframes all work with zero per platform setup, and it’s been the single most important architectural decision in the project.
Where it’s at today: 24,201 score submissions from 1,303 players across 67 registered games and roughly 46 developers, with somewhere between six and ten games actively submitting on any given day. Devs are starting to find it organically now. A shipped game in Austria named CheddaBoards in its privacy policy, and that C SDK appeared unprompted on GitHub.
One honest boundary, because I’d rather you hear it from me. The HTTP layer between games and the canister currently runs off chain on Netlify, and that proxy is closed source. The canister and all the SDKs are open, and the backend is on GitHub at https://github.com/cheddatech/CheddaBoards and self hostable if you want to run your own stack.
The public repo can trail the live canister by a release or two because I sync changes back in batches, and games don’t use II directly right now, though the developer dashboard supports it. I know an off chain proxy isn’t the pure answer, which brings me to the next thing.
I’m writing up the proxy to canister question properly: whether moving the HTTP layer fully on chain is realistic now, and what the cleanest architecture looks like for exposing a game facing HTTP API directly from ICP.
Just this week the proxy’s limits bit me in production. Batch achievement unlocks were timing out through the proxy, and the fix was moving the whole batch into a single canister method. Every problem like that pushes more logic onto the canister anyway, which is partly why I want to answer the question properly.
I’d genuinely like input from people here who’ve done HTTP heavy canisters at production traffic levels. That post is coming in the next week or two.
Good to be back
Chedz
cheddaboards.com