Freerouting v2.0.0
This is one of the biggest updates in Freerouting's history! I’ve volunteered 220 hours into this release, and I truly hope you enjoy it!
What’s new? A lot! Let’s dive in:
GUI Upgrade
In v1.9, I introduced anonymous telemetry, which helped me understand which features users rely on most. Based on that data, I’ve revamped the user interface, making it sleeker and more modern. A few features (like context-aware help, select mode, macros, and snapshot management) have been disabled and will be fully removed in future releases.
- Menus have been rearranged and simplified for better usability.
- New icons, mode selectors, and unit controls have been added.
- Several router settings windows have been combined, and I plan to streamline them even further based on what settings are actually used.
- Warnings and error indicators have been modernized and are now displayed in the bottom right corner.
- A new User Settings window allows you to configure telemetry and contact preferences.
- Freerouting now has a refreshed color palette that aligns with KiCad’s modern look. While the palette remains customizable, the color editor will be removed in the next release.
Configuration framework
A brand-new configuration framework unifies how users set preferences. Now, you can choose from multiple methods: freerouting.json
configuration file, environment variables, command line arguments, or GUI.
- Configuration file: Modify the
freerouting.json
file directly. - Environment variables: Override configuration settings with variables in the format FREEROUTING__{key}__{subkey}. For example, FREEROUTING__ROUTER__MAX_PASSES=20 changes the maximum passes to 20.
- Command line arguments: Adjust settings like --router.max_passes=10 to control the number of allowed passes.
- GUI: If enabled, certain settings can be tweaked directly through the interface.
Check out its documentation for more details.
Improved Localization
Localization has been overhauled. Previously, short text fragments were combined programmatically, which caused issues with non-English languages. Now, we use whole sentence templates with placeholders, offering more flexibility for translators. For example, "Saving Specctra session '{{filename}}' was successful."
gives more control to translators, ensuring better results for all languages.
Additionally, I've added fallback mechanisms and generalized support for labels, buttons, and text boxes across the entire UI.
Routing job scheduler
I introduced a multi-threaded routing job scheduler. It is responsible for managing and executing the routing jobs of Freerouting. This improvement enables us to run routing jobs in parallel. This was a crucial prerequisite for the API to work, but it will also let GUI users run and monitor long-running jobs in the background.
Public API (beta)
The Freerouting API is now publicly available at https://api.freerouting.app/v1. This involved a huge backend refactor and opens the door to tighter integration with EDAs like KiCad, EasyEDA, and tscircuit.
The API and its documentation are still evolving, with close collaboration from the tscircuit team to make it as useful as possible.
CLI interface
Freerouting now natively supports headless operation, allowing you to access its functionality via the command line, without needing a graphical interface. You can run Freerouting in CLI mode by setting the gui.enabled
setting to false
.
Unit Tests
I’ve introduced unit testing for evaluating DSN files before accepting new commits. This helps ensure new features or contributions don’t introduce bugs. It supports testing in local environments, via GitHub Actions, and Docker.
Docker support
Freerouting now supports Docker! The container is compatible with both ARM64 and x64 platforms, and it works on Microsoft Azure.
Personal notes
I know release notes are usually impersonal, but we’re all geeks here, so let me get a bit personal. :) I love Freerouting because it gives time back to people who love to build. When it works, it’s amazing. But sometimes it doesn’t, and I know the frustration that comes with it.
I work hard to make it better, but sometimes other projects, or life gets in the way. Being an open-source maintainer isn’t easy—issues pile up, and there’s never enough time. It's a race that never ends, and it’s both exhilarating and exhausting.
I’ll be taking a short break for a few months, but I’ll be back. Please continue to post issues and pull requests, and I’ll get to them as soon as I can.
Sponsors
A heartfelt thank you to my sponsors for their invaluable support and motivation, which enables me to continue volunteering as the sole developer and maintainer of Freerouting.
Special thanks to @tscircuit (and @seveibar) for your ongoing generosity!
I’d also like to acknowledge past sponsors: @cpyne, @rozza-m, and @Digilent. Your support has been essential to this project.
Last but definitely not least, I'd like to thank my family for tirelessly accepting that when I said, "Just another 5 minutes for this quick fix," it often meant they'd see me hours later. Their patience as they waited again and again for me to finish up and join them is truly heroic. Hearts to my lovely wife—you kept me alive with fantastic food despite my best efforts to subsist solely on caffeine and code during those intense programming marathons.
Since I’m currently the only active contributor to Freerouting, even a small monthly contribution would be greatly appreciated. If you’d like to support this project, please consider sponsoring me: GitHub Sponsors. Thank you!
Statistics
Here are the v1.9 statistics from the period of 1st November 2023 and 24th October 2024.
Language
Operating System
Java Version
What's Changed
- fixed some chinese translation by @Djzhan0207 in #291
- Display-hover-info by @Djzhan0207 in #296
- Chinese Translation Update By L1uTongwei by @L1uTongweiNewAccount in #307
- Add Traditional Chinese (Taiwan) translations by @Oliver0804 in #314
- Freerouting daemon & progress update by @L1uTongweiNewAccount in #313
- fix: export for dto added, required when only API is run by @imrishabh18 in #342
New Contributors
- @Djzhan0207 made their first contribution in #291
- @L1uTongweiNewAccount made their first contribution in #307
- @Oliver0804 made their first contribution in #314
- @imrishabh18 made their first contribution in #342
Full Changelog: v1.9.0...v2.0.0