CodeFlip and Python Tutor
Python Tutor made step-by-step visualization part of how programming is taught, and most teachers who find CodeFlip already know it. This page sets out where the two differ, including what CodeFlip doesn't do yet.
Checked in October 2026 against pythontutor.com, its list of unsupported features, and its last open-source release (2020). Details marked (2020) come from that release; the live site may have changed since.
At a glance
| Python Tutor | CodeFlip | |
|---|---|---|
| Languages | Python, Java, C, C++, JavaScript | Python, Java, C, C++, JavaScript, TypeScript |
| Where programs run | On its servers (2020) | In the learner's browser. Java, C and C++ are compiled once on a server and cached. |
| Each step explained | No | A plain sentence per step, also announced to screen readers |
| Program length | 1,000 steps (2020) | 10,000 steps, keeping the trace up to the limit |
| Embedding | An iframe | An iframe or a self-sizing web component, short links, a link that opens at a chosen step or at the end, and Python Tutor's own embed URLs |
| Courses | Free Teacher Mode for live coding and exercises in class | Canvas and other LMSs through LTI 1.3 (launch only); no live class sessions yet |
| Cost and source | Free, supported by donations | Free; open source (MPL-2.0 libraries, AGPL-3.0 platform) |
Where CodeFlip shows more
- A sentence for every step. "Line 3 ran: backup is now [90, 72, 85] (backup and scores both refer to this list)."
- C and C++ memory as it really is. Return values, memory leaks, dangling pointers, pointers just past the end of an array, unions, and C++ exceptions with the thrown object on the heap. Python Tutor documents C and C++ return values as not shown, and C++ features as largely untested.
- Standard containers as values.
vector,map,string, smart pointers andweak_ptrare drawn as what they hold, not as library internals. - Input in every language, including
scanf,cinandScanner, with the Input panel showing what has been read. - Text files. Python, Java, C and C++ programs can read and write files you add beside the code; Python Tutor's programs can't open files.
- Newer language versions: Python 3.14 and Java 17 (records, switch expressions, text blocks), where Python Tutor's Java is Java 8 (2020).
- JavaScript's async code: Promises,
async/awaitand timers, plus TypeScript. - 2D arrays as grids, in every language, with a toggle to draw them as separate arrays.
Where they work the same way
- The layout: code on the left, frames and objects on the right, arrows between them.
- Steps follow lines, not parts of a line:
f(g(x))is one step. - Neither runs GUI programs, network code, threads or command-line arguments.
#breakcomments, clicked breakpoints,# pythontutor_hide:comments, keeping finished calls on screen, and live editing work in both.
What Python Tutor has that CodeFlip doesn't
- Teacher Mode: live coding with a class and in-class exercises. CodeFlip has no live shared sessions yet.
- Every JDK class. Python Tutor runs a real JVM; CodeFlip implements the parts of Java's library courses use, and anything else stops with a message naming the class.
- Some display options: drawing numbers and strings as objects, nesting objects inside each other, and text labels instead of arrows.
CodeFlip's known limitations
Every language
- Up to 10,000 steps per run, with limits on running time and on how deeply calls nest; past them, CodeFlip shows the steps so far and says why it stopped.
- No GUI, network, threads or command-line arguments.
- Files are text only, up to 64 KB each, with no folders of their own.
- LTI is launch only: grades aren't sent back to the LMS.
Python
- Python 3 only. Python 2 programs run as Python 3, so
print xneeds parentheses.
Java
- A teaching subset of the library: collections, streams,
Optional,java.timedates and times,Scannerand file I/O. Time zones,Instantand other classes stop with a message naming them. - Threads stop with a "can't run yet" message.
C and C++
- One source file per program: no programs split across
.hand.cppfiles yet. - C++ programs need Chrome 137, Firefox 131 or Safari 18.4 or newer, because of how exceptions are compiled.
JavaScript and TypeScript
- No
import/export,eval,new FunctionorProxy. Async generators,for awaitand top-levelawaitstop with a "can't run yet" message. - TypeScript's types are removed before it runs, so type errors aren't reported, as with
tsc --noCheck.
Switching
Python Tutor links and embeds open on CodeFlip when you change the domain. The migration guide converts them for you, and converts CodeFlip links back to Python Tutor if you ever want to return.