DocsShip

Handoff and export

Press Ctrl E to export. Export checks the document first and tells you what’s wrong before you send anything.

Export What you get
Godot package A zip with the envy_ui addon, your document and a demo scene. Open it in Godot and press F6
Playable HTML One HTML file with the runtime and your document. Anyone can click through it in a browser
AI handoff Everything a programmer or a coding agent needs to wire the UI into a game (below)
Document The .envy.json file itself
PNG A layer or a screen as an image

The AI handoff package

<name>_handoff.zip contains:

File Purpose
AGENTS.md, CLAUDE.md Instructions for coding agents: rules, files, integration steps for Godot and the web, the full event and data contract, and an acceptance checklist
PROMPT.md Ready-to-paste prompts for Godot and for the web
SCREENS.md, screens/ A layer outline of every screen (text, bindings, actions, notes) and reference renders, also one folder per scenario
contract.json Events (with the layers that emit them), data paths (type, sample, where they’re used), screens, animations and scenarios
godot/<name>_ui.gd, godot/addons/envy_ui/ A generated controller with typed setters and an event match, and the runtime
web/<name>-ui.ts, web/envy-runtime.js A typed wrapper (unions of events, screens and paths) and the runtime
schema/envy.schema.json, tools/envy.mjs So agents can edit the document safely and validate it

The rule the package teaches: load the document with the runtime and never rebuild screens by hand. Game code only connects data and events.

What the generated code looks like

For The Last Hunt, the controller has a setter per data path and a case per event:

## boss.hp — shown in 09 HUD · Boss fight › Boss › bar › Boss health
func set_boss_hp(value: float) -> void:
	ui.set_data("boss.hp", value)

func _on_ui_event(event: String, payload: String) -> void:
	ui_action.emit(event, payload)
	match event:
		"new_hunt":
			# From: 02 Main menu › Main menu › Items › New hunt
			pass  # TODO

The TypeScript wrapper turns the same contract into types, so a typo in an event name is a compile error.

Without the editor

The CLI writes the same text files from a document: node tools/envy.mjs handoff ui.envy.json out/.

Notes for implementers

Any layer can carry notes: what it’s for, how it should behave, edge cases. They’re included in SCREENS.md and AGENTS.md, so intent travels with the design.

Updated View as Markdown