An Open-Source EDA Tool for Circuit Design, Simulation, Analysis & PCB Design
Developed by FOSSEE Team at IIT Bombay
Features β’ Architecture β’ Installation β’ Project Structure β’ Tech Stack β’ Contributing β’ License
eSim is a free and open-source EDA (Electronic Design Automation) tool for circuit design, simulation, analysis, and PCB design. It is an integrated tool built using open-source software such as KiCad, Ngspice, GHDL, and Makerchip, providing a seamless workflow from schematic capture to simulation results.
eSim is designed for electronics engineers, students, educators, and hobbyists who want a powerful yet cost-free alternative to proprietary EDA tools. It supports analog, digital, and mixed-signal simulations, including microcontroller integration.
π₯ Download: v2.5 Release Β Β |Β Β π Manual: PDF Guide Β Β |Β Β π Docs: ReadTheDocs
| Category | Feature | Description |
|---|---|---|
| β’ Design | Schematic Capture | Draw circuit schematics using KiCad's schematic editor with eSim's custom symbol libraries |
| β’ Conversion | KiCad to Ngspice | Convert KiCad schematics to Ngspice-compatible netlists for simulation |
| β’ Simulation | Ngspice Engine | Run DC, AC, Transient, and other SPICE analyses with real-time interactive plots |
| β’ Analysis | Waveform Plotting | Visualize simulation results with matplotlib-based Python plots and Ngspice native plots |
| β’ Model Editor | Device Models | Create and edit SPICE device models (Diodes, BJTs, MOSFETs, JFETs, IGBTs, etc.) |
| β’ Subcircuits | Subcircuit Builder | Build, manage, and upload reusable subcircuit blocks |
| β’ Mixed-Signal | NGHDL Integration | Interface VHDL digital models (via GHDL) with analog Ngspice simulations |
| β’ Verilog | Makerchip + NgVeri | Use Makerchip IDE for Verilog/TL-Verilog design and convert to Ngspice models |
| β’ PCB | Layout Design | Design PCB layouts using KiCad's PCB editor with eSim's footprint libraries |
| β’ Converters | Schematic Import | Convert PSpice and LTSpice schematics/libraries to KiCad-compatible formats |
| β’ Modelica | Ngspice-to-Modelica | Convert Ngspice netlists to Modelica models for OpenModelica simulation |
| β’ SKY130 PDK | SkyWater 130nm | Support for SkyWater SKY130 open-source Process Design Kit |
| β’ IHP PDK | IHP OpenPDK | Integration with IHP SG13G2 open-source PDK for SiGe BiCMOS |
graph TB
%% Styling
classDef ui fill:#2A3F54,stroke:#1ABB9C,stroke-width:2px,color:#fff
classDef core fill:#3E536C,stroke:#3498DB,stroke-width:2px,color:#fff
classDef engine fill:#1F2D3D,stroke:#E74C3C,stroke-width:2px,color:#fff
classDef data fill:#E9F0F5,stroke:#95A5A6,stroke-width:1px,color:#333
subgraph UI ["User Interface (PyQt6)"]
A[Application Main Window]:::ui
PE[Project Explorer]:::ui
DA[Dock Area Workspace]:::ui
TE[Time Explorer]:::ui
CON[Console Widget]:::ui
A --> PE & DA & TE & CON
end
subgraph CORE ["Core Python Modules"]
K2N[KiCad-to-Ngspice]:::core
SIM[Ngspice Simulator]:::core
PLT[Matplotlib Plotter]:::core
ME[Model Editor]:::core
SC[Subcircuit Builder]:::core
DA --> K2N & SIM & ME & SC
end
subgraph INTEGRATION ["Mixed-Signal & External APIs"]
NGHDL[NGHDL Interface]:::core
MKR[Makerchip/NgVeri]:::core
MOD[Modelica Converter]:::core
CONV[PSpice/LTSpice Converter]:::core
DA --> NGHDL & MKR & MOD & CONV
end
subgraph ENGINES ["Simulation & EDA Engines"]
KICAD[KiCad Eeschema]:::engine
PCB[KiCad Pcbnew]:::engine
NGSPICE[Ngspice Backend]:::engine
GHDL[GHDL Simulator]:::engine
VER[Verilator]:::engine
OM[OpenModelica]:::engine
end
%% Data Flow
XML[(Netlist / XML)]:::data
RAW[(Raw Data / txt)]:::data
VHDL[(VHDL Files)]:::data
K2N -- Generates --> XML
XML -- Consumed by --> NGSPICE
SIM -- Triggers --> NGSPICE
NGSPICE -- Outputs --> RAW
RAW -- Parsed by --> PLT
NGHDL -- Compiles --> VHDL
VHDL -- Simulated by --> GHDL
GHDL -- Co-simulates --> NGSPICE
MKR -- Verilog/TL-V --> VER
KICAD -- Schematic --> K2N
KICAD -- Netlist --> PCB
For detailed simulation workflows, sub-system operations, and system flowcharts, please refer to our Architecture & Workflows Guide.
| Path | Type | Description |
|---|---|---|
src/ |
π Directory | Core application source code β all Python modules for the eSim GUI and backend |
library/ |
π Directory | Component libraries β device models, KiCad symbols, subcircuits, and PDK data |
nghdl/ |
π Directory | NGHDL module β Ngspice-GHDL interface for mixed-signal VHDL simulation |
Examples/ |
π Directory | 42 example projects β ready-to-simulate circuits (RC, BJT, Op-Amp, Mixed-Signal, etc.) |
images/ |
π Directory | UI assets β application icons, toolbar images, logos, and splash screen |
scripts/ |
π Directory | Launch & setup scripts β shell scripts for Linux installation and launching |
docs/ |
π Directory | Sphinx documentation β RST files for ReadTheDocs auto-generated developer docs |
code/ |
π Directory | Sphinx autodoc config β mirrors src/ structure for API documentation generation |
flatpak/ |
π Directory | Flatpak packaging β manifest and wrapper scripts for universal Linux distribution |
appimage/ |
π Directory | AppImage packaging β build scripts for portable Linux AppImage bundles |
docker-launcher/ |
π Directory | Docker support β Dockerfile, launcher script, and CI workflows for containerized builds |
snap/ |
π Directory | Snap packaging β snapcraft.yaml for building Snap packages |
ihp/ |
π Directory | IHP PDK integration β install script for IHP SG13G2 open-source SiGe BiCMOS PDK |
patches/ |
π Directory | Source patches β patch files for modifying Ngspice/GHDL behavior in sandboxed environments |
.github/ |
π Directory | GitHub config β issue templates, PR templates, and CI/CD workflow definitions |
setup.py |
π File | Python package configuration for pip installation |
requirements.txt |
π File | Python dependency list (PyQt6, matplotlib, numpy, scipy, etc.) |
conf.py |
π File | Sphinx documentation configuration |
VERSION |
π File | Current version identifier (2.5) |
INSTALL |
π File | Detailed multi-platform installation instructions |
LICENSE |
π File | GNU General Public License v3.0 |
src/
βββ frontEnd/ # GUI & Main Application
β βββ Application.py # Main window, toolbar setup, menu actions (960 lines)
β βββ DockArea.py # Tabbed dock workspace for editors/simulators (24K)
β βββ ProjectExplorer.py # File tree browser for project navigation (20K)
β βββ TimeExplorer.py # Project snapshot/version management (8K)
β βββ TerminalUi.py # Embedded terminal widget (5K)
β βββ Workspace.py # Workspace selection dialog (6K)
β
βββ kicadtoNgspice/ # KiCad-to-Ngspice Conversion Engine
β βββ KicadtoNgspice.py # Main conversion controller & UI (41K)
β βββ Convert.py # Netlist parsing and SPICE generation (40K)
β βββ Analysis.py # Analysis type configuration (DC, AC, Transient) (32K)
β βββ DeviceModel.py # Device model parameter handling (56K)
β βββ Source.py # Source component configuration (15K)
β βββ Processing.py # Netlist processing pipeline (26K)
β βββ SubcircuitTab.py # Subcircuit selection in converter (9K)
β βββ Microcontroller.py # Microcontroller model support (10K)
β βββ Model.py # Model file handling (6K)
β βββ TrackWidget.py # UI tracking widget (1K)
β
βββ ngspiceSimulation/ # Simulation Engine & Plotting
β βββ NgspiceWidget.py # Ngspice process management & execution (16K)
β βββ plot_window.py # matplotlib-based waveform plotter (66K)
β βββ plotting_widgets.py # Custom plot controls and widgets (8K)
β βββ data_extraction.py # Simulation data file parser (11K)
β
βββ modelEditor/ # SPICE Model Editor
β βββ ModelEditor.py # GUI for creating/editing device models (33K)
β
βββ subcircuit/ # Subcircuit Management
β βββ Subcircuit.py # Subcircuit manager main window (3K)
β βββ newSub.py # Create new subcircuit (3K)
β βββ openSub.py # Open existing subcircuit (1K)
β βββ uploadSub.py # Upload subcircuit to library (4K)
β βββ convertSub.py # Subcircuit format conversion (2K)
β
βββ maker/ # Makerchip & NgVeri Integration
β βββ Maker.py # Makerchip IDE integration (23K)
β βββ NgVeri.py # Verilog-to-Ngspice model generator (17K)
β βββ ModelGeneration.py # Auto model generation pipeline (48K)
β βββ createkicad.py # KiCad symbol creation for models (14K)
β βββ makerchip.py # Makerchip cloud IDE connector (3K)
β βββ Appconfig.py # Maker-specific configuration (2K)
β
βββ converter/ # Schematic Format Converters
β βββ pspiceToKicad.py # PSpice schematic importer (5K)
β βββ ltspiceToKicad.py # LTSpice schematic importer (6K)
β βββ libConverter.py # Library format converter (3K)
β βββ LtspiceLibConverter.py # LTSpice library converter (4K)
β βββ browseSchematic.py # File browser for schematics (550B)
β βββ LTSpiceToKiCadConverter/ # LTSpice conversion engine
β βββ schematic_converters/ # Additional schematic parsers
β
βββ ngspicetoModelica/ # π Ngspice-to-Modelica Converter
β βββ NgspicetoModelica.py # Core conversion engine (54K)
β βββ ModelicaUI.py # Modelica converter GUI (10K)
β
βββ configuration/ # βοΈ Application Configuration
β βββ Appconfig.py # Global config, paths, process tracking (4K)
β
βββ projManagement/ # π Project Management
β βββ Kicad.py # KiCad integration (launch schematic/PCB editor) (9K)
β βββ Validation.py # Tool and file validation utilities (7K)
β βββ Worker.py # Background process/thread management (3K)
β βββ newProject.py # New project creation logic (5K)
β βββ openProject.py # Open existing project logic (3K)
β
βββ browser/ # π Help & Documentation
βββ Welcome.py # Welcome screen display (941B)
βββ UserManual.py # User manual viewer (731B)
| Path | Description |
|---|---|
deviceModelLibrary/ |
SPICE device models organized by type: Diode, BJT (Transistor), MOSFET (MOS), JFET, IGBT, LEDs, Switches, Transmission Lines, and user libraries |
kicadLibrary/ |
KiCad schematic symbols (eSim-symbols/), footprint libraries (kicad_eSim-Library/), and project templates |
SubcircuitLibrary/ |
Reusable subcircuit definitions for common circuit blocks |
modelParamXML/ |
XML parameter definitions for device model editor forms |
ngspicetoModelica/ |
Mapping files for Ngspice-to-Modelica component translation |
browser/ |
HTML/resource files for the built-in help browser |
tlv/ |
TL-Verilog support files for Makerchip integration |
| Path | Description |
|---|---|
src/ngspice_ghdl.py |
Core interface: manages VHDL upload, GHDL compilation, and Ngspice code model creation |
src/model_generation.py |
Generates C code models from VHDL port definitions for Ngspice |
src/createKicadLibrary.py |
Auto-generates KiCad symbols from VHDL entity definitions |
src/ghdlserver/ |
GHDL foreign interface server for inter-process communication with Ngspice |
install-nghdl.sh |
Automated installer for NGHDL dependencies (GHDL, Verilator, Ngspice) |
Example/ |
Example VHDL models and mixed-signal simulation projects |
| Package | Version | Purpose |
|---|---|---|
PyQt6 |
β₯ 6.5.0 | GUI framework |
matplotlib |
3.7.5 | Waveform plotting |
numpy |
1.24.4 | Numerical computation |
scipy |
1.10.1 | Scientific computing |
pillow |
12.2.0 | Image processing |
hdlparse |
1.0.4 | HDL file parsing |
watchdog |
4.0.2 | File system monitoring |
pyparsing |
3.1.4 | Parser building toolkit |
| Platform | Method | Status |
|---|---|---|
| All Linux (Fedora, Ubuntu, openSUSE, Arch, etc.) | Flatpak | β Recommended |
| Ubuntu 22.04 / 23.04 / 24.04 LTS | Native Installer | β Supported |
| Windows 8 / 10 / 11 | Windows Installer | β Supported |
| Docker (any OS) | Docker Container | β Supported |
# 1. Install Flatpak (if not already installed)
# Fedora: sudo dnf install flatpak
# Ubuntu: sudo apt install flatpak
# openSUSE: sudo zypper install flatpak
# Arch: sudo pacman -S flatpak
# 2. Add Flathub repository
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# 3. Install eSim
flatpak install flathub org.fossee.eSim
# 4. Run eSim
flatpak run org.fossee.eSim
β οΈ Flatpak Limitations: NGHDL, Makerchip, and SKY130 PDK are not included in the Flatpak build. For full mixed-signal support, use the Ubuntu native installer.
# 1. Download and extract eSim
unzip eSim-2.5.zip
cd eSim-2.5
# 2. Install eSim with all dependencies
chmod +x install-eSim.sh
./install-eSim.sh --install
# 3. Run eSim
esim
# Or double-click the eSim desktop icon- Download the eSim installer from esim.fossee.in/downloads
- Disable antivirus temporarily (if required)
- Important: Remove MinGW/MSYS from the PATH environment variable if previously installed
- Run the installer and follow the on-screen instructions
- Launch eSim from the Start Menu or desktop shortcut
Refer to the Docker Launcher README for instructions on running eSim in a containerized environment.
cd eSim
flatpak-builder build flatpak/org.fossee.eSim.yml --install --userπ For comprehensive installation instructions, see the INSTALL file.
| Workflow | File | Purpose |
|---|---|---|
| Docker Image Build | .github/workflows/docker-image.yml |
Builds and publishes the eSim Docker image |
| Docker Launcher Build | .github/workflows/docker-launcher-build.yml |
Builds the cross-platform Python launcher |
| Ubuntu Release | .github/workflows/release_ubuntu.yml |
Automated Ubuntu .deb package builds |
| Packaging Format | Directory | Description |
|---|---|---|
| Flatpak | flatpak/ |
Universal Linux package via Flathub |
| AppImage | appimage/ |
Portable single-file Linux executable |
| Snap | snap/ |
Ubuntu Snap Store package |
| Docker | docker-launcher/ |
Containerized distribution with GUI forwarding |
eSim ships with 42 ready-to-simulate example projects in the Examples/ directory:
π Click to expand full example list
| # | Category | Example | Description |
|---|---|---|---|
| 1 | π Basic | RC |
RC circuit transient analysis |
| 2 | π Basic | RL |
RL circuit transient analysis |
| 3 | π Basic | RLC |
RLC circuit resonance analysis |
| 4 | π Basic | Series_Resonance |
Series RLC resonance |
| 5 | π Basic | Parallel_Resonance |
Parallel RLC resonance |
| 6 | π‘ Diodes | Diode_characteristics |
Diode I-V characteristics |
| 7 | π‘ Diodes | Halfwave_Rectifier |
Half-wave rectifier circuit |
| 8 | π‘ Diodes | Fullwavebridgerectifier |
Full-wave bridge rectifier |
| 9 | π‘ Diodes | Clippercircuit |
Diode clipper circuit |
| 10 | π‘ Diodes | Clampercircuit |
Diode clamper circuit |
| 11 | π‘ Diodes | Zener_Characteristic |
Zener diode characteristics |
| 12 | π BJT | BJT_CE_config |
BJT common-emitter configuration |
| 13 | π BJT | BJT_CB_config |
BJT common-base configuration |
| 14 | π BJT | BJT_amplifier |
BJT amplifier circuit |
| 15 | π BJT | BJT_Biascircuit |
BJT bias circuit design |
| 16 | π BJT | BJT_Frequency_Response |
BJT frequency response analysis |
| 17 | π FET | FET_Characteristic |
FET output characteristics |
| 18 | π FET | FET_Amplifier |
FET amplifier circuit |
| 19 | π FET | FrequencyResponse_JFET |
JFET frequency response |
| 20 | ποΈ Op-Amp | InvertingAmplifier |
Op-amp inverting amplifier (LM741) |
| 21 | ποΈ Op-Amp | Differentiator |
Op-amp differentiator circuit |
| 22 | ποΈ Op-Amp | Integrator_LM_741 |
Op-amp integrator |
| 23 | ποΈ Op-Amp | Precision_Rectifiers_using_LM741 |
Precision rectifier circuits |
| 24 | π² Digital | BasicGates |
Basic logic gates |
| 25 | π² Digital | Half_Adder |
Half-adder circuit |
| 26 | π² Digital | FullAdder |
Full-adder circuit |
| 27 | π² Digital | JK_Flipflop |
JK flip-flop circuit |
| 28 | π² Digital | 4_bit_JK_ff |
4-bit JK flip-flop counter |
| 29 | π² Digital | CMOS_NAND_Gate |
CMOS NAND gate |
| 30 | π² Digital | Analysis_Of_Digital_IC |
Digital IC analysis |
| 31 | β±οΈ Timers | Astable555 |
555 timer astable mode |
| 32 | β±οΈ Timers | Monostable555 |
555 timer monostable mode |
| 33 | π SCR | HalfwaveRectifier_SCR |
SCR half-wave rectifier |
| 34 | π SCR | FullwaveRectifier_SCR |
SCR full-wave rectifier |
| 35 | π‘ Filters | High_Pass_Filter |
High-pass filter design |
| 36 | π‘ Filters | Low_Pass_Filter |
Low-pass filter design |
| 37 | β‘ Regulators | 7805VoltageRegulator |
7805 voltage regulator |
| 38 | β‘ Regulators | 7812VoltageRegulator |
7812 voltage regulator |
| 39 | π Oscillators | UJT_Relaxation_Oscillator |
UJT relaxation oscillator |
| 40 | π Oscillators | Phase_Locked_Loop |
PLL circuit |
| 41 | π Mixed-Signal | Mixed_Signal |
Mixed analog-digital simulation (NGHDL) |
| 42 | π Power | Transformer |
Transformer circuit analysis |
We welcome contributions from the community! Whether it's bug fixes, new features, documentation improvements, or example circuits β every contribution matters.
flowchart LR
A["π΄ Fork<br/>Repository"] --> B["πΏ Create<br/>Branch"]
B --> C["π» Make<br/>Changes"]
C --> D["β
Commit &<br/>Push"]
D --> E["π¬ Open<br/>Pull Request"]
style A fill:#6c5ce7,color:#fff
style B fill:#00b894,color:#fff
style C fill:#0984e3,color:#fff
style D fill:#fdcb6e,color:#333
style E fill:#e17055,color:#fff
- Fork the repository to your GitHub account
- Clone your fork:
git clone https://github.com/<your-username>/eSim.git
- Create a new branch for your changes:
git checkout -b feature/your-feature-name
- Make your changes and commit with a descriptive message:
git add <files> git commit -m "Fixes issue #<number> - Brief description of changes"
- Push to your fork and open a Pull Request:
git push origin feature/your-feature-name
π Guidelines:
- Each PR should reference an existing issue
- One commit per pull request (squash if needed)
- Follow PEP 8 code style
- Include a commit body describing what you changed and why
For detailed contribution guidelines, see CONTRIBUTING.md.
A huge thank you to all 149+ amazing people who have contributed to eSim! π
![]() π₯ Sumanto Kar Lead Maintainer Β· 320 commits |
![]() π₯ Rahul Paknikar 265 commits |
![]() π₯ Fahim Khan 244 commits |
149+ contributors and counting! View all contributors β
| Channel | Link |
|---|---|
| π§ Email | contact-esim@fossee.in |
| π Website | esim.fossee.in |
| π¬ Forum | forums.fossee.in |
| π Contact Page | esim.fossee.in/contact-us |
| π User Manual | eSim Manual v2.5 (PDF) |
| π Developer Docs | esim.readthedocs.io |
Built with β€οΈ by the FOSSEE Team at IIT Bombay
β If you find eSim useful, consider giving it a star on GitHub!



