Python Debug Dojo sharpens your debugging instincts by presenting intentionally broken Python code for you to fix — then running it right on your iPhone so you can verify the result. Powered by Pyodide (WebAssembly Python) inside a WKWebView, no server or internet connection is needed for execution. A hint system and instant pass/fail feedback keep each session efficient and satisfying.
Each problem presents a snippet of Python code with an intentional bug. Edit the code in the built-in editor, tap Run, and Pyodide executes it on your device. The output is compared against the expected result and you get an instant pass or fail — no guessing, no waiting.
Pyodide — a WebAssembly port of CPython — runs inside a WKWebView embedded in the app. Python executes locally on your device with no server calls and no internet connection required for code execution. The Run button activates automatically once the engine finishes loading.
Stuck? Tap the Hint button to see an explanation of the bug type, the fix strategy, and relevant Python syntax notes. After every run, a large pass (circle) or fail (X) overlay appears on screen for unambiguous feedback. Tap the overlay to dismiss it and keep going.
The free plan gives you access to the first 20 problems. A monthly Premium subscription unlocks the full library of hundreds of debugging challenges and removes all banner ads. Your progress is saved automatically so you always pick up where you left off.
The problem description appears at the top of the screen. Below it, the code editor loads a Python snippet with one or more intentional bugs in a Menlo monospace font with autocorrect disabled. Edit the code, tap Run, and the output appears in the results panel. If the output matches the expected value exactly, a green circle overlay marks it correct. Tap the overlay to move to the next problem.
The app bundles Pyodide via a custom WKURLSchemeHandler that serves local web assets. Python runs inside the WKWebView with Cross-Origin isolation headers set correctly for SharedArrayBuffer support. The JavaScript bridge posts execution output back to Swift via a WKScriptMessageHandler. The Run button stays disabled until the engine signals it is ready, then enables immediately for use.
Each problem includes an explanation that describes the type of bug, the thinking process for finding it, and the Python concept involved. The hint appears in an alert dialog so you can read it and immediately return to editing. If you want to start fresh after reading the hint, the Reset button restores the original buggy code in one tap.
The index of the last problem you worked on is stored in UserDefaults. Reopen the app and you land on the same problem where you left off. Use the previous and next navigation buttons in the header to move between problems at any time. The current problem number and title display in the header so you always know where you are in the set.
The problem statement at the top of the screen describes what the code is supposed to do. Read it carefully — knowing the expected behavior is the first step to spotting what's wrong with the code.
Look through the Python code in the editor and identify the bug. Edit the code to correct it. Autocorrect and autocapitalization are disabled so you can type Python syntax cleanly.
Tap the Run button (blue when the engine is ready). The output appears in the results panel below. A large circle overlay means the output matched — a large X means it didn't. Tap the overlay to dismiss it.
"When I first started learning Python, error messages felt like a foreign language. Practicing with Debug Dojo — fixing real (intentional) bugs and seeing the output change — trained me to read errors and know immediately where to look. Running code on the phone itself makes it feel real."
"I do one or two problems during my commute every day. The hints are well written — they point you in the right direction without just handing you the answer. With hundreds of problems in the Premium library I haven't run out of challenges yet."
"Debugging someone else's code is genuinely harder than writing your own, and this app makes that feel like a game. The big pass/fail overlay after each run is satisfying when you get it right. Great way to build instincts that actually transfer to real projects."
Find answers to common questions below.