An X-ray for code
Paste a program and watch it execute in slow motion — every token, the syntax tree, the call stack, the memory. Unlike tools that only show runtime state, CodeJourney animates the whole pipeline (lexer → parser → AST → execution) as one scrubbable timeline, and pairs it with a built-in data-structures-and-algorithms curriculum instead of a blank editor.
When to use CodeJourney (and when not to)
These are all excellent tools. Here's an honest guide to picking the right one for the job.
Python Tutor
What it's great at
Stepping through real Python, Java, C, C++ and JavaScript code and drawing the memory at each step. The classic, battle-tested in thousands of courses.
Reach for CodeJourney when
You want the whole pipeline — tokens, syntax tree, types, call stack, memory — as one animated, scrubbable timeline, plus a built-in DSA curriculum instead of a blank editor. Think Python Tutor, but animated end-to-end.
VisuAlgo
What it's great at
Beautiful, polished animations of classic algorithms and data structures — sorting, BSTs, graphs, and dozens more.
Reach for CodeJourney when
You want to run your own code and watch it execute, not a pre-built animation of someone else's. CodeJourney connects the algorithm to actual source lines as they run.
Thonny
What it's great at
A beginner-friendly desktop IDE for real Python — real libraries, real files, expression-level debugging.
Reach for CodeJourney when
You're in the browser with zero setup, learning in Java or JavaScript too, or want to see how the language itself works (lexing, parsing, the AST) — not just step through statements.
VS Code Debug Visualizer
What it's great at
Visualizing live data structures while you debug a real project in VS Code.
Reach for CodeJourney when
You're learning fundamentals rather than debugging a production codebase — no extension, no launch config, no project to set up.
Runestone Academy
What it's great at
Full interactive textbooks — complete courses with readings, exercises and grading, used by whole classrooms.
Reach for CodeJourney when
You want a visualizer-first experience: short lessons built around watching code execute, not a textbook with embedded snippets.
And to be clear about the trade-off: if you need to run real software — imports, files, libraries, async, frameworks — use a real editor and debugger. CodeJourney deliberately trades language coverage for X-ray depth on a small teaching subset.
What CodeJourney can and can't do
CodeJourney runs a simplified teaching subset of each language — variables, loops, functions, and arrays: everything algorithms need. Imports and libraries aren't supported; programs are self-contained. The editor tells you the moment you type something outside the subset — a yellow squiggle with a friendly explanation, before you even press Run.
✓ Supported in all three languages
| Feature | Java | Python | JavaScript |
|---|---|---|---|
| Variables | int x = 5; | x = 5 | let x = 5; |
| Math, comparison & logic | int y = x * 2 + 1; | y = x * 2 + 1 | let y = x * 2 + 1; |
| if / else | if (x > 3) { x = 0; } | if x > 3:
x = 0 | if (x > 3) { x = 0; } |
| while & for loops | for (int i = 0; i < 3; i++) { } | for n in nums:
total = total + n | while (n > 0) { n = n - 1; } |
| Functions & recursion | static int square(int n) { return n * n; } | def square(n):
return n * n | function square(n) { return n * n; } |
| Arrays & indexing | int nums = [1, 2, 3]; | nums = [1, 2, 3] | const nums = [1, 2, 3]; |
| Printing | System.out.println(x); | print(x) | console.log(x); |
✕ Deliberately not supported
These are real-language features the teaching subset leaves out — the editor explains each one and suggests a subset-friendly alternative.
Java
importPrograms are self-contained — System.out.println() works without imports.packageJust declare your class directly — no package needed.- Java library classesUse plain arrays instead — e.g. int[] nums = {1, 2, 3};
- Exception handlingUse if/else checks instead of try/catch.
interfaceUse a single class with static methods.
Python
importPrograms are self-contained — print(), len(), and range() work without imports.- Exception handlingUse if/else checks instead of try/except.
withblocksThe subset has no files or resources to manage — plain statements work.lambdaDefine a named function with def instead.- f-stringsUse string concatenation instead — e.g. print("x = " + x).
- Triple-quoted stringsUse regular double-quoted strings.
JavaScript
importPrograms are self-contained — console.log() works without imports.require()Programs are self-contained — no modules needed.- async/awaitThe subset runs synchronously — call functions directly.
- Template literalsUse string concatenation instead — e.g. console.log("x = " + x).
- JavaScript classesUse plain functions instead.