Open table / open rules

Make the rules.
Share the table.

Digipology is a browser-native tabletop platform for building games, testing them with friends, and playing from an invitation—without an install.

One continuous campaign

From blank table
to game night.

The creator and player experience is one loop. Ideas become tested rules, published releases, hosted rooms, and invitations that open straight in the browser.

  1. 01 Create
  2. 02 Playtest
  3. 03 Publish
  4. 04 Browse
  5. 05 Host
  6. 06 Invite
  7. 07 Play

Principle 001

“A valid invite should be all a player needs.”

No native install. No renderer download. Just the table, in the browser.

A table built to agree

Fast in your hands.
Exact underneath.

Digipology separates what the game is from how it looks and how players connect. The result is immediate interaction backed by reproducible rules.

K

The referee

Deterministic kernel

The same starting snapshot and ordered actions produce the same state on every healthy client. Seeded randomness, atomic actions, and canonical hashes make disagreement visible.

T

The table

Browser-native presentation

Babylon.js draws responsive pieces and motion, but never owns the rules. The browser can predict a gesture instantly while canonical play stays separate.

R

The room

One shared action order

A Cloudflare room sequences actions and broadcasts them. Clients run the rules; the server coordinates the table instead of becoming a second game engine.

Read the architecture as a field guide

Creator workspace / Lua v1

Build the table.
Script the rules.

The desktop editor puts the table, hierarchy, component inspector, Lua IDE, diagnostics, and an in-tab playtest in one docked workspace. AI can draft a game or propose a reviewed edit when it is configured on the server.

  • Visual entities and component editing
  • Documented, sandboxed Lua API
  • Validated publish handoff
Open the creator guide
Example / opening deal API v1
function on_start(ctx)
  state.turn = 1
  refs.main_deck:shuffle()

  for _, player in
    ipairs(players:list()) do
    if player.hand then
      refs.main_deck:deal(player, 5)
    end
  end
end

Same seed. Same order. Same deal.

Built in public

Small pieces.
Open table.

Digipology's foundations are public, focused packages. Use one piece, inspect the whole system, or help shape the platform in the open.

Specification, decisions, issues, and source live together.

Visit the GitHub repository

The first move

The table is open.
Bring your own rules.

Read the documentation