M2H Join Discord

For other studios

The backend behind my games, in your own cloud

Every game I've shipped since 2016 talks to the same backend. I call it the GDT. It runs in your Google Cloud project, on your bill, with your players' data in your account. I set it up with you.

Ask for a demo Read how it was built

The Crash Drive 3 dashboard: new players per day, the last 300 players by platform and build, and active players per hour
The Crash Drive 3 dashboard, four years after launch.

Nobody switches it off for you

Every studio I talk to has the same story. You build your game around a hosted service, and two years later it's closed, repriced, or rebuilt around a new SDK. That happens while you're busy with the next game, and the old one still has players.

The GDT runs in your own project. The data is in your account, you have the source, and no feature disappears unless you remove it. The URLs and the JSON haven't changed since 2016: a Switch build of Crash Drive 3 from 2021 that will never get another update talks to the C# server exactly the way it talked to the PHP one.

If I host it for you, it runs on the same setup as my own games, and I keep that running for them anyway. You can still move it into your own project whenever you want. It's the same software either way.

What studios had to move off

  • Parse. Facebook’s app backend. Closed in January 2017, a year after the announcement. Source
  • Fabric. Twitter’s crash reporting, bought by Google. Closed in March 2020; every game needed the new Firebase SDK. Source
  • Unity Remote Settings. Ended in May 2021 and replaced by Remote Config, a different package. I nearly switched to it when it came out. Source
  • GameSparks. Amazon’s game backend. Closed in September 2022. Killer Queen Black went offline for good because moving would have meant rewriting most of the game. Source
  • Unity Analytics (legacy). Stopped collecting data in February 2024. Projects needed a new SDK, and data that wasn’t migrated in time was gone. Source

The facts

In use
Since 2016, on every game I made and on the WW1 games of BlackMill Games
Platforms
Eleven so far, from Steam and the Epic Games Store to PlayStation, Switch, iOS, Android and WebGL
Server
C# on Cloud Run with Firestore, in a Google Cloud project of your choice, in the EU if you want
Client
A Unity package that shares its request code with the server
Our own bill
10 to 50 euros a month, for all our games together

What's in it

Crash and error reports

Reports with the same exception and stack are one group. Set the build that fixes it, and a report from a newer build marks the group as regressed. An alert fires when errors per active player go up.

Bug groups: exceptions with report counts, builds, platforms, last seen and a status per group

Player analytics

New and active players, retention, session length and funnels, per platform and build. A wizard writes the Unity call for the question you have, so nobody has to remember the event format.

Analytics: saved views, a picker for the event, and a line per map

Remote config and live events

Typed settings per platform, build and language, with a history of who changed what. Feature flags for a percentage of players, and events on a calendar.

Remote config for Crash Drive 3: ad timing, the alpha switch, and a cash boost event with its dates

One profile per player

Steam, Epic, Windows Store and PlayStation sign-ins checked on the server and tied to one player across all your games, with a timeline, Steam checks and bans per game or everywhere.

A player profile: platform IDs, the games this player exists in, and a timeline of activity

What each game costs

Calls, storage and an estimate in euros per day, per game. Daily limits stop a broken client from running up the bill, and one click sets a Discord alert for when the calls double.

The cost page of a game: calls in the last 24 hours, euros per day, storage per month, and a table per day

Heatmaps

Where players crash, die or quit, per map. Positions are summed per cell on the client and per day on the server, so the bill stays flat.

A heatmap of the test game: a track, and a hairpin where the crashes pile up

Link tracker

Short links that count clicks, and because the game reports back, how many of those clicks became players.

Short links with clicks, conversions and a conversion rate per link

Builds

One button starts a build on your build PC, the result lands on a Steam branch, another button makes it public. Every step is timed, so you see what made a build slow.

The build page: Steam branches with build IDs and depot sizes, and the build log with timings per step

Discord

Every Steam review lands in a channel with the reviewer’s playtime. Sales milestones, crash spikes and new builds go there too.

Steam reviews as they arrive in Discord, one message per review with playtime

You decide what’s kept

Per game, pick which uploads are stored and how long each kind stays. Cloud saves can be put back, and a privacy request is an export or a delete.

