7-Day GDevelop Steam Export and Save Path Freeze Challenge Before Fest Upload - 2026
You exported GDevelop for Windows. Playtesters on Steam load the demo, beat floor one, quit, relaunch—and progress vanishes. The editor preview saved fine. The standalone path wrote to a folder players cannot read, or you used browser storage APIs in a desktop export.
May–October 2026 fest prep pulls HTML5-first teams—Construct, GameMaker, GDevelop 5.x—onto Steam desktop depots. Save-path bugs are hour-one refund fuel. This Challenges & Community Hooks sprint runs seven weekday gates: freeze scenes and storage contracts, prove standalone boot, then allow fest branch promotion.
Non-repetition note: Recent passes covered GameMaker export tutorial and Wednesday smoke Process—this is a GDevelop seven-day challenge, not metadata parity or Construct sheet order (parallel discipline, different engine).
Why this matters now (May 2026)
- GDevelop Steam exports rising — HTML5-first industry pattern includes GDevelop beside itch embeds; Steam is the second storefront.
- Storage API mismatch —
Storageactions behave differently in preview, exported exe, and packaged Steam builds. - Scene order drift — Parallel event edits reorder auto-start logic; fest week is the wrong time to discover wrong first scene.
- Evidence culture — BUILD_RECEIPT plus Wednesday demo smoke need a freeze receipt proving save paths were audited.
- October traffic — Fix saves in May–August, not during refund dashboard spikes.
Direct answer: One gate per weekday; logs under release-evidence/gdevelop/freeze-week/; no fest promotion until Gate 7 and gdevelop_freeze_receipt_v1.json show freeze_pass: true.
Who this is for
- 1–3 person teams on GDevelop 5.x shipping a Windows Steam fest demo
- Devs who tested only in preview or itch HTML5
- Producers promoting branches without a save path map
- Studios comparing GDevelop to Construct freeze week—same evidence tone, different engine surfaces
Time: ~45–65 minutes per weekday (~7 hours total). Weekends: review only.
Before you start — readiness checklist
- [ ]
release-evidence/gdevelop/folder exists - [ ] Frozen
project_versionfor challenge week (e.g.0.4.0-freeze-week) - [ ] First scene for retail demo documented (not debug scene)
- [ ] One Windows export completed once (even if broken)
- [ ] BUILD_RECEIPT template ready
- [ ] No new features during freeze week—bugfix and path fixes only
- [ ] Playtest form includes
build_labelandsave_slotfields
Rules of the challenge
- One owner signs each weekday log.
- Fail stops the day—fix before
gateN_pass. - Artifacts in
release-evidence/gdevelop/freeze-week/YYYY-MM-DD_gateN.log. - Scene structure changes after Day 3 require version bump and restart Day 1.
- Pair with metadata diff on promotion days.
- Friday Block 5 row until ship:
gdevelop_freeze_pass Y/N.
Challenge calendar at a glance
| Day | Gate | Primary artifact | Pass signal |
|---|---|---|---|
| Mon | 1 | scene_inventory_v1.json |
Every scene + external events listed |
| Tue | 2 | bootstrap_order.md |
First scene + autostart events frozen |
| Wed | 3 | save_path_map.json |
Every storage action mapped to OS path |
| Thu | 4 | Standalone export folder audit | G4 layout pass |
| Fri | 5 | Golden path + save round-trip | Load after quit |
| Sat | — | Evidence review | No new gates |
| Sun | — | Read-aloud | Seven logs present |
| Mon+1 | 6 | Installed Steam smoke (or playtest branch) | S4–S6 from smoke article |
| Tue+1 | 7 | gdevelop_freeze_receipt_v1.json |
Promotion allowed |
Beginner path (read this first)
- Monday — List scene names in JSON.
- Tuesday — Confirm title scene is first launch.
- Wednesday — Write where saves go on disk.
- Thursday — Export and open folder; find exe.
- Friday — Save, quit, relaunch; progress remains.
- Next Monday — Install from Steam (or playtest); repeat.
- Next Tuesday — File receipt JSON.
How this differs from one-evening tutorials
GameMaker export sanity is a single night of gates. Construct sheet freeze is seven days on determinism. This challenge is seven days on GDevelop storage and bootstrap—because save bugs appear on day three of playtesting, not minute three of export.
External events and extensions (plan before Gate 1)
GDevelop projects often hide logic in external events shared across scenes. Before inventory:
| Surface | Inventory must list |
|---|---|
| Scene events | Per-scene sheets |
| External events | UI_Global, SaveHooks, etc. |
| Extension actions | Storage, Steamworks (if used) |
| Object variables | Persist flags tied to saves |
Pro tip: Export a text list from team wiki if editor search is slow—consistency beats automation brand.
Extension compatibility row
Add to scene_inventory_v1.json:
"extensions": [
{ "name": "Storage", "version": "pinned", "used_for": ["demo_progress"] },
{ "name": "Steamworks", "version": "optional", "used_for": [] }
]
Remove unused extensions before Gate 4—smaller export, fewer DLL surprises.
Gate 1 (Monday) — Scene inventory
Export scene_inventory_v1.json:
{
"schema": "scene_inventory_v1",
"project_version": "0.4.0-freeze-week",
"scenes": [
{ "name": "Title", "purpose": "retail_entry", "includes_external_events": ["UI_Global"] },
{ "name": "DemoRun", "purpose": "fest_slice", "includes_external_events": ["Combat", "SaveHooks"] }
],
"excluded_from_build": ["DebugOverlay", "LevelEditor"]
}
Pass: No scene without purpose; debug scenes marked excluded.
Common Monday failures
| Failure | Fix |
|---|---|
Mystery Scene names |
Rename before export |
| Debug scene first in list | Reorder bootstrap (Gate 2) |
| Missing external events | Attach to inventory |
Gate 2 (Tuesday) — Bootstrap order freeze
Document in bootstrap_order.md:
# Bootstrap order — frozen 2026-05-26
1. Scene: Title (first launch)
2. External events load order: UI_Global → SaveHooks → Audio
3. Autostart groups: only Title_Menu and Save_Init
4. Forbidden: experimental groups autostart ON
Screenshot Project Manager scene list with date stamp.
Pass: Save_Init runs before gameplay scene accepts input.
Cross-read GameMaker room order—same class of bug, different editor.
Gate 3 (Wednesday) — Save path map
Create save_path_map.json:
{
"schema": "save_path_map_v1",
"slots": [
{
"slot_id": "demo_progress",
"action": "Storage write variable",
"key": "demo_save_v1",
"expected_root": "%APPDATA%/<Company>/<Game>/",
"forbidden": ["preview-only path", "browser localStorage on desktop"]
}
],
"faq_alignment": "single-player demo; progress local only"
}
Pass: Every Storage read/write in project appears in map; paths verified on standalone exe with File Explorer.
Storage discipline table
| Pattern | Desktop export | Browser itch |
|---|---|---|
Storage extension |
Preferred for Steam | OK if documented |
localStorage shim |
Risk — audit | OK |
| Write to game directory | OK if writable | N/A |
Absolute C:\ paths |
Fail | Fail |
Align FAQ save claims with map.
Wednesday test script
- Delete save folder manually.
- Launch standalone; progress to checkpoint.
- Note folder path created.
- Quit; relaunch; confirm load.
- Log path in
gate3_pass.log.
Gate 4 (Thursday) — Export folder audit
Mirror GameMaker G2 gates:
| Check | Pass |
|---|---|
| exe launches without editor | Yes |
data / .pck / GDevelop payload present |
Yes |
build_label on title |
Yes |
| No missing DLL dialog | Yes |
Log export log from GDevelop build panel—attach to gate file.
Outbound: GDevelop export documentation (verify UI labels for your 5.x build).
Gate 3 deep dive — variable keys and semver
Treat save data like Construct save migration semver:
| Field | Purpose |
|---|---|
save_format_version |
Bump when layout changes |
ruleset_id |
Tie to demo scope |
build_label |
Correlate support tickets |
Example stored JSON (conceptual):
{
"save_format_version": 1,
"ruleset_id": "fest_demo_2026_10",
"floor": 2,
"build_label_seen": "gd-nextfest-2026-05-26-rc1"
}
On load, if save_format_version mismatch, wipe slot with logged message—not silent corruption.
Wednesday edge cases
| Edge case | Gate 3 action |
|---|---|
| Player deletes AppData | Game shows fresh demo—OK if FAQ says local only |
| Two Steam accounts one PC | Separate OS users → separate paths—note in playtest doc |
| Antivirus blocks write | Fail Gate 3 until path whitelisted |
| Unicode username in path | Test on second Windows account |
Gate 4 deep dive — Windows export options
Record in gate4_export_options.md:
| Option | Fest demo note |
|---|---|
| Architecture | 64-bit default |
| Package mode | Zipped vs folder—match SteamPipe habit |
| Icons / metadata | Version matches build_label |
| Debugger | Off for retail |
Compare export size week-over-week—2× growth without assets suggests wrong inclusion.
Included resources audit
| Resource | Included? |
|---|---|
| Dev fonts | Only shipped fonts |
| Placeholder audio | Remove |
| Unused scenes | Excluded in Gate 1 |
Gate 5 (Friday) — Golden path + save round-trip
Define five-step golden path (same discipline as Wednesday smoke):
- Title → Start Demo
- Reach first checkpoint flag
- Trigger save (autosave or interact)
- Quit to desktop
- Relaunch → checkpoint still loaded
Pass: Round-trip succeeds twice on same build_label.
Friday failure modes
| Symptom | Likely cause |
|---|---|
| Save on quit only, load fails | Wrong key name read |
| Works once | Two save systems fighting |
| Preview OK, exe fail | Path map wrong |
Gate 6 (Monday+1) — Installed Steam smoke
Upload to playtest branch if available; run S4–S6 from demo smoke article on installed build—not Thursday folder only.
Log steam_install_save_roundtrip: pass in gate file.
Gate 7 (Tuesday+1) — Freeze receipt
{
"schema": "gdevelop_freeze_receipt_v1",
"project_version": "0.4.0-freeze-week",
"freeze_week": "2026-W22",
"gates": {
"gate1_scene_inventory": "pass",
"gate2_bootstrap": "pass",
"gate3_save_path_map": "pass",
"gate4_export_folder": "pass",
"gate5_save_roundtrip": "pass",
"gate6_steam_smoke": "pass",
"gate7_read_aloud": "pass"
},
"freeze_pass": true,
"build_label": "gd-nextfest-2026-05-26-rc1",
"paired_build_receipt": "release-evidence/05-operations/receipts/gd-nextfest-2026-05-26-rc1.json",
"notes": "GDevelop 5.4; Win11; Storage extension only"
}
Archive beside BUILD_RECEIPT.
Weekend read-aloud (Sunday)
Producer reads aloud:
- First scene name matches store promise.
- Save path in plain language (“AppData folder X”).
- FAQ does not claim cloud if map says local.
- All seven gate logs exist.
freeze_passtrue in receipt.
Ten minutes prevents hour-long Discord arguments.
Promotion gate integration
[ ] gdevelop_freeze_receipt_v1.json freeze_pass == true
[ ] build_label matches BUILD_RECEIPT
[ ] Wednesday metadata diff GREEN
[ ] Wednesday demo smoke S4–S6 GREEN
[ ] No gate restart mid-week without version bump logged
Worked example (composite duo, one week)
Context: Two-person team; itch HTML5 demo live; first Steam Windows fest build.
| Day | Finding | Action |
|---|---|---|
| Mon | DebugOverlay not excluded |
Marked excluded in inventory |
| Tue | Save_Init after gameplay start |
Reordered external events |
| Wed | Saves used browser storage action | Replaced with Storage extension |
| Thu | Export missing VC runtime note | Documented in BUILD_RECEIPT notes |
| Fri | Round-trip pass | Gate 5 green |
| Mon+1 | Steam install failed load | Wrong key string—hotfix, restart Gate 5–6 |
| Tue+1 | Receipt filed | Promotion allowed |
Lesson: Gate 3 would have caught storage API if run before first Steam upload attempt.
Calendar integration (May–October 2026)
| Month | Challenge intensity |
|---|---|
| May–June | Full seven gates; establish save map |
| July | Re-run Gate 3 after any save feature touch |
| August | Gate 6 on every branch promotion |
| September | Freeze save_format_version |
| October fest | Mini Gate 5 on promotion days only |
Distributed team handoff
When Asia-EU handoff uploads overnight:
- EU morning verifies
save_path_map.jsonunchanged - Asia logs export options in BUILD_RECEIPT
- Never promote without Gate 6 row on installed build
CI hook (optional)
test -f release-evidence/gdevelop/gdevelop_freeze_receipt_v1.json || exit 2
jq -e '.freeze_pass == true' release-evidence/gdevelop/gdevelop_freeze_receipt_v1.json || exit 3
Align with validate-packet.
Incident response when saves fail during fest
| Hour | Action |
|---|---|
| 0 | Pause ads (fest cap) |
| 1 | Communicate wipe policy if unavoidable |
| 2 | Hotfix + new build_label |
| 3 | Re-run Gates 3–6 |
| 4 | Update demo patch notes |
Operating review hook
Four-Friday operating reviews Block 2:
- Freeze weeks completed vs promoted builds
- Top Gate 3 failure (path vs API)
- Save-related refund tag count (qualitative)
Month-one adoption ladder
| Week | Goal |
|---|---|
| 1 | Complete first freeze week |
| 2 | Attach receipt to BUILD_RECEIPT habit |
| 3 | Pair with Wednesday smoke on promotion |
| 4 | Archive maps in release-evidence taxonomy |
Cross-engine comparison (freeze week family)
| Engine | Freeze article | Primary risk |
|---|---|---|
| Construct | Sheet order challenge | Event group order |
| GameMaker | Export sanity | Texture pages |
| GDevelop | This challenge | Storage paths |
| Godot | Floor coordinator | Loader epochs |
Use one receipt folder taxonomy—do not fork per brand.
HTML5 itch + Steam dual SKU
If dual-SKU economics applies:
| SKU | Save map |
|---|---|
| itch HTML5 | Browser storage row |
| Steam Windows | AppData row |
Never assume cross-SKU save sync unless shipped.
Playtest and async tools
After Gate 7, scale feedback with 18 playtest tools—require save_slot and build_label on every form row.
Partner packet crosswalk
Attach to partner ZIP:
save_path_map.jsongdevelop_freeze_receipt_v1.json- Friday save round-trip screen recording (optional, <90s)
Common mistakes (seven)
- Preview-only save testing — Gate 5 requires standalone exe.
- Skipping Gate 6 — Steam install path differs.
- localStorage on desktop export — Gate 3 fail until replaced.
- Debug scene first — Gate 2 fail.
- Feature work during freeze week — Restart week.
- No FAQ alignment — Store lies about saves.
- Promotion before receipt — Producers cannot verify path.
Pro tips (six)
- Delete save folder before each gate test—clean state.
- Screenshot AppData path in gate logs.
- Same
build_labelon title, receipt, BUILD_RECEIPT. - Pair with validate-packet when scripting.
- Index logs by ISO week —
2026-W22. - Run fest marketing cap stop on Gate 5 fail.
Snippet-friendly answers
How do I export GDevelop to Steam?
Freeze scenes and save paths with seven gates, export Windows, upload via SteamPipe, smoke installed build, then promote branch.
Why does GDevelop save work in editor but not Steam?
Usually wrong storage API for desktop or non-writable path—Gate 3 catches it.
Is this the same as Construct freeze week?
Same evidence culture; different engine checklist.
Key takeaways
- Seven weekday gates end with
gdevelop_freeze_receipt_v1.json. - Gate 3 save path map is the GDevelop-specific heart of this challenge.
- Standalone exe required before Steam install smoke.
- Scene inventory + bootstrap freeze prevent wrong first scene.
- Pair with BUILD_RECEIPT, metadata diff, and Wednesday demo smoke.
- No fest promotion until
freeze_pass: true. - Dual itch/Steam SKUs need two save map rows.
- Debug scenes must be excluded before export.
- Read-aloud Sunday closes the week.
- GDevelop fills the freeze-week family beside Construct and GameMaker.
- External events and extensions must appear in Monday inventory.
save_format_versionsemver reduces corrupt-load support burden.- Gate 6 on installed Steam build is non-optional for desktop fest demos.
- Restart freeze week if scene graph changes after Wednesday.
- Fest marketing spend should pause when Gate 5 fails mid-week.
Roles on a three-person team
| Person | Daily duty |
|---|---|
| Designer | Gate 1–2 scene truth; FAQ save wording |
| Programmer | Gate 3–4 path and export |
| Producer | Sign logs; block promotion without receipt |
Solo dev: still produce seven logs—partners ask for paper trail, not heroics.
Steamworks and Steam API (optional extension week)
If you enable Steamworks extension during freeze week, add Gate 3b:
| Check | Pass |
|---|---|
| Achievements do not write before demo scope | Yes |
| Cloud API disabled unless FAQ promises cloud | Yes |
| Overlay does not block save on first run | Yes |
Cross-read cloud saves parity before enabling Steam Cloud on a fest demo.
Audio and asset paths (Thursday add-on)
Silent failures also come from missing sound files on export:
- [ ] Every music file in events exists on disk
- [ ] Case-sensitive path check on CI Linux if applicable
- [ ] Ogg/mp3 included in export manifest
Log asset_manifest_sha256 in Gate 4 file—optional but helps cold-hash weeks.
Metrics without fake benchmarks
Track internally:
| Metric | Use |
|---|---|
| Gate 3 fail rate | Storage discipline health |
| Promotion delays | Cost of save bugs |
| Re-freeze weeks | Feature creep indicator |
Do not publish as marketing claims.
Vertical slice and demo scope
Vertical slice honesty applies: if demo is one floor, save map must not serialize full-game meta progress.
Truth audit pairing
Run 7-day truth audit the week after freeze week—store copy about saves must match save_path_map.json.
Q3 diligence attachment
Q3 diligence reviewers ask “what happens to player progress?”—freeze receipt plus map answers without invented retention stats.
Community hook (optional)
Share progress with hashtag discipline only if your studio already posts devlogs—challenge does not require public posting. Internal read-aloud is the minimum bar.
FAQ
We only ship itch HTML5 this fest—skip?
Run Gates 1–3 and 5 on browser export; Gate 6 when Steam exists.
GDevelop 5.3 vs 5.4?
Re-run Gate 4 after any editor upgrade.
Does this replace GameMaker export tutorial?
No—parallel engine; teams on both run both.
Can we use cloud saves?
Only if implemented and FAQ-accurate—map must show cloud API, not fake local path.
Conclusion
GDevelop makes rapid iteration easy—and save path surprises easy too.
Freeze the week. Map the paths. Prove round-trip on Steam. Promote only after Gate 7.
If your team already journals evidence cycles, treat freeze week as the light engineering week before a heavy art pass—save discipline is cheaper than explaining lost runs to strangers.
Next reads: BUILD_RECEIPT pipeline, Wednesday demo smoke, HTML5 second storefront analysis.