Apio wraps an FPGA toolchain in one pip install and four verbs
:seedling: Open source ecosystem for open FPGA boards
At a glance
- What is it?
- Apio is a Python command line tool for Verilog and SystemVerilog FPGA development that installs the toolchain for you, so a board project needs no toolchain setup, no licence and no makefile. It covers the ICE40, ECP5, Gowin and AMD/Xilinx 7 Series families across over 80 boards, and it is free and open source.
- Who is it for?
- Adopt Apio if you are doing FPGA work on a supported family and want the toolchain, the board definitions and the examples managed by a single pip installed tool, since the whole workflow fits into four commands. Do not adopt it if your design needs a vendor IDE feature or a device family Apio does not list, and check the licensing situation of the underlying tools before shipping.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The pitch is that there is no setup step
Apio is described as a command line tool for FPGA development from A to Z, and as simple to install with no toolchains, licences or makefiles required, working across Linux, Windows and macOS, and being fully open source and free to use. The gap it fills is specific. A normal FPGA flow involves installing a vendor toolchain, accepting a licence, learning a build system, and finding board definition files, and each of those is a barrier between someone and their first working design. Apio's contribution is to hide that layer behind a Python package that pulls what it needs when it needs it. The package manifest confirms the shape of the approach, since the runtime dependencies include the tool drivers themselves, with blackiceprog for one programmer, tinyfpgab and tinyprog for another, icefunprog for a third and apollo_fpga for a fourth, plus scons as the build engine and vcdvcd for reading simulation waveforms.
Four commands cover the whole flow
The sample session is the clearest description of the tool. You fetch an example with `apio examples fetch alhambra-ii/getting-started`, build it with `apio build`, inspect the result with `apio report` for utilisation and max clock speed, simulate it with `apio sim` to see the signals, and finally program the board with `apio upload`. The README describes the same verbs in general terms, saying the tool supports every stage of the FPGA workflow from simulating and testing to building and programming, using simple commands such as `apio test`, `apio build` and `apio upload` that do what you expect them to do. There is a screenshot of a GTKWave waveform next to the simulation example, which tells you the simulation side integrates with the usual waveform viewer rather than inventing a new one.
The supported silicon is listed and it is not everything
The description says Apio currently supports over 80 FPGA boards, that custom boards can be easily added, and that it includes over 60 ready-to-use example projects. The families it covers are the ICE40, ECP5 and Gowin architectures and the AMD/Xilinx 7 Series. The fact that those four families are named is the important part, because FPGA support is not a general capability but a per-family one, and a project that names its families is telling you where the boundaries are. The example named in the sample session, the Alhambra II getting started project, is one of the bundled examples, and the media section notes that a well known introductory FPGA video series is based on an older version of Apio CLI and the Icestick board, which is an ICE40 device. Boards outside the supported set, or a board you add yourself, are where you will hit the edges of the tool.
Board definitions and workflows live in separate repositories
The README badge list is a map of the whole project, and it shows an ecosystem rather than a single program. There is the CLI itself, with its test, build and docs workflows. There is a Visual Studio Code extension, apio-vscode, published to the marketplace as Apio IDE, with its own test and build workflows, and the README points to the Apio IDE page for installation while noting that the rest of the page describes the command line version. There is apio-definitions for the board definitions, with its own test and build pipelines. There is apio-workflows for shared CI. And there is a family of tools repositories, each with a build pipeline: tools-oss-cad-suite, tools-verible, tools-graphviz, tools-drivers and tools-openxc7. The naming tells you the structure, with the toolchain itself, the verilog linting, the diagram rendering, the programmers and the xc7 programming all packaged separately so they can be built and versioned on their own.
The Python package pins everything it depends on
The project file is unusually strict about versions, which is the right call for a tool that downloads a compiler. Every runtime dependency is pinned with an exact version rather than a range, from click 8.2.1 and colorama 0.4.6 through scons 4.8.1, rich 14.0.0, packaging 25.0 and requests 2.33.1, and the licence is declared as GPL-3.0-or-later with the licence file in the repository. Python 3.11 or newer is required, and the classifiers list 3.11 through 3.14, which is a recent floor for a tool that people install on whatever machine they have. The build backend is flit, and the version is read from a `__version__` string in the package's `__init__.py` rather than being duplicated in the manifest. The repository also carries a `tasks.py` invoke task file, a `tox.ini`, a `.pylintrc`, a `mkdocs.yml` for the documentation and a `remote-config/` directory, and the docs are published through a dedicated workflow.
Releases are dated, and the toolchain moves separately
The release tags are calendar dates rather than version numbers, with 2026-10-15, 2026-10-14 and 2026-10-13 appearing as the most recent three, and the last push to the main branch was on 2026-10-19. A date-based tag means you can always tell how fresh a given install is, which is useful for a tool that downloads compilers, and the daily cadence in that release list shows a project shipping often. What the tag does not tell you is which toolchain version the CLI will fetch, because the toolchain lives in the separate tools repositories and the OSS CAD Suite is itself a build artefact with its own pipeline. The package manifest also shows that the CLI is not the only distribution: the optional dependencies section is where the board specific and tool specific extras are declared, which is how a single CLI can support four different silicon families with four different programmers.
What Apio is not
Two limits are worth being explicit about. First, Apio is a driver for other tools, not a synthesis environment, so a design that needs a proprietary vendor feature, a vendor specific constraint file or a proprietary debug probe is outside what it can do. Second, the individual tools remain callable, and the project says so plainly by way of a user comment quoted in the README, that Apio is a command line tool that automates installing the toolchain for your FPGA and running it, and that you do not have to use it if you would rather call the individual tools. That is a healthy framing, because it means Apio is an accelerator rather than a walled garden, and it is also why the toolchain repositories are public and separately built. A project that wants the convenience but needs to drop to raw tool invocations for one step can do that without leaving the ecosystem.
Editorial conclusion
Adopt Apio if you are doing FPGA work on a supported family and want the toolchain, the board definitions and the examples managed by a single pip installed tool, since the whole workflow fits into four commands. Do not adopt it if your design needs a vendor IDE feature or a device family Apio does not list, and check the licensing situation of the underlying tools before shipping. Verify first which family your board uses, because the supported set is explicit, and pin the toolchain version you develop against, because the releases are dated by day rather than by semver and the toolchain it downloads is separate from the CLI itself.
Frequently asked questions
What is Apio CLI?
It is an open source Python command line tool for FPGA development with Verilog and System Verilog, described as simple to install with no toolchains, licences or makefiles required, and working across Linux, Windows and macOS.
Which commands run an Apio project?
The sample session fetches an example with `apio examples fetch alhambra-ii/getting-started`, then runs `apio build`, `apio report` for utilisation and max clock speed, `apio sim` to simulate and show signals, and `apio upload` to program the board. The README also mentions `apio test`.
Which FPGA families and boards does Apio support?
Apio supports the ICE40, ECP5 and Gowin architectures and the AMD/Xilinx 7 Series, over 80 boards in total, with custom boards able to be added. It also ships over 60 ready-to-use example projects.
How do I install Apio?
The package is published on PyPI as `apio` and the project file requires Python 3.11 or newer. It is built with flit and every runtime dependency is pinned to an exact version, including the FPGA programmer tools and scons as the build engine.
Is there a graphical version of Apio?
Yes, there is an Apio IDE extension for Visual Studio Code published in the marketplace as fpgawars.apio, developed in the apio-vscode repository. The README notes that the rest of the document describes the command line version.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/fpgawars-apio)Was this useful?