Arch: sudo pacman -S flatpak

June 9, 2026 · View on GitHub

eSim Logo

eSim — Electronic Circuit Simulation

An Open-Source EDA Tool for Circuit Design, Simulation, Analysis & PCB Design
Developed by FOSSEE Team at IIT Bombay

Release License Python PyQt6

Docs Forks Stars Issues PRs Welcome Contributors Code Style

FeaturesArchitectureInstallationProject StructureTech StackContributingLicense


📖 About

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


✨ Features

CategoryFeatureDescription
DesignSchematic CaptureDraw circuit schematics using KiCad's schematic editor with eSim's custom symbol libraries
ConversionKiCad to NgspiceConvert KiCad schematics to Ngspice-compatible netlists for simulation
SimulationNgspice EngineRun DC, AC, Transient, and other SPICE analyses with real-time interactive plots
AnalysisWaveform PlottingVisualize simulation results with matplotlib-based Python plots and Ngspice native plots
Model EditorDevice ModelsCreate and edit SPICE device models (Diodes, BJTs, MOSFETs, JFETs, IGBTs, etc.)
SubcircuitsSubcircuit BuilderBuild, manage, and upload reusable subcircuit blocks
Mixed-SignalNGHDL IntegrationInterface VHDL digital models (via GHDL) with analog Ngspice simulations
VerilogMakerchip + NgVeriUse Makerchip IDE for Verilog/TL-Verilog design and convert to Ngspice models
PCBLayout DesignDesign PCB layouts using KiCad's PCB editor with eSim's footprint libraries
ConvertersSchematic ImportConvert PSpice and LTSpice schematics/libraries to KiCad-compatible formats
ModelicaNgspice-to-ModelicaConvert Ngspice netlists to Modelica models for OpenModelica simulation
SKY130 PDKSkyWater 130nmSupport for SkyWater SKY130 open-source Process Design Kit
IHP PDKIHP OpenPDKIntegration with IHP SG13G2 open-source PDK for SiGe BiCMOS

🏗️ Architecture

High-Level System Architecture

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.


📂 Project Structure

Root Directory

PathTypeDescription
src/📁 DirectoryCore application source code — all Python modules for the eSim GUI and backend
library/📁 DirectoryComponent libraries — device models, KiCad symbols, subcircuits, and PDK data
nghdl/📁 DirectoryNGHDL module — Ngspice-GHDL interface for mixed-signal VHDL simulation
Examples/📁 Directory42 example projects — ready-to-simulate circuits (RC, BJT, Op-Amp, Mixed-Signal, etc.)
images/📁 DirectoryUI assets — application icons, toolbar images, logos, and splash screen
scripts/📁 DirectoryLaunch & setup scripts — shell scripts for Linux installation and launching
docs/📁 DirectorySphinx documentation — RST files for ReadTheDocs auto-generated developer docs
code/📁 DirectorySphinx autodoc config — mirrors src/ structure for API documentation generation
flatpak/📁 DirectoryFlatpak packaging — manifest and wrapper scripts for universal Linux distribution
appimage/📁 DirectoryAppImage packaging — build scripts for portable Linux AppImage bundles
docker-launcher/📁 DirectoryDocker support — Dockerfile, launcher script, and CI workflows for containerized builds
snap/📁 DirectorySnap packagingsnapcraft.yaml for building Snap packages
ihp/📁 DirectoryIHP PDK integration — install script for IHP SG13G2 open-source SiGe BiCMOS PDK
patches/📁 DirectorySource patches — patch files for modifying Ngspice/GHDL behavior in sandboxed environments
.github/📁 DirectoryGitHub config — issue templates, PR templates, and CI/CD workflow definitions
setup.py📄 FilePython package configuration for pip installation
requirements.txt📄 FilePython dependency list (PyQt6, matplotlib, numpy, scipy, etc.)
conf.py📄 FileSphinx documentation configuration
VERSION📄 FileCurrent version identifier (2.5)
INSTALL📄 FileDetailed multi-platform installation instructions
LICENSE📄 FileGNU General Public License v3.0

Source Code (src/) — Detailed Module Breakdown

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)

Library Directory (library/) — Component Libraries

