THE STUDIO WORKBENCH

Less friction.
More making.

Tools that grew out of the games. Install the addons, check the scripts, and get back to the part you came to build.

03 / ORIGINAL GAME ART

One drawing.
More than one screen.

Spritesmith authors vector artwork in Python and exports it for the games. Its SVG export brings the same shapes to the web, at any size.

The Castle Drop dragon and Prizm crystal here are original frames from their game art.

Castle Drop's red dragonPrizm's purple crystal

GODOT 4 / MIT

Fourteen pieces
for your own game.

Small addons, each with one job. Explore the source or find them on the GDAM registry.

Open the registry ↗
01

gd-audio

Music and pooled sound effects

What it does

One GdAudio autoload: configure a looping music stream with fades and a persisted volume, register named samples, then play_sfx("click"). Effects play out of a player pool you size. Volume is written to a config file you name, so the settings UI stays in the game.

Source ↗
02

gd-env

Environment and config loading

What it does

Typed OS environment lookups with defaults, .env parsing, and JSON config from a file or an HTTP endpoint. It deliberately does not decide which source wins when several are present. Client-side config is public either way, so nothing here is a place for secrets.

Source ↗
03

gd-gesture

Pointer normalization and gestures

What it does

Mouse and touch collapse into one typed pointer stream, and a recognizer turns that into tap, double tap, long press, swipe, drag and pinch. Use the global autoload for one shared stream, or the two modules directly when a split-screen or editor scene needs its own thresholds.

Source ↗
04

gd-network

HTTP, WebSocket and retry primitives

What it does

A callback JSON HTTP client that uses HTTPRequest natively and a JavaScriptBridge fetch bridge on web, plus a request pool, token-bucket rate limiting, deterministic retry backoff, ordered delta windows and a shared error catalog. Auth, sessions, matchmaking and reconnect policy are left to the game.

Source ↗
05

gd-object-pool

Object and node reuse

What it does

Acquire and return instances of any class instead of allocating per bullet, card or effect, with warm_pool to pre-allocate before gameplay and counters for created, reused, returned and disposed. Objects come back clean through a reset method or a callable you supply.

Source ↗
06

gd-observe

Local observability with a terminal dashboard

What it does

Timers, gauges and counters alongside logs, events and per-frame traces, all tagged with a context you push and pop. A localhost WebSocket server streams them live to a terminal UI. Metrics are in-memory and local — the point is to see the data before deciding whether any of it should leave the machine.

Ships gdobs, a Go terminal UI
Source ↗
07

gd-playwright

Named handles for web-export browser tests

What it does

The addon writes element positions, events and test state to browser globals during a web run; the CLI reads them over CDP so a test can click start_button instead of a coordinate. The CLI is strictly read-only — it never mutates browser or game state. Disabled builds no-op, so the calls are safe to leave in.

Ships gdpw, a Go CLI
Source ↗
08

gd-pocketbase

PocketBase auth and session primitives

What it does

Normalizes either a native {token, record} response or a backend proxy's {access_token, user} into one shape, then handles JWT expiry, persisted sessions and stable client IDs. Games keep HTTP transport and refresh policy; no superuser credential ever needs to reach the client.

Source ↗
09

gd-redis

A Redis client over RESP

What it does

SET with a TTL, GET, DEL, cursor-based scan_keys rather than KEYS, and both blocking and non-blocking connects — for tools, dedicated servers and local utilities. flushdb stays disabled until dangerous commands are explicitly enabled, and web exports cannot open raw TCP at all.

Source ↗
10

gd-responsive

Layout that adapts to the viewport

What it does

Breakpoint classification, scale, margins and content width computed from a .tres config, plus layout, flex and grid nodes that run as @tool scripts so the result is visible while authoring rather than only at runtime. Take just the scale module if you already have containers of your own.

Source ↗
11

gd-router

Editor-first screen routing

What it does

A GdRouter autoload owns the route table, params and history while a RouteHost node mounts the active screen under a persistent main scene. Routes auto-discover from *_screen/ folders while prototyping, or come from a committed route map so they are inspectable and reviewable in the editor.

Source ↗
12

gd-serialization

Objects to dictionaries and back

What it does

Boundary conversion for saves, HTTP and WebSocket payloads and safe clones, with configurable class resolution, ignored properties and key normalization. It serializes script variables, not scene-tree state; cyclic graphs are unsupported, and reflection costs enough that it does not belong in a hot loop.

Source ↗
13

gd-supabase

Supabase session helpers

What it does

JWT decoding and expiry checks, local session storage, and a stable client ID, without picking an auth UI or an HTTP client for you. It decodes tokens rather than verifying them, so refresh, revoke, encryption and server trust all stay deliberately on your side.

Source ↗
14

gd-telemetry

Event batching with no vendor attached

What it does

Build structured events — timestamp, level, context and subject IDs, message, metadata — queue them, and flush on a size or time threshold into whatever transport you already have. It picks no analytics vendor and opens no sockets, which is the entire design.

Source ↗

See what they make possible.

Explore the games ↗