βββββββββββββββββββββββ βββββββ βββββββ βββββββββ βββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββ βββββ βββββββββββββββββββ βββ βββ βββ βββ
ββββββ βββββ βββββββ βββββββββββ βββ βββ βββ βββ
βββββββββββββββββββ βββ ββββββββββββ βββ βββββββββ
βββββββββββββββββββ βββ βββ βββββββ βββ βββββββ
EZProto is a Textual-based protoboard generator that can run either as a native terminal app or as the same Textual app served in a browser via ezproto --web.
A quick shortcut button is included for fabrication at PCBWay
PCBWay is a professional PCB manufacturing and prototyping service that offers fabrication, assembly, solder paste stencils, CNC machining, 3D printing, and other rapid prototyping services. Their platform makes it easy for engineers, makers, and developers to turn electronic designs into physical boards and prototypes, from small experimental PCBs to more advanced manufacturing projects.
EZProto is proudly sponsored by PCBWay.
The app is focused on the PROTOBOARD workflow:
- Generate plated through-hole pad grids
- Add optional corner mounting holes
- Create square or rounded board outlines
- Optionally export a simple Gerber + drill fabrication package
- Save default theme choice, and generated-board history
- Dual launch modes:
- Native Textual terminal UI via
ezproto - Browser mode via
ezproto --web
- Native Textual terminal UI via
- Native KiCad PCB output in text-based
.kicad_pcbformat - Parametric board sizing from rows, columns, pitch, and margins
- PTH drill and pad diameter control
- Optional corner mounting holes
- Optional rounded corners with geometry validation
- Terminal-friendly board preview inside the app
- Browser mode via
textual-servewith automatic browser launch - User profiles and app state stored in a per-user EZProto data directory
- Optional DFM export with Gerber, drill, and ZIP packaging options
Make it with PCBWay!shortcut to PCBWay Quick QuoteReset formconfirmation flow before clearing protoboard inputs
- Python
3.12or newer pipxfor the recommended user install- A terminal that can run Textual apps for CLI mode
- A modern web browser for browser mode
- KiCad is not required to generate files, but you will want KiCad installed to open and inspect the generated
.kicad_pcbfiles
Install EZProto from GitHub with pipx:
pipx install git+https://github.com/diedasman/EZProto.gitThen run it from any terminal:
ezprotoBrowser mode is available with:
ezproto --webpipx installs Python command-line apps into isolated environments and exposes their commands globally, which keeps EZProto separate from your system Python packages.
If pipx is not installed yet, install it first:
python -m pip install --user pipx
python -m pipx ensurepathClose and reopen your terminal after ensurepath, then run the EZProto install command above.
After EZProto is published to PyPI, the install command will become:
pipx install ezprotoUse this path only if you want to work on the source code.
git clone https://github.com/diedasman/EZProto.gitcd EZProtoImportant: every development install command below assumes your terminal is inside the project root, the folder that contains pyproject.toml.
Windows PowerShell:
python -m venv .venv.venv\Scripts\Activate.ps1Windows Command Prompt:
python -m venv .venv.venv\Scripts\activate.batLinux / macOS:
python3 -m venv .venvsource .venv/bin/activatepython -m pip install --upgrade pippython -m pip install -e .This installs the ezproto command from the local source tree in editable mode.
For development and tests, install the dev extra:
python -m pip install -e ".[dev]"git clone https://github.com/diedasman/EZProto.git
cd EZProto
python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install -e .
ezprotoIf you are opening the project in VS Code, select the virtual environment interpreter after installation:
- Open the command palette.
- Run
Python: Select Interpreter. - Choose
.venv\Scripts\python.exeon Windows or.venv/bin/pythonon macOS/Linux.
This helps VS Code resolve the textual imports and the local src package correctly.
From anywhere after installation:
ezprotoAlternative:
python -m ezprotoServe the Textual app in your browser:
ezproto --webAlternative:
python -m ezproto --webBrowser mode serves the Textual app itself on http://localhost:8000 by default and opens your browser automatically.
To bind a different interface or port:
ezproto --web --host 0.0.0.0 --port 8000You do not need to run EZProto from the project root. By default it stores local data in a per-user application data folder:
- Windows:
%APPDATA%\EZProto - macOS:
~/Library/Application Support/EZProto - Linux:
$XDG_DATA_HOME/EZProtoor~/.local/share/EZProto
If you already used an older repo-root layout, EZProto will migrate that data to the new location the first time it starts.
If you installed EZProto with pipx, update it with:
pipx upgrade ezprotoIf you installed from GitHub before a PyPI release and pipx upgrade cannot resolve the source, reinstall from GitHub:
pipx reinstall ezproto --spec git+https://github.com/diedasman/EZProto.gitFor development installs from a local git checkout, you can update with:
ezproto updateThe update command:
- verifies that EZProto is backed by a git checkout
- stops if that checkout has local uncommitted changes
- runs
git pull --ff-only - refreshes the editable install with your current Python environment
If your development install was not backed by a git checkout, re-clone the repository and reinstall with:
python -m pip install -e .When the app opens:
- Go to the
SETTINGStab. - Set a custom output directory if you do not want the built-in default path.
- Pick a Textual theme if you want.
- Save the workspace settings.
- Return to
PROTOBOARD.
EZProto restores the saved workspace settings on the next launch.
Fill in the board parameters:
Board nameColumnsRowsPitch (mm)PTH drill (mm)Pad diameter (mm)Mount hole (mm)Edge margin (mm)Rounded corners
You can also use the pitch preset buttons:
1 mm2 mm2.54 mm5.08 mm
If Mount hole is set to 0, corner mounting holes are disabled.
If Generate Gerbers is enabled before pressing Generate PCB, EZProto will create Gerber outputs in addition to the KiCad board file.
Optional DFM export controls:
Include drill fileadds the plated drill file to the DFM package..ZIP archivecreates a*_DFM.ziparchive next to the DFM folder.
Protoboard actions:
Generate PCBwrites the KiCad board file and optional DFM outputs.Make it with PCBWay!opens PCBWay Quick Quote in your browser.Reset formopens a confirmation screen before clearing the current protoboard inputs.
The right side of the PROTOBOARD tab shows:
- A summary of the current board parameters
- The resolved output paths
- A terminal-friendly board preview
- Status messages after generation
For a board named My Proto Board, EZProto writes:
<configured output directory>/
My Proto Board/
My_Proto_Board.kicad_pcb
My_Proto_Board_DFM/
My_Proto_Board_F_Cu.gbr
My_Proto_Board_B_Cu.gbr
My_Proto_Board_F_Mask.gbr
My_Proto_Board_B_Mask.gbr
My_Proto_Board_Edge_Cuts.gbr
My_Proto_Board.drl
My_Proto_Board_DFM.zip
Notes:
- The folder name matches
Board nameexactly. - The file stem replaces spaces with underscores.
- Gerber files are only created when
Generate Gerbersis checked. - The drill file is only created when
Include drill fileis checked. - The ZIP archive is only created when
.ZIP archiveis checked.
EZProto stores workspace metadata locally inside its per-user data directory:
app_state.json- default output directory override
- theme
- last generated board
- saved board history
- event log
If you already have older users/*.json profile data, EZProto migrates the latest active profile details into app_state.json automatically.
You can override the storage location for development or portable installs by setting EZPROTO_DATA_DIR before launching EZProto.
Example:
$env:EZPROTO_DATA_DIR = "D:\EZProtoData"
ezprotoBoard history is only updated after a successful KiCad PCB write.
If the same board name is generated again, its saved metadata entry is overwritten with the latest details.
Run the test suite:
python -m unittest discover -s tests -vQuick syntax/compile check:
python -m compileall src tests- Dual launch modes: terminal UI and browser-served UI
- Protoboard PCB generation
- Simple Gerber, drill, and ZIP export
- User profiles and app state persistence
- Theme selection
- Board preview (ASCII)
Planned / in progress:
- 3D export workflow
- More advanced fabrication output and board features



