Refract

A laser-reflection puzzle on an 8x6 grid: rotate mirrors and mix red, green and blue into the exact colour each receiver demands.

Gold and cyan beams bending twice inside a dark glass prism and landing as a pool of light — illustration, not a game screenshot
Illustration (AI-generated), not a game screenshot

An 8x6 grid holding emitters, receivers, mirrors, splitters, glass, portals and blockers. You can only touch a few cells, and you have to bend the light into the receivers — each one demands an exact colour, whether a primary or a mix. Thirty levels, each tracking your fewest moves.

Released 2026-11-07 · Version 1.0.0 · Updated 2026-11-07

The title screen states the rule in one line: rotate mirrors and send the light into the receivers. Below it: 30 levels, an 8x6 grid, five components, and the win condition — light every receiver.
The title screen states the rule in one line: rotate mirrors and send the light into the receivers. Below it: 30 levels, an 8x6 grid, five components, and the win condition — light every receiver.
Level one: an emitter on the left, a receiver on the right, two mirrors between them, one at the wrong slope. The HUD shows level, moves and how many receivers are lit; the footer has undo, reset and hint.
Level one: an emitter on the left, a receiver on the right, two mirrors between them, one at the wrong slope. The HUD shows level, moves and how many receivers are lit; the footer has undo, reset and hint.
The same level after the mirror is turned: the red beam reflects three times before reaching the receiver, which lights up and takes the counter to 1/1. Every cell the beam crosses keeps a faint bloom.
The same level after the mirror is turned: the red beam reflects three times before reaching the receiver, which lights up and takes the counter to 1/1. Every cell the beam crosses keeps a faint bloom.

The level is built backwards

Scattering mirrors at random and hoping a solution exists is how this genre usually breaks. Here the order is reversed. A fixed seed first builds a complete light path that is known to work, then computes which cells each beam crosses and what colour accumulates in each. Receivers are placed only on cells the solution actually lights, and each demands exactly the colour found there.

With a verified answer in hand, the hiding starts: one to seven lit mirrors are picked, half removed so you must place them, half turned 90 degrees so you must turn them back. Every other mirror stays correct and locked. Because receivers do not block light, adding them to the solved layout cannot change the trace — so reconstructing that layout must win. Solvability is constructed, not searched for.

What the five components do

A mirror has only two slopes — forward slash and backslash — so although it stores four orientations it has two real states, and two clicks return it to how it looked. A splitter divides one beam into three: straight on, plus one to each side. It is the only component that lets a single path light several receivers at once. Glass does not bend anything; it shifts colour — red to green, green to blue, blue to red — which changes hue without changing route. Portals come in pairs and re-emit a beam from the partner along the same direction. Blockers, like the border, simply end a beam.

The rules are short, but the space they open is wide: light passes through receivers and carries on, passes through other beams without interacting, and each branch after a splitter is judged independently. A cell accumulates colour, so a cell crossed by red and green is yellow.

Mixing is added, not chosen

Every beam carries a three-bit mask: bit 0 red, bit 1 green, bit 2 blue. Crossing a cell ORs the colour in, so red plus green is naturally yellow, red plus blue magenta, green plus blue cyan, and all three white. A receiver demands one specific mask value, and the test is that the accumulated colour equals it exactly — not that it contains it.

That exact-match rule is why splitters matter. To light a receiver that wants yellow, either red and green must meet on that cell, or a piece of glass must turn red into green and route it back. The first is route planning; the second is understanding which way the shift runs.

Moves and fewest moves

Every rotation or placement costs a move, and an undo refunds it — a misjudgement should not be charged to your record, so turning something just to watch where the light goes and then undoing is free. Each level keeps its own best and never overwrites it with a worse replay. A single level shows its own record; the overview shows the total across all thirty.

Saving moves is usually about order rather than economy. Try a cell, watch where the light goes, then decide which slope it should stay on. The hint button names the first editable cell that is still wrong and highlights it for 2.4 seconds without saying which way to turn — it moves you from "I cannot find it" to "it is this one", and leaves the reading of the beam to you.

Why a beam stops

A single beam is capped at 64 segments and the board at 256 beams. Those limits are not performance tuning — they are hard stops against infinite loops. Splitters multiply beam count, and portals can send a beam back through cells it has already crossed; without caps, one click could hang the page.

Each beam also carries its own set of visited (cell, direction, colour) states and terminates on a repeat. A beam circling a closed loop stops itself rather than reflecting forever. What you see is light ending somewhere; what the engine did was notice it had already been in that exact state.

Questions

Can a level be unsolvable?
No. Levels are built from a solved layout and then partially hidden, so an answer exists before anything is concealed. Generation also checks whether the starting board is already solved and rebuilds if so.

Why does a mirror return to its original look after two clicks?
It has only two slopes. The code stores 0 to 3, but the reflection table reads just the lowest bit, so opposite orientations are equivalent — four clicks make a full turn, two clicks look identical.

Does a mixed colour count?
Yes, as long as it is exactly the colour the receiver wants. The test is equality, not inclusion, so yellow requires yellow; red plus blue will not do.

Do move records sync?
No. Cleared levels and fewest-move records for all thirty levels live only in this browser.

Start with the first beam — Runs on its own subdomain · 30 levels, 48 cells · records stay on this device

Release notes

Since the first version on 2026-11-07, this page records what changed in each version of this game.

  1. 1.0.0 · 2026-11-07 — First release: 30 levels on an 8x6 grid, five components, additive mixing of three colours, receivers that demand an exact match, and fewest-move records per level.