Emmanuel Akinfulubi

Playground

A blank page with the runner attached. Anything you can write in a browser console you can write here, and the output comes back into the tray below. Load one of the starters to see a single idea in isolation.

Scratch pad

Output


      

Starters

How it runs. Your code is executed in this page, inside a function scope with a shadowed console, so it cannot reach the page's real console or overwrite anything on the site. console.log prints; a return on the last line prints as a returned value; await at the top level works.

Always strict mode. Every panel on the site runs with "use strict" applied, which is what modules and class bodies do anyway. It matters in two places you might test: an unowned call gives this === undefined rather than the global object, and writing to a frozen or getter-only property throws a TypeError instead of being silently dropped.

Runaway loops. Loop conditions are rewritten before running so that a while (true) throws after two million iterations rather than freezing the tab. A for...of over an endless generator has no condition to rewrite, so that one can still hang; reload the page if it does.

What is kept. The contents of the editor are saved to this browser's localStorage so a reload does not lose your work. Reset puts the original starter back. Nothing is sent anywhere.

Newsletter

New writing, when it lands.

Occasional notes on shipping software with AI agents. No schedule, no filler, unsubscribe in one click.