🌈 Match3 is a match-3 puzzle game built with vanilla TypeScript and the HTML5 canvas. Swap adjacent emoji tiles to create matches of three or more, trigger cascading combos, and chase high scores across three game modes. It was made for js13kGames 2026, where the theme was Unicorns and Rainbows.
Play
Play in the browser:
How to Play
- Swap — click or tap a tile, then click an adjacent tile to swap them. You can also use arrow keys to move the cursor and Enter/Space to select and confirm a swap.
- Match — line up three or more identical emojis horizontally or vertically to clear them and earn points.
- Combo — cascading matches multiply your score. The longer the chain, the bigger the bonus.
Features
- Three game modes:
- Levels — reach the target score within a move limit; difficulty scales as you progress.
- Time Attack — score as much as possible before the 60-second timer runs out.
- Endless — play until no valid moves remain, with automatic shuffle.
- Cascading matches with combo multipliers — chain reactions boost your score with a 1.5× multiplier per cascade.
- Touch, mouse, and keyboard controls — full support for desktop and mobile.
- Pastel rainbow canvas rendering — soft gradient backgrounds, rounded tiles, and playful emoji art.
- Particle effects — rainbow particle bursts on big combos.
- Synthesized Web Audio sound effects — select, swap, match, invalid move, win, and lose sounds generated entirely in code with no external audio assets.
- Build under 13 KB zipped — the entire game fits within the js13kGames size limit.
Background
I wanted to participate in js13kGames and the theme Unicorns and Rainbows was a perfect fit for a match-3 puzzle game.
The constraint of keeping everything under 13 KB zipped meant I had to be creative:
- emoji characters instead of image assets,
- synthesized sounds via the Web Audio API instead of audio files, and
- a single canvas element for all the rendering.
The game is built with TypeScript and Vite, with no external runtime libraries. The result is a complete game with three modes, cascading combos, particle effects, and full input support — all in a tiny footprint.
Check out the source code on GitHub.