SGIPv0.1

Simulation Game Interoperability Protocol

Let simulation games share their players.

SGIP lets a player from one simulation game visit another, message friends across games and arrive as themselves. It's HTTPS, JSON and Ed25519, so a game in any language can join.

  • 25 operations
  • 293 shared words
  • 3 endpoints to serve
One envelope, signed, to one endpoint
{
  "sgip": "0.1",
  "id": "01JA2B3C4D5E6F7G8H9J0K1M2N",
  "op": "message.send@1",
  "from": {
    "platform": "lagos.example",
    "player": "tunde@lagos.example"
  },
  "to": {
    "platform": "berlin.example",
    "player": "lena@berlin.example"
  },
  "payload": { "text": "How far? Greetings from Lagos" }
}

How a visit works

Two games that have never met, and a hub that introduces them. Neither game calls the other's API.

  1. 1

    Ask for a passport

    Tunde is at a motor park in a Lagos game and wants to see Berlin. The Lagos game asks the hub for a passport with one signed visit.request@1.

  2. 2

    Open the door

    The Lagos game opens the Berlin game's visit page and hands over the passport by postMessage, or in the URL fragment for a new tab, never in a query string where servers would log it.

  3. 3

    Arrive as yourself

    The Berlin game checks the passport offline with the hub's public key. Tunde steps off at Hauptbahnhof with the same name, colour and badges as at home.

  4. 4

    Bring back souvenirs

    On the way home, Berlin sends visit.end@1. Lagos applies how Tunde's stats moved, capped at ±20, and only what Lagos accepts.

Home gamelagos.example Hubverifies · routes Host gameberlin.example signedsigned passport travels in the player's browser drink dance souvenirs: mood +20 T

Boring to implement, on purpose

Any language

No SDK required. Serve three HTTP endpoints, parse JSON, make an Ed25519 signature. A game written in PHP can host players from one written in TypeScript, Java, Python or Go, without ever seeing its code.

Signed, not shared

Every request carries an Ed25519 signature over the method, path, time, a nonce and the body. No passwords or shared secrets to leak.

One envelope

Every operation travels in the same JSON envelope to one endpoint per side. Idempotent by design: resend with the same id and nothing happens twice.

A shared language

293 words in 12 domains so games understand each other's worlds, with fallbacks for words they've never seen.

Players first

Invite-only unless a player opts in. Passports last at most 15 minutes. Money stays in its home game; visitors spend it within a budget they set.

Additive releases

Every 0.x release only adds operations, optional fields and words. A game built today keeps working tomorrow.

A shared language for life

A Lagos game calls it a danfo; a Berlin game calls it the bus. Both send a word every game understands, and a game that has never heard of a danfo still knows what to do.

danfo→minibus→bus

Browse the vocabulary

Shape the protocol

SGIP is written by the people who make the games. Every change starts as a conversation and ships with working code.