Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧙 JavaWiz

An educational visual / graphical debugger for Java

Website VS Code Marketplace GitHub release Backend CI License: GPL-3.0

🌐 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.

JavaWiz showing several synchronized program visualizations

✨ Why JavaWiz?

  • 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.java class.
  • 🎓 Built for teaching and learning — useful for individual exploration, exercises, and live classroom demonstrations.

🔍 Visualization Highlights

Flowchart View Memory View
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
Tabular view List and tree view
Review execution history, variable changes, and conditions. Watch traversal, insertion, deletion, and pointer changes.
Array View Input View
Array view Input view
See index expressions, assignments, and data movement. See consumed input, remaining input, and operation results.
Java Stream View
Java Stream view
Follow execution order and element lineage through filtering, mapping, and terminal operations.

🚀 Get JavaWiz

Visual Studio Code

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.

IntelliJ IDEA

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.

📚 Research

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).

Read the paper

🛠️ For Developers

JavaWiz is free and open source. Contributions, bug reports, and feature suggestions are welcome.

Repository Structure

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 frontend and vsc-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.

Building

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:buildPlugin

On 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

Running Locally

# 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:runIde

These tasks are also available as IntelliJ run configurations when the repository is imported into IntelliJ IDEA.

Testing

# Run all checks
./gradlew check

# Run the backend suite on every configured JDK
./gradlew :backend:testAll

By 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

Icons taken from Flaticon and others; for detailed attribution, see the icon sources.

About

Public repository of the visualization tool / graphical debugger *JavaWiz*.

Topics

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages