How to Use Defold 1.13.1 Lights - First Indie Lit Scene Evening 2026

If you are searching defold light components, you do not need another “Defold is small and free” pitch. You need a Monday path: install 1.13.1-beta, place ambient / directional / point / spot lights in the editor, prove a lit material reads the LightBuffer, then decide keep / hold / rewrite before anyone merges beta into a Steam depot.
On July 13, 2026, the Defold Foundation published the 1.13.1 BETA release notes with a headline 3D step: Light component support in the editor and engine (forum release notes, GitHub v1.13.1-beta). The official Light component manual documents four resource types and the shader LightBuffer layout. The editor work landed through PR #12176.
This evening is not the Defold Steam collection and save audit (packaging). It is not MonoGame 3.8.5 DesktopVK (C# backends). It is not Godot HTML5 blank-screen (web MIME). It is defold light components on a spike branch — lit collection, receipt, honest beta hold.
| If you are… | Start here | Done when |
|---|---|---|
| Beginner | Glossary → four light types → one collection | You can name ambient vs point and why materials matter |
| Working Lua / TA | Gates L1–L6 → LightBuffer / model_lit | Receipt JSON + desktop screenshot + WebGL2 note |
| Studio lead | Keep/hold table + diligence | Written ship-stable vs beta-spike owners |
Time: about 90–120 minutes for a fresh spike project. Longer if you migrate an existing unlit 3D collection and custom shaders.
Why this matters now
Three clocks make Defold lights worth an evening this month:
- Editor lights finally ship as components. The 1.13.1 beta notes call out Light components as a real 3D / editor step — create, manipulate, and preview lights in the Outline, not only by hand-feeding uniforms.
- Docs and engine bind landed together. The Light manual plus built-in
lighting.glsl/model_litpath means Discord will ask “did you try the new lights?” — you need a receipt, not vibes. - It is still beta. The release disclaimer is blunt: use source control; expect disruption. Ship branches stay on your last stable Defold; lighting lives on a spike until you re-run L1–L6 after a stable 1.13.1 (or later) lands.
Also in the same beta (do not confuse with the lights gate): morph-target instancing, SDL gamepad database, Editor Scripts expansion, warm builds up to ~19% faster, borderless fullscreen, Metal backend work, larger archives, HTML5 audio fixes. Nice — but tonight’s primary keyword is defold light components.
Glossary - plain words
| Term | What it means |
|---|---|
| Light component | A Defold component that represents a light source in a collection (like Sprite or Model). |
| Ambient light | Flat fill color; ignores position/rotation; does not consume lights[] slots. |
| Directional light | Sun-style light; direction from game object rotation; infinite distance. |
| Point light | Omnidirectional bulb from the object’s world position with a range. |
| Spot light | Cone light with inner and outer cone angles plus range. |
| LightBuffer | Uniform block shaders declare so the engine can bind active light data automatically. |
| light.max_count | game.project limit on light components (default 64). |
| Editor preview limit | Editor can preview at most 8 lights right now (conservative forward-light default). |
| WebGL1 / ES2 hold | Light components do not work on WebGL1/ES2 contexts — need WebGL2+ for HTML5. |
| Keep / hold / rewrite | Keep = adopt after stable; hold = lab only on beta; rewrite = wrong engine feature for this ship. |
What Defold 1.13.1 light support actually ships (true summary)
From the beta release notes, PR #12176, and the Light manual:
- Four resource types —
.ambient_light,.directional_light,.point_light,.spot_light(separate types on purpose for future custom lights). - Editor create / manipulate / preview — lights appear in the Outline with type-specific gizmos (sun, bulb, cone).
- Automatic LightBuffer bind — if a shader declares the correct
LightBufferlayout, the engine fills it from active light components. - Built-in helpers —
/builtins/materials/lighting.glslandmodel_lit.fpshow Lambert diffuse + ambient usage. - Project limit —
light.max_count(default 64); ambient counts toward the component limit but not towardlights[]entries. - Honest limits — editor preview capped at 8 lights; no automatic lighting on every material (your shader must opt in); WebGL1/ES2 incompatible; beta channel only until stable.
Colors are RGB; alpha is unused. Intensity multiplies color. Point/spot range scales with the smallest absolute world-scale axis. Spot cones are edited in degrees and stored as radians in the compiled resource.
Keep / hold / rewrite - Monday decisions
| Situation | Keep | Hold | Rewrite |
|---|---|---|---|
| Desktop / console prototype with WebGL2 HTML5 later | Spike lights on 1.13.1-beta branch | Merging beta into fest depot tonight | Claiming “ship lighting done” after editor preview alone |
| HTML5 demo still on WebGL1 | — | Lights until WebGL2 export path proven | Expecting lights on ES2 browsers |
| Unlit 2D pixel game | — | Optional mood lights only | Forcing 3D lit pipeline into a pure 2D ship |
| Custom forward renderer with hand uniforms | Port to LightBuffer after spike | Dual systems forever | Deleting working custom lights mid-milestone |
| Partner diligence zip | Receipt + screenshot + WebGL note | “It looked fine in editor” | Shipping beta as production without owners |
Default indie posture: hold on the ship branch; keep the spike workflow and receipt so you can promote fast when stable lands.
Prerequisites
- Git (or zip backups) — beta disclaimer requires source control (forum notes).
- Ability to install a second Defold editor channel (beta) without overwriting your ship install.
- A tiny 3D collection: one Model (or Mesh) with a lit material path, one Camera, floor + prop.
- Optional: existing HTML5 export pipeline if you must answer the WebGL2 question tonight.
- 90–120 minutes uninterrupted.
If you have never shipped a Defold desktop bundle, keep Steam collection save audit for another evening — do not mix depot work with beta lighting.
Beginner path - first lit collection (no jargon first)
Goal: one room that looks lit when you press Play in the beta editor.
- Download 1.13.1-beta from GitHub Releases (editor + bob if you build from CLI).
- Create a new project or clone your game onto a branch named
spike/defold-1131-lights. - Open the main collection. Add a game object
lights_root. - Under it, create four components (or add four light resources from Assets):
- Ambient — soft gray fill, intensity ~0.2–0.4
- Directional — rotate the object so the sun arrow hits your prop
- Point — place near a lamp mesh; set range so the floor catches a pool
- Spot — aim at a poster or door; set inner/outer cones
- Confirm the Model material uses a lit shader that includes LightBuffer (start from builtins /
model_litpattern in the manual). - Press Play. Orbit the camera. Confirm the prop brightens when you raise intensity and darkens when you disable the directional object.
- Screenshot Play mode. Fill the receipt at the end of this article. Do not upload this beta build to Steam.
That is the beginner win. Everything below is the working-dev gate set.
Working-dev gates L1–L6
| Gate | What you prove | Artifact |
|---|---|---|
| L1 | Beta editor installed; ship editor untouched | editor_channel: 1.13.1-beta in receipt |
| L2 | All four light types present in Outline | lights_present: [ambient, directional, point, spot] |
| L3 | Lit material compiles; Play shows light response | play_mode_screenshot.png |
| L4 | light.max_count documented; count ≤ limit |
game.project excerpt + count |
| L5 | HTML5 decision recorded (WebGL2 or N/A desktop-only) | html5_webgl2: pass \| hold \| n/a |
| L6 | Keep/hold decision signed by owners | decision + dual owners |
Fail-closed rule: if L3 fails, stop. Do not “fix it in the depot.”
L1 - Install beta without burning ship
Keep your stable Defold install for the fest branch. Install beta to a separate folder or use the GitHub zip side-by-side. Record SHA from the release tag in the receipt. Open only the spike project in beta.
If Xcode / iOS custom Info.plist matters to you, read the beta note about Xcode 26.5 and builtins templates before you touch mobile — that is a separate gate from lights (forum notes).
L2 - Four light types in one collection
Use distinct game objects so gizmos stay readable:
| Object | Component | Smoke check |
|---|---|---|
light_ambient |
Ambient | Raise intensity → whole scene lifts evenly |
light_sun |
Directional | Rotate → shadow-facing side changes (if your shader shades Lambert) |
light_bulb |
Point | Move object → bright pool follows |
light_spot |
Spot | Tighten outer cone → smaller hotspot |
Validation from the manual: color is three numbers; intensity ≥ 0; range ≥ 0; spot inner ≤ outer; cones 0–180° in the editor.
Stay under the editor preview ceiling of 8 lights while looking. Runtime light.max_count may be higher (default 64), but preview will not prove 40 lights tonight.
L3 - Material must opt in
Defold does not light every material automatically. Your fragment shader must declare LightBuffer with the exact layout from /builtins/materials/lighting.glsl (see manual). Mismatch = silent bind failure and “why is my scene black?”
Minimal mental model:
#define MAX_LIGHT_COUNT 32
uniform LightBuffer
{
vec4 light_info; // xyz ambient, w active non-ambient count
Light lights[MAX_LIGHT_COUNT];
};
Types in lights[i].params.x: 0 directional, 1 point, 2 spot. Ambient is accumulated into light_info.xyz and does not occupy lights[].
Start from builtins (model_lit / lighting.glsl helpers: ambient_light(), Lambert diffuse). Only then fork a custom fp. Pair this evening with Lua scripting for game engines if your team is new to Defold script glue — lighting is shader-side first.
L4 - Count and game.project
Open game.project → Light section → max_count. Document the value. Count light components in the spike collection (including ambient). If you exceed max_count, expect a full component buffer error at runtime — not a soft skip.
Working-dev tip: ambient still consumes component budget even though it does not consume lights[] slots. Teams that spam ambient “fill” objects will hit the wall in surprising ways.
L5 - HTML5 WebGL2 gate (or explicit N/A)
PR and release notes are clear: light components will not work on WebGL1 / ES2. If your demo is HTML5-first:
- Confirm export uses a WebGL2 path on target browsers.
- Build HTML5 from the spike; load on a WebGL2 browser; verify lights.
- If you must support older WebGL1 kiosks, mark hold and keep an unlit material fallback — do not ship black rooms.
Desktop-only Steam demos can set html5_webgl2: n/a with a one-line reason. Still write it down so the next person does not assume HTML5 “just works.”
For Godot teams comparing web export pain, see Godot 4 HTML5 blank-screen checklist — different engine, same “web is not free” lesson.
L6 - Owners and decision
Fill:
decision:keep_spike|hold_until_stable|rewrite_unlitship_owner(stable channel / fest depot)spike_owner(beta lights)promote_after: what must be true (stable tag, L1–L5 green, partner sign-off)
Studio leads: this is the diligence paragraph. Partners care that beta is isolated, not that you pasted a Discord screenshot.
Discord-ready brief (creator share hook)
Paste this after the evening:
Defold 1.13.1-beta finally has editor Light components (ambient / directional / point / spot). We did not merge beta into the Steam branch. Spike branch
spike/defold-1131-lightshas a lit collection + LightBuffer material + receipt. HTML5 stays hold until WebGL2 proof. Ship stays on stable.
Creators: that message is the shareable outcome. Developers: the receipt below is the bookmark.
Evening timeline (90–120 minutes)
| Block | Minutes | Focus |
|---|---|---|
| 0–15 | Install beta side-by-side; branch project | L1 |
| 15–40 | Place four lights; gizmos readable | L2 |
| 40–70 | Lit material / builtins; Play smoke | L3 |
| 70–85 | max_count + count; screenshot | L4 |
| 85–100 | HTML5 note or quick WebGL2 build | L5 |
| 100–120 | Receipt + Discord brief + owners | L6 |
If you run long, cut HTML5 build and mark hold with reason — still file L5.
Common mistakes (and fast fixes)
| Mistake | Symptom | Fix |
|---|---|---|
| Ship-swap beta mid-milestone | Random editor crashes / bob surprises | Revert ship to stable; keep spike branch |
| Unlit material | Lights in Outline, black model | Switch to lit / LightBuffer shader |
| Wrong LightBuffer layout | Compiles but no light response | Copy layout from lighting.glsl exactly |
| WebGL1 HTML5 | Works on desktop, black on web | WebGL2 or unlit fallback; hold lights |
| 20 lights in editor | Preview confusion | Smoke ≤8 in editor; scale later |
| Ambient-only scene | Flat look, “lights broken” | Add directional or point for contrast |
| Mixing Steam save audit tonight | Context switch chaos | Lights tonight; save audit another night |
| Ignoring beta disclaimer | Lost work | Git commit before opening beta |
If packaged Steam saves already misbehave, fix that on stable with the save-root help article — do not debug saves on a lighting beta.
Secondary beta features (park for later)
Do not expand tonight’s receipt to cover everything in 1.13.1-beta. Park these as forward spikes:
- Morph-target instancing for skinned crowds
- SDL gamepad database remaps
- Editor Scripts API growth (dialogs, tabs, fetch, preview PNG endpoint)
- Warm build ~19% on large projects
- Borderless fullscreen default
- Metal graphics backend work
- Larger
arcdarchives (>4 GiB support notes) - HTML5 audio glitch fixes
Each deserves its own evening. Tonight is lights.
Company / diligence paragraph
For a publisher or contractor zip:
- Ship channel remains last known stable Defold with existing export proofs.
- Spike channel is 1.13.1-beta with isolated branch and
defold_1131_lights_receipt_v1.json. - Lighting adoption requires L1–L6 green and a stable release that preserves Light component APIs.
- HTML5 products document WebGL2 requirement or an unlit fallback policy.
- No production player traffic on beta editor builds.
Cost/ROI: one evening now vs a week of black-screen HTML5 and mid-fest editor thrash. Governance: two named owners (ship vs spike).
Receipt template - defold_1131_lights_receipt_v1.json
{
"receipt": "defold_1131_lights_receipt_v1",
"project": "YOUR_GAME",
"collected_at": "2026-07-26",
"editor_channel": "1.13.1-beta",
"release_url": "https://github.com/defold/defold/releases/tag/1.13.1-beta",
"ship_channel": "STABLE_VERSION_YOU_SHIP",
"branch": "spike/defold-1131-lights",
"gates": {
"L1_beta_side_by_side": true,
"L2_four_light_types": true,
"L3_lit_material_play": true,
"L4_max_count_ok": true,
"L5_html5_webgl2": "n/a",
"L6_owners_signed": true
},
"lights_present": ["ambient", "directional", "point", "spot"],
"light_max_count": 64,
"light_component_count": 4,
"material": "builtins_or_custom_lit_path",
"play_mode_screenshot": "artifacts/play_mode_screenshot.png",
"html5_webgl2": "n/a",
"html5_note": "desktop-only spike; HTML5 WebGL2 deferred",
"decision": "hold_until_stable",
"ship_owner": "NAME",
"spike_owner": "NAME",
"promote_after": "stable 1.13.1+ with Light components; re-run L1-L6",
"notes": "Editor preview limited to 8 lights; WebGL1 incompatible per PR #12176"
}
Store next to your other evidence (same folder culture as BUILD_RECEIPT evenings). Templates for Defold save audits live under 12 free Defold / GDevelop / Ren'Py save-path resources — different format ladder, same evidence habit.
Comparison - where this sits vs other July keep/holds
| Topic | Engine | Question |
|---|---|---|
| This article | Defold 1.13.1-beta | Can we light a collection with editor components? |
| MonoGame 3.8.5 | MonoGame | DesktopVK / Content Builder without breaking DesktopGL? |
| Unity 6.5 BIRP | Unity | Keep BIRP or move URP before ship? |
| AutoRemesher | DCC | Free quad remesh before bake? |
Same keep/hold discipline; different primary keywords. Do not cannibalize.
Key takeaways
- defold light components arrived in 1.13.1-beta (July 13, 2026) with editor create/preview and engine LightBuffer bind.
- Four types matter: ambient, directional, point, spot — separate resource extensions on purpose.
- Materials must opt in; unlit shaders ignore your beautiful Outline lights.
- Copy the LightBuffer layout from builtins; do not freestyle the struct.
- Editor preview tops out at 8 lights; runtime
light.max_countdefaults to 64. - WebGL1/ES2 cannot use light components — plan WebGL2 or hold.
- Beta disclaimer is real — side-by-side install and a spike branch.
- Ship channel stays stable until L1–L6 pass on a non-beta build.
- File
defold_1131_lights_receipt_v1.jsonwith dual owners. - Park morph instancing, SDL pads, and warm builds for other evenings.
- Do not mix Steam save-root debugging with lighting beta.
- Discord brief + receipt beats “it looked fine” when partners ask.
FAQ
What are Defold light components in 1.13.1?
They are first-class components for ambient, directional, point, and spot lights you add in the editor and consume in shaders via LightBuffer. See the Light manual and 1.13.1 beta notes.
Should I upgrade my Steam build to Defold 1.13.1-beta for lights?
No by default. Spike on a branch, keep the fest depot on stable, promote only after a stable release preserves the API and you re-run L1–L6.
Why is my scene still dark after adding lights?
Most often the material does not declare the correct LightBuffer, or you are on an unlit shader. Second: WebGL1 HTML5. Third: intensity/range near zero.
Do ambient lights count toward light.max_count?
Yes for the component budget. They do not consume entries in the shader lights[] array (manual).
Can I use more than eight lights?
Runtime allows up to light.max_count (default 64). Editor preview currently supports at most eight — smoke carefully, then scale.
Will lights work on HTML5?
Only on WebGL2+ contexts. WebGL1/ES2 is explicitly unsupported for light components (PR #12176).
Is this the same as the Defold Steam save audit article?
No. That URL is collection/save packaging. This URL is lighting keep/hold. Link them; do not merge keywords.
Where do I download 1.13.1-beta?
GitHub Releases — v1.13.1-beta (editor builds and bob.jar). Read the forum disclaimer first.
What should studios put in a diligence zip?
Receipt JSON, Play screenshot, ship vs spike owners, WebGL policy, and a one-line “promote after stable” condition.
How does this relate to Lua scripting?
Lights are mostly shader + editor. Lua still owns gameplay that toggles light objects or intensities. Use Lua scripting overview for script structure — not as a substitute for LightBuffer.
Related reading
- Your First Defold Steam Desktop Collection and Save Audit
- Defold Steam Save Root Outside Collection Map - Fix
- MonoGame 3.8.5 Upgrade Keep Hold - DesktopVK
- Game Development with Lua Scripting
- 12 Free Defold GDevelop Ren'Py Save-Path Audit Templates
- How to Ship Godot 4 HTML5 Demos
- Official: Light component manual · 1.13.1 BETA notes · v1.13.1-beta
Bottom line
defold light components in 1.13.1-beta are the first evening worth running if you care about lit 3D collections in Defold — and the first evening worth not merging if you care about a calm Steam week. Spike four light types, prove LightBuffer, record WebGL truth, file the receipt, keep ship on stable. When stable carries the same lights, promote with L1–L6 already rehearsed.