TableFlux Plugin Authoring Playbook
This playbook is for handing work to a developer or AI with enough detail to build a plugin package without additional direction.
#Source of Truth
- Behavioral and API references are generated from source tags into:
plugin-interface-reference.generated.mdplugin-interface-reference.generated.json
- Regenerate references with:
tools\generate-plugin-interface-docs.ps1
- Publish docs to website and SDK mirrors with:
tools\sync-tableflux-docs-to-website.bat
#Plugin Family Selection
Pick the plugin family first because folder structure, manifest file names, and registry calls are family-specific.
Current plugin families live under:
scripts/gdscript/Plugins/Minigames/scripts/gdscript/Plugins/Rules/scripts/gdscript/Plugins/CharacterGeneration/scripts/gdscript/Plugins/ScriptedEntities/scripts/gdscript/Plugins/TextGeneration/
#Package Discovery System
Package-backed plugins are discovered through subsystem registries and PackageConfigRegistry.
Core discovery references:
scripts/gdscript/PackageConfigRegistry.gdscripts/gdscript/Plugins/Rules/Shared/RulesPackageRegistry.gdscripts/gdscript/Plugins/Minigames/Shared/MinigameRegistry.gd
Subsystem package manifest filenames are defined in PackageConfigRegistry.SUBSYSTEM_CONFIG_FILENAMES.
#Minigame Plugin Implementation Plan
#1. Create folder layout
Use plugin ownership layout:
scripts/gdscript/Plugins/Minigames/<YourGame>/scenes/ui/plugins/minigames/<your-game>/(if dedicated scenes are needed)test/scripts/gdscript/Plugins/Minigames/<YourGame>/
#2. Implement minigame contract
Your main script should implement all required IMinigame methods.
Required interface file:
scripts/gdscript/IMinigame.gd
Optional action interface when reliable discrete actions are needed:
scripts/gdscript/IMinigameActionReceiver.gd
Canvas integration interface:
scripts/gdscript/IMinigameCanvas.gd
#3. Wire manager callbacks and invocation APIs
MinigameManager injects manager/canvas/session hooks and drives player/session lifecycle.
Primary manager APIs plugins typically invoke:
send_paddle_input(normalized_x)send_minigame_action(action_id, action_value)broadcast_state_sync(session_id, state)report_minigame_scores(score_rows, title)report_minigame_outcome(session_id, outcome)
Implementation source:
scripts/gdscript/MinigameManager.gd
#4. Register minigame definition
Minigames are registered by MinigameRegistry using built-in definitions and discovered package manifests.
Registry source:
scripts/gdscript/Plugins/Minigames/Shared/MinigameRegistry.gd
#5. Add packaged manifest (if shipping as package)
Create minigame_package.json with at least:
game_id(orpackage_idfallback)display_name(orpackage_namefallback)script_path
Recommended fields:
descriptioncategorycapabilitiespackage_root_namepackage_tree_pathsource_kind
Reference example:
test/scripts/gdscript/Plugins/Minigames/Racing/minigame_package.json
#6. Validate networking behavior
Required networking model:
- Host/server authoritative game state.
- Reliable discrete actions, lightweight movement updates.
- Regular authoritative state sync + immediate sync for major state changes.
- Late-join snapshot support.
#Rules Package Implementation Plan
Rules plugins are package-driven scene and behavior overrides resolved through RulesPackageRegistry.
Primary references:
scripts/gdscript/Plugins/Rules/Shared/RulesPackageRegistry.gdscripts/gdscript/PackageConfigRegistry.gd
Key rule package extension points:
character_creation_scene_pathconflict_resolution_scene_pathruleset_kindprovided_featuresfallback map
Feature resolution entry point:
resolve_package_screen_feature(package_id, feature_id)
#Deterministic Code Reference Workflow
- Add or update
[Plugin:*]tags near interface points and extension hooks. - Run
tools\generate-plugin-interface-docs.ps1. - Review generated markdown/json outputs.
- Run
tools\sync-tableflux-docs-to-website.batto publish docs and manifest. - Run docs validation/build in website repo.
The generator now enforces strict linting:
- Missing required tag fields fail generation.
- Duplicate
idvalues fail generation. - Invalid
requiredvalues fail generation.
The generated markdown includes New Plugin Checklists grouped by subsystem from required=true tags.
Use plugin-scaffold-templates.generated.md for deterministic subsystem templates listing required IDs and optional extension points.
#Tag Format
Tag syntax used by the generator:
## [Plugin:<Type>] id=<stable-id>; owner=<class-or-module>; kind=<method|interface|registry|schema|path|manifest>; required=<true|false>; subsystem=<name>; phase=<lifecycle-phase>; summary=<text>
Recommended tag types:
ContractEntryPointInvokeManifestFolder
#Handoff Checklist
- Plugin files are in correct plugin-owned folders.
- Required interface methods are implemented.
- Package manifest and script paths resolve at runtime.
- Session/network sync behavior is host authoritative.
- Regression tests exist for lifecycle, sync, and outcomes.
[Plugin:*]tags added for all new extension points.- Generated reference docs regenerated and synced.
