How de-rossi-consulting/logisim.app works
Purpose and Entry Points
Logisim.app ports Logisim 2.7.2, a digital-circuit design and simulation desktop application, to modern browsers. The browser shell starts from index.html and JavaScript under src/javascript/main.js; it loads and executes the prebuilt Java application at public/logisim.jar through CheerpJ/WebAssembly.
Browser Host Layer
The Vite-served frontend provides the page, styling, runtime bootstrap, alerts, examples, and browser-specific file integration.
• index.html
• src/javascript/main.js
• src/javascript/fileFunctions.js
This layer is the boundary between browser APIs and the Java application. It supports local-file interactions and a browser virtual filesystem backed by IndexedDB; browser restrictions alter save behavior, especially in Firefox.
Java Application Startup and UI
The primary application remains a Java/Swing program. com.cburch.logisim.Main is the Java-level application entry point, with startup mode/UI initialization separated under the start package. Main editing, menus, canvas painting, tool selection, and simulation controls reside in the GUI packages.
• logisim/src/com/cburch/logisim/Main.java
• logisim/src/com/cburch/logisim/gui/start/Startup.java
• logisim/src/com/cburch/logisim/gui/main/Frame.java
Circuit Domain Model and Simulation
Circuit construction is modeled independently of the UI: circuits contain components, wires, mutations, transactions, and per-run state. The simulator and propagator evaluate signal changes, while ticker support drives clocked circuits. This is the core control flow from user edits or input changes to recalculated component values and rendered simulation state.
• logisim/src/com/cburch/logisim/circuit/Circuit.java
• logisim/src/com/cburch/logisim/circuit/Simulator.java
• logisim/src/com/cburch/logisim/circuit/Propagator.java
Components, Libraries, and Instance Contract
Reusable component factories and instances form the extensibility boundary. Standard libraries implement gates, arithmetic, wiring, I/O, multiplexers, and stateful memory; each uses shared component/instance abstractions for ports, attributes, painting, and simulation behavior.
• logisim/src/com/cburch/logisim/instance/InstanceFactory.java
• logisim/src/com/cburch/logisim/std/Builtin.java
• logisim/src/com/cburch/logisim/std/memory/Memory.java
Project Persistence and Analysis
Projects and circuit libraries are loaded/saved through Logisim XML readers/writers and loaders. The analysis subsystem derives truth tables and Boolean expressions from circuit-level logic and can build circuits from analyzed expressions.
• logisim/src/com/cburch/logisim/file/LogisimFile.java
• logisim/src/com/cburch/logisim/file/XmlReader.java
• logisim/src/com/cburch/logisim/analyze/model/AnalyzerModel.java
Build, Runtime, and Assets
Java 8+ and Python build the Java sources into the deployable JAR; Node/Vite serves the browser host. CheerpJ is the material external runtime enabling Java bytecode execution via WebAssembly. Bundled JAR dependencies and localized resources remain part of the Java distribution.
• logisim/scripts/create-jar.py
• public/logisim.jar
• logisim/libs/jh.jar
Components 19
Browser Host
Vite frontend and browser integration.
- Browser page
index.html - Runtime bootstrap · Initializes CheerpJ and browser-facing application behavior.
src/javascript/main.js - Browser file bridge · Connects local files and IndexedDB-backed virtual storage.
src/javascript/fileFunctions.js
Java Application
Swing application running in the browser.
- Java main
logisim/src/com/cburch/logisim/Main.java - Startup · Selects startup mode and initializes the UI.
logisim/src/com/cburch/logisim/gui/start/Startup.java - Editor frame · Hosts editing, menus, canvas, tools, and simulation controls.
logisim/src/com/cburch/logisim/gui/main/Frame.java - Project persistence · Loads and saves projects and circuit libraries.
logisim/src/com/cburch/logisim/file/LogisimFile.java - XML reader
logisim/src/com/cburch/logisim/file/XmlReader.java
Circuit Engine
Circuit model, components, and simulation.
- Circuit model · Owns components, wires, mutations, transactions, and run state.
logisim/src/com/cburch/logisim/circuit/Circuit.java - Simulator · Coordinates evaluation and clock-driven simulation.
logisim/src/com/cburch/logisim/circuit/Simulator.java - Signal propagator · Recalculates component values after signal changes.
logisim/src/com/cburch/logisim/circuit/Propagator.java - Instance contract · Defines factory-created components, ports, attributes, painting, and behavior.
logisim/src/com/cburch/logisim/instance/InstanceFactory.java - Standard libraries · Provides gates, arithmetic, wiring, I/O, multiplexers, and stateful parts.
logisim/src/com/cburch/logisim/std/Builtin.java - Memory components
logisim/src/com/cburch/logisim/std/memory/Memory.java - Circuit analyzer · Derives truth tables and Boolean expressions and can build circuits.
logisim/src/com/cburch/logisim/analyze/model/AnalyzerModel.java
Build and Runtime
Packaging and bytecode execution.
- Logisim distribution · Prebuilt application and bundled Java resources.
public/logisim.jar - CheerpJ/WebAssembly · Executes Java bytecode in the browser.
- JAR builder · Packages Java sources into the deployable JAR.
logisim/scripts/create-jar.py - Bundled dependencies
logisim/libs/jh.jar
Connections 21
- Browser page → Runtime bootstrap: loads
- Runtime bootstrap → Browser file bridge: uses
- Runtime bootstrap → CheerpJ/WebAssembly: initializes
- Runtime bootstrap → Logisim distribution: loads
- CheerpJ/WebAssembly → Java main: executes
- Logisim distribution → Java main: contains
- Java main → Startup: starts
- Startup → Editor frame: initializes
- Editor frame → Circuit model: edits and renders
- Editor frame → Simulator: controls
- Circuit model → Simulator: simulates
- Simulator → Signal propagator: propagates changes
- Circuit model → Instance contract: contains instances
- Standard libraries → Instance contract: implements
- Memory components → Standard libraries: extends library
- Project persistence → XML reader: loads XML
- Project persistence → Circuit model: persists
- Circuit analyzer → Circuit model: analyzes and generates
- Browser file bridge → Project persistence: provides file access
- JAR builder → Logisim distribution: packages
- Bundled dependencies → Logisim distribution: bundled into