Beginner-Friendly Tutorials Jul 26, 2026

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

How to use Defold 1.13.1 light components in 2026 - ambient directional point spot, LightBuffer shaders, WebGL2 gate, and a keep/hold receipt for indie lit scenes.

By GamineAI Team

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

gizmo gremlins pixel art thumbnail for Defold 1.13.1 light components first lit scene evening

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:

  1. 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.
  2. Docs and engine bind landed together. The Light manual plus built-in lighting.glsl / model_lit path means Discord will ask “did you try the new lights?” — you need a receipt, not vibes.
  3. 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 LightBuffer layout, the engine fills it from active light components.
  • Built-in helpers/builtins/materials/lighting.glsl and model_lit.fp show Lambert diffuse + ambient usage.
  • Project limitlight.max_count (default 64); ambient counts toward the component limit but not toward lights[] 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.

  1. Download 1.13.1-beta from GitHub Releases (editor + bob if you build from CLI).
  2. Create a new project or clone your game onto a branch named spike/defold-1131-lights.
  3. Open the main collection. Add a game object lights_root.
  4. 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
  5. Confirm the Model material uses a lit shader that includes LightBuffer (start from builtins / model_lit pattern in the manual).
  6. Press Play. Orbit the camera. Confirm the prop brightens when you raise intensity and darkens when you disable the directional object.
  7. 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:

  1. Confirm export uses a WebGL2 path on target browsers.
  2. Build HTML5 from the spike; load on a WebGL2 browser; verify lights.
  3. 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_unlit
  • ship_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-lights has 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 arcd archives (>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:

  1. Ship channel remains last known stable Defold with existing export proofs.
  2. Spike channel is 1.13.1-beta with isolated branch and defold_1131_lights_receipt_v1.json.
  3. Lighting adoption requires L1–L6 green and a stable release that preserves Light component APIs.
  4. HTML5 products document WebGL2 requirement or an unlit fallback policy.
  5. 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

  1. defold light components arrived in 1.13.1-beta (July 13, 2026) with editor create/preview and engine LightBuffer bind.
  2. Four types matter: ambient, directional, point, spot — separate resource extensions on purpose.
  3. Materials must opt in; unlit shaders ignore your beautiful Outline lights.
  4. Copy the LightBuffer layout from builtins; do not freestyle the struct.
  5. Editor preview tops out at 8 lights; runtime light.max_count defaults to 64.
  6. WebGL1/ES2 cannot use light components — plan WebGL2 or hold.
  7. Beta disclaimer is real — side-by-side install and a spike branch.
  8. Ship channel stays stable until L1–L6 pass on a non-beta build.
  9. File defold_1131_lights_receipt_v1.json with dual owners.
  10. Park morph instancing, SDL pads, and warm builds for other evenings.
  11. Do not mix Steam save-root debugging with lighting beta.
  12. 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

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.