LogicOR is a browser-based digital logic simulator built with React, TypeScript, Zustand, and SVG. It is designed for engineering-focused circuit editing, fast signal feedback, and practical analysis (truth table + Karnaugh export).
- Engineering-style canvas:
- Orthogonal (grid-like) wire routing
- Zoom, pan, and grid snapping
- Branching and waypoint editing on connections
- Core digital components:
INPUT,OUTPUT(lamp),CLK,TEXT,DISPLAY(0..127)AND,OR,NOT,NAND,NOR,XOR,XNORDFF,JKFF,TFF,SRFF
- Advanced components:
8421 -> GraytranscoderMUX 4:1DEMUX 1:4PROGRESScontroller (Q1..Q10, active-low outputs)FA1(1-bit full adder)
- Analysis and export:
- Truth table export to CSV
- Karnaugh maps export to CSV (including FF states and next-state functions)
- Language support:
- UI translations:
EN,DE,ES,JA - Language selector in the app header
- Automatic language detection from browser settings on first load
- UI translations:
- Persistence:
- Cookie consent prompt on startup
- Project/theme/language persistence when consent is granted
- Node.js
20.19+or22.12+(recommended) - npm
npm install
npm run devOpen the local URL shown by Vite (usually http://localhost:5173).
npm run build
npm run preview- Drag a component from the left palette to the canvas, or click it to place in workspace.
- Move components by dragging.
- Start from an output pin and finish on an input pin.
- Connections are rendered as orthogonal engineering-style wires.
- Input pins accept one connection per input index.
- Select a connection and double-click on wire to add a waypoint.
- Drag waypoint to reshape route.
- Double-click waypoint to remove it.
Shift + clickon an existing wire to start a branch from that wire.
- Double-click
INPUTto toggle0/1. - Double-click
CLKto set frequency in Hz (0stops the clock). Shift + clickonCLKtoggles clock pass-through mode (IN-OUT).Shift + double-clickonOUTPUTtoggles pass-through mode.
- Go to the Analiza tab in the right sidebar.
- Export truth table CSV.
- Export Karnaugh maps CSV (2-4 variables total: inputs + FF states).
- Use the language selector in the top app bar.
- Available languages:
English (EN),Deutsch (DE),Español (ES),日本語 (JA). - On first load, the app picks language from browser preferences.
- If cookies are accepted, the selected language is restored on next visit.
Esc- cancel wire drawing / clear selectionDeleteorBackspace- delete selected itemArrow keys- rotate selected component by 90 degreesShift + dragor middle mouse drag - pan canvas- Mouse wheel - zoom
Alt + drag- draw free orthogonal helper wire on grid
INPUT- manual logic source (0/1)OUTPUT- lamp indicator driven by input signalCLK- configurable frequency sourceTEXT- editable label elementDISPLAY- 7-bit numeric display (B6..B0, range0..127)
8421 -> Gray- Inputs:
B3 B2 B1 B0 - Outputs:
G3 G2 G1 G0
- Inputs:
MUX 4:1- Inputs:
X0 X1 X2 X3 S1 S0 - Output:
Y
- Inputs:
DEMUX 1:4- Inputs:
X S1 S0 - Outputs:
Y0 Y1 Y2 Y3
- Inputs:
PROGRESS- Inputs:
B3 B2 B1 B0 - Outputs:
Q1..Q10(active-low)
- Inputs:
FA1(full adder, 1-bit)- Inputs:
A B Cin - Outputs:
S Cout
- Inputs:
- On first load, the app asks for cookie consent.
- If accepted:
- Project state is persisted in browser storage
- Theme mode is persisted (
system,light,dark) - UI language is persisted (
EN,DE,ES,JA) - Canvas state is restored on reload
- If declined:
- Project/theme/language persistence is disabled and cleared
- Cannot connect to an input pin:
- The input may already be occupied.
- Remove the existing connection first.
- Wires look wrong:
- Select connection and rebuild route with waypoints.
- Use grid-aligned movement for clean paths.
- Karnaugh export disabled:
- Ensure total variables (inputs + FF states) is between
2and4. - Ensure at least one
OUTPUTor FF exists.
- Ensure total variables (inputs + FF states) is between
- Development server warning
431 Request Header Fields Too Large:- This project avoids large cookie payloads by using browser storage for project data.
- Clear old browser cookies for this host if needed.
- React 19
- TypeScript
- Zustand
- Vite
- SVG rendering
Educational project. Use freely for learning and experimentation.