PathDescription
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

NGHDL Module (nghdl/) — Mixed-Signal Interface

PathDescription
src/ngspice_ghdl.pyCore interface: manages VHDL upload, GHDL compilation, and Ngspice code model creation
src/model_generation.pyGenerates C code models from VHDL port definitions for Ngspice
src/createKicadLibrary.pyAuto-generates KiCad symbols from VHDL entity definitions
src/ghdlserver/GHDL foreign interface server for inter-process communication with Ngspice
install-nghdl.shAutomated installer for NGHDL dependencies (GHDL, Verilator, Ngspice)
Example/Example VHDL models and mixed-signal simulation projects

🛠️ Tech Stack

LayerTechnologyPurpose
LanguagePythonCore application logic
GUI FrameworkPyQt6Desktop GUI (windows, dialogs, toolbars, docks)
PlottingmatplotlibWaveform visualization and data plotting
NumericsNumPy SciPyNumerical computation and signal processing
Schematic & PCBKiCadSchematic capture and PCB layout design
SPICE SimulationNgspiceAnalog/mixed-signal circuit simulation engine
VHDL SimulationGHDLVHDL analysis, compilation, and simulation
VerilogVerilatorVerilog HDL simulation and model generation
HDL Cloud IDEMakerchipOnline Verilog/TL-Verilog IDE integration
ModelicaOpenModelicaMulti-domain modeling and simulation
PDKSkyWaterSkyWater 130nm open-source process design kit
PackagingFlatpak DockerCross-distribution Linux packaging & containers
DocumentationSphinx RTDAuto-generated developer documentation
CI/CDGitHub ActionsAutomated builds, Docker images, and releases

Key Python Dependencies

PackageVersionPurpose
PyQt6≥ 6.5.0GUI framework
matplotlib3.7.5Waveform plotting
numpy1.24.4Numerical computation
scipy1.10.1Scientific computing
pillow12.2.0Image processing
hdlparse1.0.4HDL file parsing
watchdog4.0.2File system monitoring
pyparsing3.1.4Parser building toolkit

💻 Installation

Supported Platforms

PlatformMethodStatus
All Linux (Fedora, Ubuntu, openSUSE, Arch, etc.)Flatpak✅ Recommended
Ubuntu 22.04 / 23.04 / 24.04 LTSNative Installer✅ Supported
Windows 8 / 10 / 11Windows 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.

🐧 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

🪟 Windows

  1. Download the eSim installer from esim.fossee.in/downloads
  2. Disable antivirus temporarily (if required)
  3. Important: Remove MinGW/MSYS from the PATH environment variable if previously installed
  4. Run the installer and follow the on-screen instructions
  5. Launch eSim from the Start Menu or desktop shortcut

🐋 Docker

Refer to the Docker Launcher README for instructions on running eSim in a containerized environment.

📦 Build from Source (Flatpak)

cd eSim
flatpak-builder build flatpak/org.fossee.eSim.yml --install --user

📖 For comprehensive installation instructions, see the INSTALL file.


🔄 CI/CD & Packaging

WorkflowFilePurpose
Docker Image Build.github/workflows/docker-image.ymlBuilds and publishes the eSim Docker image
Docker Launcher Build.github/workflows/docker-launcher-build.ymlBuilds the cross-platform Python launcher
Ubuntu Release.github/workflows/release_ubuntu.ymlAutomated Ubuntu .deb package builds
Packaging FormatDirectoryDescription
Flatpakflatpak/Universal Linux package via Flathub
AppImageappimage/Portable single-file Linux executable
Snapsnap/Ubuntu Snap Store package
Dockerdocker-launcher/Containerized distribution with GUI forwarding

📋 Example Projects

eSim ships with 42 ready-to-simulate example projects in the Examples/ directory:

