The working copy, powered on.
edit the file below — the actual Pyxle parser and real CPython re-run it in this tab
CPython via Pyodide · ~12 MB once⌘/Ctrl + Enter — run nowyour first edit boots the runtime
counter.pyxledit me — your first edit boots CPython
resultplain JS until you edit
state lives in Python
0
Edit the code → real Python boots.
sandbox log · boots, runs, errorsidle
— opens on your first edit
sandboxed iframe · opaque origin · no cookies, no page DOM — in a real app the Python half runs server-side on Starlette; here CPython stands in for the server
This board hits this page’s real @action.
every tap is an HTTP POST to the handler printed alongside — counts persist in SQLite on this server · 97,545 page loads so far, same database
react to this page129 total
request logreal HTTP · this server
— opens on your first tap
pages/playground.pyxlruns on this server
@action
async def react_emoji(request):
from db import check_rate_limit, get_client_ip, increment_reaction
client_ip = get_client_ip(request)
# 5 reactions per hour per IP, scoped to the playground reactions board.
if not await check_rate_limit(client_ip, scope="react_emoji"):
raise ActionError(
"Rate limit reached. Please try again after 1 hour.",
status_code=429,
)
body = await request.json()
emoji = body.get("emoji", "")
if emoji not in VALID_EMOJIS:
raise ActionError("Invalid reaction", status_code=400)
new_count = await increment_reaction(emoji)
return {"ok": True, "emoji": emoji, "count": new_count}
Run it for real.
the same anatomy on your machine — the homepage terminal replays a real session
Docsthe captured session →GitHub
v0.9.4 on PyPI · MIT