Press the "Create New Leaderboard" button and wait for the leaderboard to generate.


| Status | Released |
| Category | Tool |
| Platforms | HTML5 |
| Rating | Rated 4.9 out of 5 stars (124 total ratings) |
| Author | Danial Jumagaliyev |
| Made with | Unity |
| Tags | leaderboard,leaderboard-creator,networking,online-leaderboard,Unity,Unreal Engine |
| Average session | A few seconds |
| Languages | English |
Click download now to get access to the following files:
Support this Leaderboard Creator at or above a special price point to receive something exclusive.
NOTE: Now available for purchasehere
You also get this sweet animation when activating it:

*Delivered within 24 hours of purchase
Log in with itch.io to leave a comment.
Hi there! I love your tool, I used it for a couple of jams and it is very easy to implement <3 I referenced you in my itch page.
I only have one question, I'm using v2.8 since may 2024. But there are everyday several periods of 20-40min where the leaderbords won't respond, always from 21.00-22.00 CET, even trying to open them from here (leaderboard-creator) it says "Internal server error". Is it a known issue that you are fixing on the 3.0 or do you know that this is happening?
I mean it is free so no problem, and I also managed those cases from the games, so you can play them without leaderboard, but it's a pitty when some player tells me that couldn't open the game :(
My solution to this was to adjust my game to store a player's personal best, so whenever they open the leaderboards, and the servers are working fine, it'll compare their stored best vs. their uploaded best, and if their store score is better, it'll give them a button to upload their new personal best.
It was originally something I created to allow players to play offline, but upload their score later.
In leaderboard we can upload user's Names but isn't there anyway to upload user's profile pics
I mean I saw a variable named Extra but when send my string (basically a base64 string converted from a sprite) but the problem is that the characters of that string are more than 700 but the allowed amount of characters of that Extra variable is 100
I have tried reducing the quality of that sprite and convert it to jpeg instead of png but still the characters are more than 100
What should I do in this case any ideas?
You should not be storing the full sprite in string, you should create some kind of ID for a sprite in a scriptableObject or something and save that in the extras. I created a little class that helps me store data in a single string in a KvP way, hope it helps:
public class SingleStringKvP{ private readonly Dictionary<string, string> _kvPairs = new(); private const char PairSeparator = ';'; private const char KeyValueSeparator = ':'; public SingleStringKvP(string startingValue) { Parse(startingValue); } public SingleStringKvP() { } public void AddValue(string key, string value) { _kvPairs[key] = value; } public string GetValue(string key) { return _kvPairs.TryGetValue(key, out var value) ? value : string.Empty; } public override string ToString() { var builder = new StringBuilder(); foreach (var kvp in _kvPairs) { if (builder.Length > 0) builder.Append(PairSeparator); builder.Append($"{kvp.Key}{KeyValueSeparator}{kvp.Value}"); } return builder.ToString(); } private void Parse(string startingValue) { if (string.IsNullOrEmpty(startingValue)) return; var pairs = startingValue.Split(PairSeparator); foreach (var pair in pairs) { var kv = pair.Split(KeyValueSeparator); if (kv.Length == 2) { var key = kv[0]; var value = kv[1]; AddValue(key, value); } } }}Hey devs :)
I didn't find tutorials online, so I decided to make one. Here you can find the gist: Simple leaderboard in Godot
I will be working on the devlog soon, please let me know in the comments for gist what you want to see in it :)
Also, if you want to secure your leaderboard in Unity to verify that the entries are coming from the game itself and not from POST requests, I've made a devlog describing exactly that:
Hacking Leaderboard like a PRO
P.S.
Absolutely love this tool :)
When I try to create a new leaderboard I get an error
A page embedded in html-classic.itch.zone says
abort("both async and sync fetching of the wasm failed") at Error at jsStackTrace (https://html-classic.itch.zone/html/11396104/
LeaderboardCreatorWebBuild/Build/
LeaderboardCreatorWebBuild.framework.js:9:216393)
at stackTrace (https://html-classic.itch.zone/html/11396104/
LeaderboardCreatorWebBuild/Build/
LeaderboardCreatorWebBuild.framework.js:9:330280)
at abort (https://html-classic.itch.zone/html/11396104/
LeaderboardCreatorWebBuild/Build/
LeaderboardCreatorWebBuild.framework.js:9:697)
at getBinary (https://html-classic.itch.zone/html/11396104/
LeaderboardCreatorWebBuild/Build/
LeaderboardCreatorWebBuild.framework.js:9:12538)
athttps://html-classic.itch.zone/html/11396104/
LeaderboardCreatorWebBuild/Build/
LeaderboardCreatorWebBuild.framework.js:9:12871
Thank you so much for your tool. I have additional questions that are not outlined in the docs:
1. How many scores can be submitted to the board in total?
2. When the max submittable scores are reached, what happens when you submit a new one, what happens with the old scores?
3. How is the unique-user-identifier for the user made? Does it read the smartphone-ID (which would mean the user would have to grant necessary permission)?
4. Is there a chance of collision between user identifiers?
Things I have found out myself:
Username character limit is 127 (visible in the source code).
Just want to report what I believe might be a bug:
I uploaded a score of around 11000 with the name "D" using one device, then, while testing something, I uninstalled my game and reinstalled it. Uploaded a new score of 13000 with the reinstalled app, and it added a new score to the list (I assume it has a new ID now that the game was reinstalled). So, I had two scores of "D" in my list, instead of the first one being overwritten. That was fair enough.
So, I come on here and edited the 11000 scorer's name to "B". When I clicked ok (the "check/tick" button), the 13000 score was edited too: the score was changed to 11000 (though the names remained as I put them). I ended up with two scores of 11000, with the names "B" and "D", even though I never edited the other one.
How come this happened? I assumed the ID would've changed if a new entry had been added instead of overwritten, after I reinstalled the game.
Something along the lines of this...
void GetAllEntries() { Leaderboards.YourLeaderboard.GetEntries( isAscending: true, callback: OnEntriesLoaded(is passed a list of "Entry") errorCallback: OnError(is passed a string with error) );}void OnEntriesLoaded(Entry[] entries) { if (yourScore > entries[0]) { LoadScene(); }}void OnError(string error) { Debug.Log(error);}How to use the IsMine() function to search for the Player's own score in the list? I get errors whenever I try to use it, saying "Entry does not contains a definition for IsMine".
I just want to be able to access the player's personal rank without any errors coming up. Once I've done that, I feel I can handle the rest from there with what I want to do (displaying the rank, etc).
I followed this tutorial video to implement the scoreboard:
But I'm not displaying the scores, only loading the scoreboard, because I don't want my game to display them all, just the player's personal score. So, I haven't included the loops shown in the video, just the function, and an empty version of the "LeaderboardCreator.GetLeaderboard" condition.
At present, I just have the function showing the top three scores, for the sake of testing, but my next step is to access the player's personal score and display that (which I'll then use to get the scores ranked directly above and below it).
So far, the condition looks like this:
LeaderboardCreator.GetLeaderboard(publicLeaderboardKey, ((msg) =>
{
rank1text.text = "#" + msg[1].Rank.ToString(); //Set the highest displayed rank
rank1nameText.text = msg[1].Username; //Set the highest displayed rank's name
rank1scoreText.text = msg[1].Score.ToString(); //Set the highest displayed rank's score
rank2text.text = "#" + msg[2].Rank.ToString(); //Set the middle displayed rank
rank2nameText.text = msg[2].Username; //Set the middle displayed rank's name
rank2scoreText.text = msg[2].Score.ToString(); //Set the middle displayed rank's score
rank3text.text = "#" + msg[3].Rank.ToString(); //Set the lowest displayed rank
rank3nameText.text = msg[3].Username; //Set the lowest displayed rank's name
rank3scoreText.text = msg[3].Score.ToString(); //Set the lowest displayed rank's score
//bool isMine = msg.IsMine();
//Debug.Log(msg.IsMine().Score);
//Debug.Log(LeaderboardCreator.GetPersonalEntry(publicLeaderboardKey, Whatever goes in here));
}));
You can see lines I've commented out. These were my attempts to use IsMine() and GetPersonalEntry, but every attempt gave me an error.
Anyhow, I don't think it's the GetMine() method I need, it's the GetPersonalEntry() method. Took me a while, but I finally figured out how to use it.
Incidentally, is there a boolean I can call if the Leaderboard fails to load? I.e. if the player is offline. I just want to use it to display a message if the leaderboard fails to load (I see that the servers for it go down frequently as well).
Hey there, Silver Fang, every function has an optional callback which will return the error message whenever an error occurs, please see the documentation:
https://github.com/danqzq/unity-leaderboard-creator
what im doing is letting the user choose his name when the he opens the app, and the leaderboard updates after every game with the highscore. how can i make it so that the user cant choose a name that already exists in the leaderboard? For example lets say he decides on "Bot" and that name already is in the leaderboard, i want it to say "Username already exists choose another" or something.
UPDATE:
took a while but i fixed it!
Love this leaderboard thank you for your work!!
Advanced Leaderboards have been moved to Leaderboard Creator V3, now available in early access:
https://danqzq.itch.io/leaderboard-creator-v3
I can't get the score to update, the username does update normally. Even if I hard code values like this:
public void UploadEntry(string username, int score) { Leaderboards.FlappyBirdClone.UploadNewEntry("asdasd", 99, isSuccessful => { if (isSuccessful) { Debug.Log(score);
GetLeaderboard(); } });
}
my username becomes asdasd but score does not become 99
Hey guys, sorry for the late response.
Advanced Leaderboards have been moved to Leaderboard Creator V3, now available in early access:
https://danqzq.itch.io/leaderboard-creator-v3
Hey SurocIsMe!
Please familiarize yourself with how the leaderboard entries work:
https://github.com/danqzq/unity-leaderboard-creator?tab=readme-ov-file#uploading...