📂 Click to expand full example list
#CategoryExampleDescription
1🔌 BasicRCRC circuit transient analysis
2🔌 BasicRLRL circuit transient analysis
3🔌 BasicRLCRLC circuit resonance analysis
4🔌 BasicSeries_ResonanceSeries RLC resonance
5🔌 BasicParallel_ResonanceParallel RLC resonance
6💡 DiodesDiode_characteristicsDiode I-V characteristics
7💡 DiodesHalfwave_RectifierHalf-wave rectifier circuit
8💡 DiodesFullwavebridgerectifierFull-wave bridge rectifier
9💡 DiodesClippercircuitDiode clipper circuit
10💡 DiodesClampercircuitDiode clamper circuit
11💡 DiodesZener_CharacteristicZener diode characteristics
12🔋 BJTBJT_CE_configBJT common-emitter configuration
13🔋 BJTBJT_CB_configBJT common-base configuration
14🔋 BJTBJT_amplifierBJT amplifier circuit
15🔋 BJTBJT_BiascircuitBJT bias circuit design
16🔋 BJTBJT_Frequency_ResponseBJT frequency response analysis
17📟 FETFET_CharacteristicFET output characteristics
18📟 FETFET_AmplifierFET amplifier circuit
19📟 FETFrequencyResponse_JFETJFET frequency response
20🎛️ Op-AmpInvertingAmplifierOp-amp inverting amplifier (LM741)
21🎛️ Op-AmpDifferentiatorOp-amp differentiator circuit
22🎛️ Op-AmpIntegrator_LM_741Op-amp integrator
23🎛️ Op-AmpPrecision_Rectifiers_using_LM741Precision rectifier circuits
24🔲 DigitalBasicGatesBasic logic gates
25🔲 DigitalHalf_AdderHalf-adder circuit
26🔲 DigitalFullAdderFull-adder circuit
27🔲 DigitalJK_FlipflopJK flip-flop circuit
28🔲 Digital4_bit_JK_ff4-bit JK flip-flop counter
29🔲 DigitalCMOS_NAND_GateCMOS NAND gate
30🔲 DigitalAnalysis_Of_Digital_ICDigital IC analysis
31⏱️ TimersAstable555555 timer astable mode
32⏱️ TimersMonostable555555 timer monostable mode
33🔁 SCRHalfwaveRectifier_SCRSCR half-wave rectifier
34🔁 SCRFullwaveRectifier_SCRSCR full-wave rectifier
35📡 FiltersHigh_Pass_FilterHigh-pass filter design
36📡 FiltersLow_Pass_FilterLow-pass filter design
37⚡ Regulators7805VoltageRegulator7805 voltage regulator
38⚡ Regulators7812VoltageRegulator7812 voltage regulator
39🌀 OscillatorsUJT_Relaxation_OscillatorUJT relaxation oscillator
40🌀 OscillatorsPhase_Locked_LoopPLL circuit
41🔀 Mixed-SignalMixed_SignalMixed analog-digital simulation (NGHDL)
42🔌 PowerTransformerTransformer circuit analysis

🤝 Contributing

We welcome contributions from the community! Whether it's bug fixes, new features, documentation improvements, or example circuits — every contribution matters.

How to Contribute

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
  1. Fork the repository to your GitHub account
  2. Clone your fork:
    git clone https://github.com/<your-username>/eSim.git
    
  3. Create a new branch for your changes:
    git checkout -b feature/your-feature-name
    
  4. Make your changes and commit with a descriptive message:
    git add <files>
    git commit -m "Fixes issue #<number> - Brief description of changes"
    
  5. 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.


👥 Contributors

A huge thank you to all 149+ amazing people who have contributed to eSim! 🎉

Sumanto Kar
🥇 Sumanto Kar

Lead Maintainer · 320 commits
Rahul Paknikar
🥈 Rahul Paknikar

265 commits
Fahim Khan
🥉 Fahim Khan

244 commits

Contributors

149+ contributors and counting! View all contributors →


📞 Contact & Support

ChannelLink
📧 Emailcontact-esim@fossee.in
🌐 Websiteesim.fossee.in
💬 Forumforums.fossee.in
📞 Contact Pageesim.fossee.in/contact-us
📄 User ManualeSim Manual v2.5 (PDF)
📚 Developer Docsesim.readthedocs.io

Built with ❤️ by the FOSSEE Team at IIT Bombay

FOSSEE Logo      IIT Bombay Logo

⭐ If you find eSim useful, consider giving it a star on GitHub!