A Linux desktop app for managing a practical SKY130 workflow from a single interface.
It does not replace xschem, magic, ngspice, netgen, or klayout. It coordinates them, keeps outputs organized, and gives you a cleaner workflow for schematic, post-layout, and validation tasks.
The environment diagnostics are intentionally strict:
- base EDA tools are validated separately from the SKY130 PDK
netgen-lvsis accepted as a valid Ubuntu-provided Netgen binary- tool versions are checked against a declared minimum, so Ubuntu's Magic 8.3.105 and Netgen 1.5.133 are reported as too old rather than passing silently
- a Python environment that is not owned and writable by the desktop user is reported explicitly
- missing Qt/X11 runtime libraries for PySide6 are flagged before the GUI starts, and skipped on Wayland where they are not used
- Simulation with waveform and spectrum viewing
- Post-layout extraction flow with Magic
- LVS flow with Netgen
- Antenna check flow with KLayout
- EM sizing support from waveform data
- Project-aware output management under
runs/ - Persistent preferences and recent projects
- Setup Assistant for validating and bootstrapping the environment on Ubuntu
The app currently includes:
- Left-side navigation
- Light, dark and follow-the-system themes
- Collapsible simulation panels
- Post-layout wrapper controls for:
- initial conditions
- no load / capacitive load / series RC load
- Waveform and frequency-spectrum viewers
- Setup wizard for:
- reviewing the system
- installing core tools on Ubuntu
- applying detected paths
- final validation
Simulación / SimulationLVSExtracción / ExtractionAntena / AntennaEMEntorno / SetupProyecto / ProjectPreferencias / Preferences
sudo apt install ./sky130-flow-gui_0.3.0_amd64.deb
sky130-flow-guiThe package bundles its own Python runtime, but prefers a user-owned environment at
~/.local/share/sky130-flow-gui/venv when one exists. That environment is created and
repaired from the app, without root, so a system Python upgrade cannot strand it.
python3 -m venv ~/.local/share/sky130-flow-gui/venv
~/.local/share/sky130-flow-gui/venv/bin/python -m pip install -r requirements.txt
~/.local/share/sky130-flow-gui/venv/bin/python -m app.mainCreate it as your normal user. Never build or repair it with sudo or pkexec; the app
refuses to do so itself.
You can also manage it from the command line:
python3 -m app.core.python_env diagnose
python3 -m app.core.python_env repairIf the GUI already opens, go to ⚙ Preferencias → Entorno and follow the wizard.
The Ubuntu bootstrap installs system packages plus a current upstream Magic build:
xschem,ngspice,netgen-lvs,klayoutfrom aptmagicbuilt from the official repository at tag8.3.684into/usr/local/binpython3,python3-pip,python3-venv- Qt runtime libraries for PySide6
On GCC 15 (the Ubuntu 26.04 default) the Magic build is configured with -std=gnu17,
because the compiler's C23 default rejects constructs the sources still use.
It does not touch the Python environment. Prepare that afterwards as the normal user.
Ubuntu ships Magic 8.3.105, which current SKY130 techfiles reject outright. To repair an existing machine manually:
bash scripts/install_magic_ubuntu.sh
/usr/local/bin/magic --versionThen set the Magic executable in Preferences to /usr/local/bin/magic if which magic
still resolves to /usr/bin/magic.
The PDK is not bundled with this app. The recommended route uses the upstream prebuilt builds published by the FOSSi Foundation:
bash scripts/install_sky130_pdk_ciel.shThis installs the ciel PDK manager for the current user and enables the open_pdks build
pinned in app/data/dependency_manifest.json. Available builds are listed at
https://github.com/fossi-foundation/ciel-releases/releases.
To build from source instead:
bash scripts/build_sky130_pdk_from_sources.shThe app works best when these are available:
- Linux desktop session
xschemngspicemagicnetgenornetgen-lvsklayoutPDK_ROOTSKY130A
The Setup Assistant can detect common installations and apply discovered paths automatically.
Important:
- the tool bootstrap is implemented for Ubuntu/Debian-style systems using
aptplus the official Magic source release - installing apt packages does not install the SKY130 PDK automatically
- Ubuntu ships Magic 8.3.105, too old for current SKY130 techfiles; use
scripts/install_magic_ubuntu.shwhen the validator reports a Magic/PDK incompatibility - the validator looks for
sky130AinPDK_ROOT,/usr/local/share/pdk,/usr/share/pdk,~/pdk,~/.volare, and~/eda/pdk - the app checks
sky130A/libs.tech/magic,netgen,klayout,ngspice, andxschemseparately, so an incomplete PDK is reported as incomplete rather than OK - the Python environment lives under
~/.local/share/sky130-flow-gui/venv, so a read-only/optinstall is not a problem - if that environment belongs to another user, the validator reports it explicitly instead of treating it as healthy
- final foundry signoff is still outside the scope of this GUI
On a Wayland session (the Ubuntu default) Qt loads the wayland platform plugin and
the xcb helper libraries below are not needed. The startup check knows this and skips
them; earlier versions refused to start on a perfectly working Wayland desktop.
On an X11 session, installing PySide6 with pip is not sufficient on a clean Ubuntu
desktop if Qt/X11 runtime libraries are missing. A common failure mode is:
- Qt finds the
xcbplatform plugin - the plugin still fails to load
- the process exits because libraries such as
libxcb-cursor0are missing
The bootstrap installs the common runtime packages needed to avoid that first-run failure on Ubuntu. If you are setting up the environment manually, install at least:
libxcb-cursor0libxkbcommon-x11-0libxcb-xkb1libxcb-xfixes0libgl1
The bootstrap also installs extra compatibility packages that are often helpful on clean or minimal systems:
libxcb-xinerama0libxcb-icccm4libxcb-image0libxcb-keysyms1libxcb-render-util0libxcb-randr0libxcb-shape0
From the repository root:
python -m app.mainIf you are using a virtual environment:
source ~/.local/share/sky130-flow-gui/venv/bin/activate
python -m app.mainThe app now supports a more practical post-layout workflow:
- normalizes project roots correctly
- keeps extracted and simulation outputs under the main project
runs/ - detects top cells from
mag/ - can send extracted netlists directly to Simulation
- can build a post-layout simulation wrapper automatically for Tiny Tapeout-style blocks
Wrapper options include:
- use initial conditions
- no load
- capacitive load
- series RC load
Generated files are stored in the active project when a project is selected:
runs/logsruns/resultsruns/lvsruns/extractionruns/antenna
If no project is selected, the app falls back to repository-local workspace/ directories.
The ⬢ Entorno / Setup tab is the recommended starting point on a new machine.
It provides:
- System review
- Ubuntu tool installation
- Automatic path application
- Final validation
It also summarizes readiness for:
- Tools
- PDK
- Python
- Overall environment
The validator distinguishes between:
- tool not installed
- tool installed under an alternate binary name such as
netgen-lvs - SKY130 PDK absent
- SKY130 PDK incomplete
- the user Python environment missing, owned by another user, or not writable
The Preferencias / Preferences tab is still the place for:
- fine-tuning tool paths
- adjusting PDK paths
- validating the environment manually
- updating the local installation
- installing the desktop launcher/icon
The EM sizing flow is a support tool for estimating routing decisions from current waveforms.
It can:
- load current waveform files
- compute current metrics
- suggest routing widths and via counts
It is not foundry-qualified EM signoff.
From Preferences, use Install application icon.
That creates:
~/.local/bin/sky130-flow-gui~/.local/share/applications/sky130-flow-gui.desktop~/.local/share/icons/hicolor/scalable/apps/sky130-flow-gui.svg
The repository now includes a base .deb packaging flow for Ubuntu/Debian systems.
Build it from the repo root:
./scripts/build_deb.shBy default, the package version is read from the repo VERSION file.
Or specify version and architecture explicitly:
./scripts/build_deb.sh 0.3.0 allThe generated package is written to:
dist/sky130-flow-gui_<version>_<arch>.deb
Install it with:
sudo dpkg -i dist/sky130-flow-gui_<version>_<arch>.debWhat this package does:
- installs the app under
/opt/sky130-flow-gui - installs a launcher under
/usr/bin/sky130-flow-gui - installs a desktop entry and icon
What it does not do by itself:
- install the full SKY130 PDK in every environment
- guarantee that
/opt/sky130-flow-guiis writable by the current desktop user - repair a Python environment owned by another user
- replace the Setup Assistant
- replace the Ubuntu bootstrap for the VLSI toolchain
Recommended flow after installing the .deb:
- Launch the app
- Open
⬢ Entorno / Setup - Complete the setup wizard
- Validate the environment before running extraction or simulation
Releases up to v0.2.0 published a tt-pdk-sky130a tarball produced by archiving the
maintainer's own ~/pdk/sky130A. That is no longer done: the archive was not
reproducible, it captured whatever local modifications happened to be present, and it
pinned everyone to one workstation's state.
The download route in the Setup Assistant is disabled in the shipped manifest, and the assistant explains why. Use the prebuilt upstream PDK or a source build instead.
If you do want to publish a bundle, scripts/build_sky130_pdk_bundle.sh builds one from a
clean open_pdks checkout, refuses to package an in-use PDK root, and writes a
BUNDLE_PROVENANCE.txt recording the open_pdks ref, the Magic version used, and the
build date:
./scripts/build_sky130_pdk_bundle.sh stableRecord the printed SHA-256 in app/data/dependency_manifest.json and re-enable the bundle
route only once the asset is actually uploaded.
app/
core/ environment probing, settings, manifest, runners, waveform parsing
data/ dependency_manifest.json: tool pins, PDK routes, version floors
resources/ branding assets
runners/ command construction per tool
services/ EM sizing
ui/ tabs, theme tokens, waveform viewer
packaging/ Debian desktop entry
scripts/ Ubuntu bootstrap, Magic build, PDK installers, .deb build
tests/
requirements.txt
CHANGELOG.md
README.md
python3 -m unittest discover -s tests -t .Qt-dependent tests run headless through QT_QPA_PLATFORM=offscreen.
Every push and pull request runs the suite on Python 3.12 and 3.14, checks the
shell scripts, validates app/data/dependency_manifest.json, and builds the
Debian package — which also fails if a maintainer-built PDK bundle ever
reappears inside it.
- The Ubuntu bootstrap does not guarantee a fully automatic SKY130 PDK installation on every machine.
- Some flows still depend on the user having a valid external installation of the VLSI toolchain.
- If you add a dedicated squirrel PNG for splash/branding, place it under
app/resources/so startup code can resolve it independently of the current working directory. The current fallback asset isapp/resources/sky130-flow-gui.svg. - This app improves workflow management; it is not a replacement for signoff flows or foundry-qualified verification.
- The
.debpackaging flow is designed for Ubuntu/Debian and assumesdpkg-debis available on the build machine. - The published
.debbundles a Python 3.14 runtime and is built on Ubuntu 26.04 LTS. On an older Ubuntu, install from source instead.
If you are using the project on a fresh Ubuntu machine:
- Open
⬢ Entorno / Setup - Run the wizard
- Review
Preferencesonly if something still needs manual tuning - Select a project
- Start from
ExtractionorSimulation