CircuitSim simulates digital logic visually. Former TA Roi Atalla created it out of frustration with Brandonsim, a now-abandoned descendant of a circuit simulator older than time itself named Logisim (more history here).


  1. Install Java 8u152 or greater (Java 9 and 10 are fine) from
  2. On Windows and macOS, download from
    On GNU/Linux, try:

Quick Tour

CircuitSim looks like this:

Each tab above the circuit view corresponds to a subcircuit — an independent circuit board. Each subcircuit has a name, used by graders and humans to identify them, and a set of input/output pins. Combinational logic should connect input pins (squares) to output pins (circles). To change the value of an input pin, you can hold Shift and click on one of its bits. Like subcircuits, pins have labels used by autograders to identify them; to set these labels, click a pin and enter text in the “Label” field in the bottom right of the window.

To place a component, click a component on the left and then click where you want to put it. To draw wires, click and drag from a port on a component. Subcircuits themselves can be placed as components. Each of these subcircuit components has its own state independent from the top-level state of the subcircuit, the state you would normally see when you click the tab for the subcircuit. Shift-click on a subcircuit component to see its state. To get back to the top level state, right-click the tab and choose “View top-level state.”


The CircuitSim website has tutorials and more detailed documentation:


To see the value on a wire, hold shift and click the wire. You can also place a Probe component (under Wiring) to display the value on a wire. Do not add additional output pins for debugging, since this could confuse autograders or rearrange pins on subcircuit components, breaking your circuit.


Source Code

If you’re feeling adventurous, you can find the source code on GitHub: Follow the README to build it.

Writing Your Own Tests for a Homework

Currently, we base our testers on the following template: The README should describe how to write some tests, and it includes some examples of testers for circuits suspiciously like those in 2110 homeworks.