The backend for your Unity game

Player accounts, leaderboards, remote config, cloud save and daily rewards — one Unity SDK, one dashboard, ready in minutes.

Free plan with 1,000 players. No credit card.

One backend for every engine

Instant guest sign-in that survives restarts, then link to email or Google through a secure web page — progress comes along.

PlayerSign-incoins
NovaGoogle1,240
KaitoEmail860
LunaGuest410
RakaGoogle1,975
MiraGuest95
POST/v1/auth/guest
{ "ok": true, "auth_method": "guest", "player": { "player_id": "player_3f9c…", "display_name": "Guest 4821" } }

A few lines in your engine

Sign a player in, post a score and read live config. Every call returns a result instead of throwing.

Unity
C# SDK for Unity 2021.3+ with async, coroutines and a Starter scene.
Godot
GDScript addon for Godot 4.2+ with an autoload and editor setup.
Web / JavaScript
One JavaScript file for HTML5 games, websites and Node.js.
REST API
Plain HTTPS and JSON for any other engine or server.
using MajacloudSdk;
using UnityEngine;

public class GameStart : MonoBehaviour
{
    private async void Start()
    {
        // Restores the saved session or creates a guest
        var signIn = await Majacloud.Auth.SignInAnonymouslyAsync();
        if (!signIn.Ok)
        {
            Debug.LogWarning(signIn.Error.Message);
            return;
        }
        Debug.Log("Hello " + signIn.Value.DisplayName);

        await Majacloud.Leaderboards.SubmitScoreAsync("coins", 120);
        int damage = Majacloud.RemoteConfig.GetInt("enemy_damage", 25);
    }
}

Everything a live game needs

Each service works on its own and through the same SDK calls, from the editor to WebGL and mobile builds.

Change the game without an update

Every change is versioned and signed. Roll back any value with one click; games pick it up on their next fetch.

Remote config
Remote config
Live version 14 RSA-SHA256
KeyTypeValue
enemy_damagenumber30
player_speednumber4.5
double_xp_weekendbooleantrue
event_bannerstringLunar festival: 2× coins!
shopjson{"sale": 0.2}
enemy_damage 25 → 30Restore

Know every player

Instant guest sign-in that survives restarts, then link to email or Google through a secure web page — progress comes along.

Players
PlayerSign-in
NovaGoogle
KaitoEmail
LunaGuest
RakaGoogle
MiraGuest
Nova
player_3f9c…
Wallet
coins1,240
gems15
Documents
progressr12
settingsr3

Cloud save

Save any serializable object per player with revisions, so two devices never silently overwrite each other.

Cloud save
Phone
PUT/v1/cloud/progress
{ "revision": 12, "data": { "level": 9 } }
200"revision": 13
Tablet
PUT/v1/cloud/progress
{ "revision": 12, "data": { "level": 8 } }
409revision_mismatch · current_revision 13

Debug with real requests

Daily volume and errors, plus every request with its status, latency and request ID.

Logs
Request volume
7 days
RequestStatusLatency
POST/v1/leaderboards/coins/scores20034 ms
GET/v1/config30412 ms
PUT/v1/cloud/progress40921 ms
POST/v1/rewards/claim20019 ms
POST/v1/auth/refresh20018 ms

From zero to your first request

  1. Create a project

    Sign up, create a project and keep the Project ID and Client Key at hand. Starter content is added for you.

  2. Import the Unity SDK

    Import the .unitypackage, open Tools ▸ Majacloud ▸ Setup, paste your keys and test the connection.

  3. Press Play

    The Starter scene signs in, posts scores, saves progress, claims a reward and reads config — then copy what you need.

Not on Unity? The same backend works with Godot, the Web SDK.

1,240Space Runner
CoinsResets weekly
1Nova12,480
2Kaito12,290
3Luna12,010
4Raka11,840
5Mira11,620
Daily rewardClaim +50

Secure by default

The things that usually go wrong in a game backend are handled for you.

  • Secret keys are stored hashed and shown once; the public client key can only act for signed-in players.
  • Short-lived access tokens with rotating refresh tokens and reuse detection.
  • Remote config is signed with RSA-SHA256 and verified on the device before it is used.
  • Scores, rewards and wallets are validated on the server, never trusted from the client.
  • Rate limits, daily quotas and per-request logs with request IDs for every project.
GET/v1/config200
{
  "ok": true,
  "version": 14,
  "configs": [
    { "key": "enemy_damage", "type": "number", "value": "30" },
    { "key": "double_xp_weekend", "type": "boolean", "value": "true" }
  ],
  "checksum": "9c41f0…e27b",
  "signature": "Kq3vR8yJ…Wm0=",
  "signature_algorithm": "rsa-sha256",
  "signing_key_id": "config-v1"
}

Simple monthly pricing

Pay in Rupiah with QRIS, e-wallets, bank transfer or cards via Midtrans. No automatic charges — renew when you want.

Free

Everything you need to ship a small game.

$0 / month

 

  • 4,000 API requests / day
  • 1,000 player accounts
  • 1 projects
  • 1 leaderboards per project
  • 3 remote config keys
  • 32 MB cloud save storage
Start free

Starter

Room to grow for games with a real community.

≈ $1.76 / month

Billed as Rp29.000 in Rupiah

  • 10,000 API requests / day
  • 10,000 player accounts
  • 3 projects
  • 3 leaderboards per project
  • 10 remote config keys
  • 256 MB cloud save storage
Choose Starter

Max

Maximum capacity for large, busy games.

≈ $18.12 / month

Billed as Rp299.000 in Rupiah

  • Unlimited API requests / day
  • Unlimited player accounts
  • 25 projects
  • 30 leaderboards per project
  • 1000 remote config keys
  • 10 GB cloud save storage
Choose Max

Limits apply per account. When you reach one, the API answers with a clear plan_limit error — nothing is deleted. Prices in USD are approximate. You are charged in Indonesian Rupiah (IDR) through Midtrans; your bank or wallet sets the final exchange rate.

Questions

Which Unity versions are supported?

Unity 2021.3 LTS and newer, including Unity 6. The SDK has no third-party dependencies and works with the built-in, URP and HDRP pipelines.

Does it work on WebGL and mobile?

Yes. The SDK never uses threads, so async calls work on WebGL, Android and iOS. Every async method also has a coroutine version.

Can I use it with Godot or on a website?

Yes. Unity is the main SDK, and there is a Godot 4 addon and a dependency-free JavaScript SDK for HTML5 games, websites and Node.js servers. All of them talk to the same REST API, so you can also call it from any other engine.

What happens when a player is offline?

Remote config keeps working from a verified local cache, the guest session is restored on the next launch, and every call returns a result with an error code instead of throwing.

What happens when I reach a plan limit?

New items are refused with a plan_limit error that your game can show. Existing players and data stay untouched, and upgrading lifts the limit immediately.

How do payments work?

Choose a plan and pay one month through Midtrans. Paying again for the same plan adds another month. We email a reminder before the period ends.

Can I inspect or delete player data?

Yes. The dashboard shows every player with their scores, saves and wallet, and lets you delete any of them. Deleting a project removes all of its data.

Add online features to your game today

Free to start. Your first request can be minutes away.