Show HN: KiCad in the Browser
demo.pcbjam.comKiCad, a PCB EDA suite is now working in a browser, you can try it at the link, there's a demo project or you can bring your own. Firefox is best, Chrome is good, Safari is "working".
We’re Emergence Engineering, a dev shop from Hungary, mostly working with rich text editors, CRDTs. PCBJam started as my (Viktor, CTO, ex-electrical engineer) hobby project but as time went on I put more and more energy into it, and a product started shaping up in my head, in the last few months we’ve started to focus on this project a bit more, and this is the first MVP~ish result.
This project is a ton of fun, ton of learning, ton of improvements over improvements:
- I thought there must be ways to emulate the PCB canvas OpenGL code on the web. And yes, there are a lot of ways, all of them very buggy. Turns out it’s faster to just write WebGL code that works with KiCad’s Graphics Abstraction Layer if you add the right intermediate debugging steps. I (with Claude) implemented the features and compared them to native at every step, then the app loaded up the first time and just worked. I spent weeks hunting weird emulation bugs before that.
- There was an old wxWidgets web port as a starting point that helped a lot, bringing it up to the level KiCad needed is a long (and still ongoing) task. Thanks ahilss!
- Pthreads on the web: with Emscripten it’s possible to port multithreaded apps (used by DRC, software 3D renderer). A lot of Emscripten features (Asyncify, Pthreads, native exceptions) are in a war with each other, but it’s possible.
- Asyncify with native exceptions: Asyncify (used to make the WASM code suspend then call into the JS land, emulating blocking C++ calls by rewriting the WASM directly) is not compatible with native exceptions, even on the latest Binaryen version it can’t suspend inside catch arms. If you write a new Binaryen pass then it can, making the bundle 30-40% smaller and the app load in a second instead of 10.
- Optimizing bundle size is a fun game. We just moved Open CASCADE into a separate lazy-loaded WASM module, moving from 180 to 130 MB (24 MB brotli), still on -O1. -O2 / -Oz etc will be more work than it looks.
And a ton more problems like these above on a daily basis.
A few months ago I had a barely loading laggy pcbnew that crashed when you looked at it wrong, now we have the whole application working. I should say with quite a few bugs still, but now it feels pretty close to native.
There’s a lot of built up knowledge / code that we want to release as blogposts, mainline our changes to Binaryen / KiCad / wxWidgets, but I want to focus on the release first. Our wxWidgets port is quite close to the core, the KiCad is ~150 changed core files (mostly build scripts, some code changes too). The goal is to keep as close to the mainline as possible, and merge eventually.
We’ll have a free tier for sure and something around $30/mo for bigger/closed projects, optional paid AI integration / self hosting / enterprise features / native & mobile version down the line.
The goal is to build a product on top of KiCad (collaboration, AI integration, sharing, integrations), kind of like what Red Hat did with Linux back then. We’re heads down making it functional and have the first version up in a ~month or so.
And of course we’re standing on the shoulders of the people who made KiCad & wxWidgets and we want to give back and contribute as much as possible, if you have an idea on how to do that best let me know, I released a few moderately successful open source projects, but I’ve never been a contributor. All of the front-end code is GPL (it has to be) and you can run this project if you want.
You can find the sources at: https://github.com/emergence-engineering/pcbjam.
Our company site is at: https://emergence-engineering.com/
Our crappy LP is at: https://www.pcbjam.com/
I love that Firefox is the best.
I don't use kicad. But, this project, as a web-first version of kicad, seems like it offers the best opportunities to create a shared learning community. Is that part of the long term goal?
I would love to experiment with kicad, but I learn best through watching others and asking questions. Can I do that with this? Is there a way I could "watch" other sessions as the build progresses? Or, chat about what I see there with other people interested in learning and teaching?
Very nice work!
I love that too, the sad part is that ~30% of our visitors ( from Plausible ) are on Safari which is... Not good :) No threads for ya there. At least it works.
Yes! That's the plan for "marketing". And yes, we'll have to usual "follow" features ( without the popups etc which doesn't really suit your usecase ), chat ( maybe voice chat? ).
Thanks!!
I can totally see pcb manufacturers like JLC integrating this into their websites, with a set of customized design rules and an order button.
Yea, it makes sense. JLC already own EasyEDA, it's an interesting matchup for sure.
I initially found EasyEDA to be easier to use especially with auto routing. But KiCAD is definitely more powerful.
It's on the "roadmap", someday I'll take some time to take a look at the autorouting situtation. I have a few ideas.
To open a demo board click "Open" in the Projects/Demo board section then "Open in PCB Editor" at demo.kicad_pcb in Files.
Next time I'll make a smoother demo...
I have tried to open demo on mobile and it fails (iOS 18.6.2). Safari browser returns “there was a repeated problem with the page…”
Yeah, this is not optimized to mobile yet. My Iphone 13 pro did open once, didn't check further. Sometimes it works if you open it on a new tab ( memory issues ).
Small suggestion, it would be nice to see the total size of the download during the first load (sry I am on a slow metered connection).
Yea, I'll add it in the next deploy. Thanks! Right now it's about ~30 MB for the big app ( 2 editors + footprint + symbol ).
This is really cool. I think a lot of people will initially dismiss your demo as ‘slop’ unless the landing page drops some of the Claude-isms (text and design) because it’s clear this is a project with passion in it, but the demo page and landing page both look like something Claude might’ve made with a single prompt.
You're wrong! It was two prompts! Jokes aside, you're right. I wanted to have something up quickly. Before the real launch ( and not just this demo ) I'll write one by hand, I'm against AI written copy / blogposts, just could not find the headspace to focus.
Again, thanks for the feedback, I'll take it!
Looking at the long list of the things you had to do to get this working .. and you couldn't "find" the energy to write some text for the landing page yourself? For a project you want people to buy from you? You supposedly put in all that effort, and built these sites around it, and building a business around it, and you couldn't deal with writing descriptions of it yourself? Seriously?
Yea, it sounds worse than it felt in that light lol. You have a point. In hindsight I should've taken a day or two for writing a good copy, I was just very impatient and wanted to push this out.
To be fair, this is not "the project" yet, just a first preview. I'm an engineer, doing things like this is "work", optimizing the bundle size is fun. Sorry.
Please think about how this can be set up to track upstream Kicad. Hopefully you have a small adaptation layer and some clever build, not wholesale changes to the code.
I teach HS classes where a lot of students end up doing some pretty serious PCB layout. We already benefit from MCAD that runs in the browser-- KiCad running in the browser would be a major boon to reduce setup requirements for student computers.
Thinking about how this could play with revision control and KiCad documents (footprint/symbol library, schematic, board, production gerbers) in Git repositories would be really helpful for my use case, too.
Congratulations- this looks really slick!
Thanks, We did not yet think trough the git integration, but I don't see why we couldn't add a "commit" / "push" button and pull from git.
The main thing we'll add to KiCad aside from browser version is shareable footprint/symbol libraries (private, public etc.), and organizations (with their own libs etc.). We're not 100% clear on the details yet.
If you have the time reach out to me at viktor dot vaczi at emergence-engineering.com, I'd love to hear what you need.
Eh. This isn’t a finished project. Designing and writing marketing content requires a completely different headspace to when you’re working the product, and isn’t something you can context switch easily.
I only have a problem with obvious AI marketing pages when it’s a finished product that’s on sale.
To my former self two days ago: if you work almost a year on something take two days to polish a demo.
So you can easily get it to work in the browser, but the dozens of core developers can't get it to work properly on Wayland[1]? Something smells fishy...
[1] https://www.kicad.org/blog/2025/06/KiCad-and-Wayland-Support...
I mean... It took quite a lot of time... Like months until I got the first dialog.
Happy to answer any questions & feel free to reach out ( email in my profile )!
I like all the utility you have already built in.
My selfish suggestion would be to add support to populate the part numbers for all the components from LCSC's database. JLCPCB wants these numbers in order to assemble a PCB.
(Currently I use a JLCPCB plug-in to do this in KiCAD.)
thanks! one thing we did not port is the plugin system: it's quite hard to run python on the web ( AFAIK pyodide is not enough here ) and I've heard that it will be deprecated in the next version.
The KiCad editor's state is accessible from the web app, we'll do some kind of plugin system like Figma's or just implement these functions as an overlay. We'll see, thanks for the tip!
Is this at all related to kicanvas.org
Nope, not at all. This is the original KiCad sources with some modifications to make it run in a browser. As far as I know kicanvas renders PCBs, we can do the whole workflow ( create a schematic => pcb => DRC checks, exports etc ).