Data collection settings: which uploads to keep, and after how many days each kind is deleted

Cross-platform friends

One friends list for players on Steam, consoles and mobile. Photon webhooks tell the backend who is online and in which room, and players invite each other across platforms. It’s built so that every online player can poll it all day for almost nothing.

Closed tests with an NDA

A player signs in with Steam, links Discord and joins your server. The backend checks they own your earlier game and played it long enough, and that they’re 18 or older. They sign the NDA on Dropbox Sign, the server finds the signed contract, gives the Discord tester role and hands out a Steam key. Invite-only works too, and every contract is kept.

Everything else in it

Players and multiplayer

  • Sign-in for Photon: Steam, PlayStation, Xbox and Epic tickets are checked before a player gets into a room
  • Bans per game or across all your games, with a message. A banned Steam player also gets a game ban on Steam, lifted with it
  • Player reports, posted to Discord with the name, room and map once a player has had enough of them
  • A message to one player that the game shows once, with optional data for a compensation
  • Cloud saves with a history of earlier versions, put back from the profile
  • Leaderboards per day, week, month or all time, per platform group, with score caps and rate limits. Mobile scores never mix with PC and console
  • A moderator role that only sees players

Live ops

  • Live events with a start, an end, a message of the day and the setting values that hold while they run. Nothing in the game has to change
  • Setting changes scheduled for a moment you pick, and a preview of the settings at that moment
  • Global settings shared by a group of games
  • Online stats: counters that only go up, so a tampered client can’t rewrite them
  • Polls in the game and on the player’s web page
  • Voucher codes in campaigns, with an expiry and a platform

Health

  • A dashboard per game with players, error rates and the errors that are new since yesterday
  • Crash dumps with their logs, and one log per session so an error that fires every frame is one report
  • A launch screen for a second monitor, for people who don’t need the rest of the admin
  • Benchmarks per device and scene, compared across builds
  • A bell with firing alerts, late jobs, changes by other admins and new or regressed bug groups
  • A portfolio view with every game on one screen: players, errors, open bugs, alerts, storage and cost

Builds

  • Rebuild a branch and publish to Steam from the admin, under the publisher’s own Steam account
  • More than one build machine, each with its own history and timings
  • Build warnings and failed builds ping the right person in Discord, only within office hours
  • Commit history with a changelog per Steam branch
  • A Unity editor window that checks the connection and shows what the client knows while you play, and heatmaps drawn in the Scene view

Sales and community

  • Steam keys per platform, and key dispenser links with a QR code for events and giveaways
  • Purchases checked with Apple and Google, reused receipts caught, and an estimated revenue
  • Retention per tracked link, so you compare campaigns by players who stayed
  • Steam reviews and curator reviews in Discord, and sales milestones that scale with the game
  • A player account page under your own name: Steam sign-in, Discord link, the choice to get news mail, polls
  • Players per country

Control and privacy

  • Roles: admin, team member, moderator, build publisher. Every change in the admin is in an audit log
  • A player downloads their own data or asks for deletion, with seven days to cancel and a mail so a stolen account can’t erase itself
  • An admin exports or deletes a player everywhere. E-mail addresses never show in plain text
  • How long each kind of data is kept, per game
  • Webhooks and API tokens for your own systems
  • A rate limit per address, and a private storage bucket
  • A signed API with an OpenAPI description for new games, one small interface for console storage, and consent before analytics on mobile

Two ways to run it

In your own Google Cloud project. You get the server, the Unity package and the docs, and the source to change what you need. I do the setup with you, so someone on your team knows how it fits together without calling me.

Hosted by me. For a studio that doesn't want to look after a cloud project. Your games run next to mine, on the setup I keep running for my own games, and the price covers the cost, so there's no reason for it to go away. You keep the admin.

Either way you get a fixed price, agreed up front. Mail me what you're making and on which platforms, and I'll tell you what it costs.

What it doesn't do

  • Host game servers or matchmaking. Our games use Photon for that and the GDT sits next to it.
  • Engines other than Unity, for now. The server speaks JSON, the package is Unity only.
  • Ad mediation or user acquisition.

See it with example data

There's a demo admin with four example games in it. Mail me and I'll give you a login, or we look at it together on a call.

Mail Mike