🌐 Visit javawiz.net · 📋 View the changelog
JavaWiz helps programming beginners understand what their Java programs are doing. Step through code line by line and watch control flow, variables, memory, arrays, data structures, method calls, streams, and input evolve in synchronized visualization panels.
Unlike a traditional debugger, JavaWiz records the execution trace. You can move backward and forward through a program without restarting it, making abstract runtime behavior concrete and easier to explain, explore, and revisit.
- ⏪ Time-travel debugging — step backward, replay earlier states, and inspect an execution at your own pace.
- 🧭 Visual control flow — follow the currently executing statement in automatically generated flowcharts.
- 🧠 Concrete memory models — see stack frames, static variables, heap objects, references, and object relationships.
- 📊 Execution history — track variable values and conditions from one statement to the next in a tabular view.
- 🧩 Data-structure visualizations — explore arrays, linked lists, and binary trees with purpose-built animated views.
- 🌊 Java Stream visualization — trace execution order, transformations, intermediate results, and element lineage in dynamic marble diagrams.
- 🔗 Sequence diagrams — see how objects interact through method calls.
- ⌨️ Input visualization — inspect consumed and remaining input when using JavaWiz's
In.javaclass. - 🎓 Built for teaching and learning — useful for individual exploration, exercises, and live classroom demonstrations.
| Flowchart View | Memory View |
|---|---|
![]() |
![]() |
| Follow control flow, active statements, values, and method expansion. | Understand stack, statics, heap objects, and references. |
| Tabular View | Lists and Trees |
|---|---|
![]() |
![]() |
| Review execution history, variable changes, and conditions. | Watch traversal, insertion, deletion, and pointer changes. |
| Array View | Input View |
|---|---|
![]() |
![]() |
| See index expressions, assignments, and data movement. | See consumed input, remaining input, and operation results. |
| Java Stream View |
|---|
![]() |
| Follow execution order and element lineage through filtering, mapping, and terminal operations. |
Install JavaWiz from the Visual Studio Marketplace, open a Java file, and use Debug with JavaWiz above a main method or from the editor context menu.
Download the latest IntelliJ plugin ZIP from GitHub Releases. In IntelliJ IDEA, open Settings → Plugins → ⚙ → Install Plugin from Disk, then select the downloaded ZIP.
JavaWiz currently requires JDK 25 or newer.
JavaWiz was developed at the Institute for System Software at Johannes Kepler University Linz, Austria. Its design and educational applications are described in:
Markus Weninger, Simon Grünbacher, and Herbert Prähofer.
JavaWiz: A Trace-Based Graphical Debugger for Software Development Education.
33rd IEEE/ACM International Conference on Program Comprehension (ICPC 2025).
JavaWiz is free and open source. Contributions, bug reports, and feature suggestions are welcome.
This project is a Gradle multi-project workspace consisting of five subprojects:
- backend — Kotlin/JVM WebSocket server that compiles and step-debugs Java programs using JDK internals
- frontend — Vue 3, TypeScript, and Vite visualization UI
- shared — TypeScript types shared between
frontendandvsc-extension - vsc-extension — TypeScript VS Code extension that orchestrates the backend and frontend
- intellij-plugin — Kotlin IntelliJ IDEA plugin that embeds the same backend and frontend in IDE tool windows
The frontend requires the backend to run to work properly.
Use the repository's Gradle wrapper from the project root:
# Build all projects
./gradlew clean build
# Build individual components
./gradlew :frontend:clean :frontend:build
./gradlew :backend:clean :backend:build
./gradlew :intellij-plugin:buildPluginOn Windows, use gradlew.bat instead of ./gradlew.
The Gradle configuration cache is enabled centrally for all wrapper commands,
including IDE, CI, development, and publishing tasks. Repeated commands can
therefore reuse their configured task graph automatically. For troubleshooting
an incompatible task or plugin, disable it for one invocation with
--no-configuration-cache.
Build outputs:
- Frontend:
frontend/dist/index.html - Backend:
backend/build/libs/backend-<version>.jar - IntelliJ plugin:
intellij-plugin/build/distributions/JavaWiz-*.zip
# Start the frontend development server
./gradlew :frontend:run
# Start the backend
./gradlew :backend:run
# Run the IntelliJ plugin in a sandboxed IDE
./gradlew :intellij-plugin:runIdeThese tasks are also available as IntelliJ run configurations when the repository is imported into IntelliJ IDEA.
# Run all checks
./gradlew check
# Run the backend suite on every configured JDK
./gradlew :backend:testAllBy default, Gradle prints only failed backend tests and suppresses test-process standard streams. Add -PverboseTests to a backend test command to print passed/skipped events and standard output/error, for example ./gradlew :backend:test -PverboseTests.
Backend tests also run automatically on Windows and Linux for pushed commits, tags, and published GitHub releases.
Icons taken from Flaticon and others; for detailed attribution, see the icon sources.






