Skip to content

canmi21/openjlc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logo

OpenJLC



Linux Windows

As they say, your design workflow shouldn't be bogged down by tedious format conversions! OpenJLC simplifies Gerber to JLC conversion from AD, KiCad, and more. Effortlessly convert, share, and design.

👋🏻 Getting Started

Whether for users or professional developers, OpenJLC will be your open information playground. Please be aware that OpenJLC is currently under active development, and feedback is welcome for any issue encountered.

Feel free to try it using the following methods:

🚀 Install via Cargocargo install openjlc
📦 Arch Linux AURInstall via: yay -S openjlc
❇️ Cross-platform buildsPrebuilt binaries for Linux, Windows, macOS available on releases
⚡️ Run directlyopenjlc file.zip or path_to_file/file.zip
🗂️ Supported input formatsKiCad, Altium Designer, EasyEDA — and more on the way!
🛠️ Gerber analyzerAuto label output file with -{detected-eda}-L{layer}
🔄 Fast updatesTrack latest changes via ci
📣 Contribute / FeedbackCreate issues, pull requests, or just ⭐ the repo to support us!

⚡️ Lightning-Fast Speed

Powered by Rust's high performance, OpenJLC can convert an 8-layer PCB from Altium in under 500ms.

OpenJLC Speed Benchmark

🧩 Uniform Output Naming

We provide powerful regular expression rules to auto-analyze and rename output files, giving you a clean and consistent output structure.

Auto Output Naming

🛠️ Extra Drill File Handling

Unlike other conversion tools, OpenJLC supports auto-detection and classification of drill files — no manual steps required.

Altium

Drill_NPTH_Through: "(?i).*slot\\s?h?oles.*\\.txt$"
Drill_PTH_Through: "(?i).*round\\s?h?oles.*\\.txt$"
Drill_PTH_Through_Via: "(?i)\\.REP$|.*via.*\\.txt$"
Drill_PTH_Through_GBR: "(?i)\\.GD1$"
Drill_PTH_Through_Via_GBR: "(?i)\\.GG1$"

KiCad

Drill_PTH_Through: "(?i)(?!.*NPTH).*\\.DRL$"
Drill_PTH_Through_Via: "(?i).*\\bVIA\\b.*\\.DRL$"
Drill_NPTH_Through: "(?i).*\\bNPTH\\b.*\\.DRL$"
Drill_PTH_Through_GBR: "(?i)^[^N]*PTH[^N]*\\.GBR$"
Drill_PTH_Through_Via_GBR: "(?i).*\\bVIA\\b.*\\.GBR$"
Drill_NPTH_Through_GBR: "(?i).*\\bNPTH\\b.*\\.GBR$"

🖱️ Right-Click Integration on Windows

On Windows, OpenJLC supports seamless right-click processing for .zip Gerber archives. With just one click, you can get clean and correctly named outputs — even after processing by the Windows file system.

Windows Context Menu Integration - Step 1 Windows Context Menu Integration - Step 2

📦 Easy GUI Installer for Windows

We offer a dedicated Windows GUI installer to simplify setup. With just a few clicks, you can install, update, or uninstall OpenJLC — all without touching the command line.

❓ FAQ

Q: PowerShell says openjlc is not recognized as a command?
A: This usually means the OpenJLC installation path is not added to your system's environment variables.
Please follow the instructions shown in the image below to add it. Restart PowerShell after applying the changes.

Q: What if I'm using Linux or macOS?
A: Make sure the Cargo binary directory (usually $HOME/.cargo/bin) is added to your shell's environment variables.
For example, if you're using bash, zsh or fish, you can add the following line to your ~/.bashrc, ~/.zshrc ~/.config/fish/config.fish file:

export PATH="$HOME/.cargo/bin:$PATH"

Then reload your shell or run:

source ~/.bashrc   # or source ~/.zshrc

If you're using fish shell, add the path like this:

set -U fish_user_paths /home/canmi/.cargo/bin $fish_user_paths

And reload the config:

source ~/.config/fish/config.fish

⭐ Contribute

If you are just a user of OpenJLC, please give us a Star. If you’d like to participate in development, you can consider the following steps:
The main program is written in Rust:

cargo run
cargo build
cargo install --path .

The Windows installer is written in Go:

GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -x -ldflags="-H=windowsgui" -o installer.exe

Additionally, there is an old version written in Python here. The source code is still visible but is no longer maintained or used.

✨ Star History

Star History Chart