Ordering PCBs directly from within the application


Currently the user has to generate Gerber files manually and then needs to upload them to a PCB manufacturer service website. This is fine for many users, especially for those who are familiar with the Gerber format and the ordering process in general. But I think there are many hobbyists creating their first PCBs, who do not really know what steps are needed to order a PCB. I remember myself struggling with the whole order process when I created my first PCBs with Eagle a long time before studying electronics - it helped me a lot that PCB manufacturers natively supported Eagle project files :wink:

Thanks to the cooperation with Aisler, there is already a simpler way to order PCBs (export *.lppz and upload it to Aisler). However, most people probably don’t know Aisler yet. And although it’s simpler than exporting Gerber, it still involves some kind of file export and manually needs to be uploaded to a website. Therefore I think it would be quite helpful to somehow integrate the ordering process directly into LibrePCB. This would have several advantages:

  • Especially for beginners, it’s way easier to get the PCB ordered. No knowledge is needed about the Gerber format or about what PCB manufacturers exist and which file formats they accept.
  • Not only beginners, even engineers with knowledge about the order process might sometimes choose a simple order method if it reduces effort/time and the project is not very critical regarding reproducibility, price etc. (e.g. prototypes).
  • With a cooperation between the used PCB manufacturer and LibrePCB, we might be able to increase our income with every PCB ordered through LibrePCB. This supports the development of LibrePCB, which in turn helps LibrePCB users since LibrePCB gets more and more powerful. Currently only a few people order PCBs at Aisler, so it doesn’t generate significant income for LibrePCB. The ability to order PCBs directly from within LibrePCB might lead to many more users ordering at a manufacturer which supports LibrePCB financially.

Possible Risks

Community doesn’t like it

Maybe users could consider such a feature as too commercial for an OpenSource project (e.g. “advertising” for Aisler) :wink: My opinion: As explained above, creating more income is good for LibrePCB and its users since it helps to keep the LibrePCB development alive. And users who don’t like this feature, don’t need to use it (of course we will always provide the ability to export Gerber files as usual, which you can send to whatever PCB manufacturer you like).

Breaking changes in manufacturers API

If some day the cooperation between PCB manufacturers and LibrePCB changes (added more cooperations, stopped a cooperation, breaking change in manufacturer API, …), this feature might stop working in all existing LibrePCB releases.

IMHO this would be a nightmare and thus needs to be avoided. This means that the application itself should not contain any hardcoded information about the supported manufacturers and their API to order PCBs.

Implementation proposal

I’d suggest to implement such a feature in a very simple way:

  • In the board editor, add a menu item File -> Order PCBs (or something like that).
  • This menu item opens a window which contains some explanation how this feature works etc (e.g. privacy statement, since the project gets forwarded to a manufacturer), and a button like “Upload project & start order process”.
  • The button uploads the project as a *.lppz through our own HTTPS API to our server (*).
  • The API responds with an URL.
  • LibrePCB opens that URL in the system’s default browser. The URL will point to a page to start the ordering process (e.g. might point directly to the PCB manufacturer website, but with the Gerber data already loaded).

(*) Actually the user can specify an arbitrary list of API servers in the workspace settings. The PCB ordering feature should check all available APIs whether they support this feature or not. If multiple APIs support the feature, the user should be able to choose through which API he wants to order the PCB.

This way we are very flexible regarding PCB manufacturer integration. Only the API server needs to be kept up to date with the supported manufacturers. If a manufacturer changes its own API, the LibrePCB application will continue to work since the fix needs to be done server side.

In addition, the feature is independent of what file format the PCB manufacturer expects. Since the whole project gets uploaded as a *.lppz, the server can convert it to any other format needed by the manufacturer (e.g. Aisler supports *.lppz natively so no conversion is needed, but other manufacturers might need Gerber files which could then be generated on our server).

In the end, this seems to be very similar to Fritzing Fab :slightly_smiling_face:


Any thoughts about such a feature? Does it sound like a good or bad idea? Any improvement suggestion? :slightly_smiling_face:


Sounds like a great idea. In fact it could provide a table listing all the manufacturers able to produce the board. Sortable columns shown would include name, website url, prices for 1, 2, 5, 10 units etc, estimated delivery time, checkboxes for available options (silk screen, etc), and user comments. Some manufacturers could be shown across multiple rows if they provide various material types, thicknesses, etc.

1 Like

I try to thinking little more about this.

For beginners/DYI can be this feature as easiest way how to order PCB. But beginners/DYI needs low cost manufacturers.
And this is question - price value for LibrePCB from ordered low cost PCBs via push button. Will be this value sufficient in opposite to time/price needed to program and test this feature?

From my point of view (as not the beginner designer) is this feature not useable, but doesn’t mind. I 'll accept it, but probably I will not used it.
Because my last check of the design is check manufacturer (gerber) data.
How I check mfg data if I order it via this button? No way, maybe.

Thanks for the feedback @hooperbloob and @EdizonTN! :tada:

At this time I don’t know if this will ever be possible (e.g. knowing the price is almost impossible if manufacturers don’t provide an API for this and it is not documented how to calculate it). Anyway, for now I think it’s sufficient to support only a single manufacturer, but I agree it might make sense to add more manufacturers in future.

Very hard to say :wink: But I’d say if such a feature makes ordering PCBs much easier, it might attract new users. And more users is always good, even if it doesn’t lead to more income.

Actually on Aisler you’ll see the rendered PCB before ordering it, and (in contrast to most/all other manufacturers) they guarantee that the preview is identical to the real PCB. But of course I understand that one wants to do the review in a Gerber viewer instead :slightly_smiling_face:

I worked on a prototype for this feature, so far it seems to work. This is how it looks at the moment:

Ouu, Preview of the PCB looks good! This can be the sufficient.

Very hard to say :wink: But I’d say if such a feature makes ordering PCBs much easier, it might attract new users. And more users is always good, even if it doesn’t lead to more income.

But don’t forget, more functionality + easy of use = more users.
In LibrePCB case will be more users if will be finished (and easy useable) basic functions (easiest layer change in PCB, moving Value and Name in schematic etc…) - I still waiting for these. This is a my point of view.

At the end - if you make ANY decision, I will still propagate LibrePCB. Because I feel it his potential. :+1:

1 Like

When Google let public transportation providers include their services on Google Maps they didn’t ask each of them to provide APIs for their bus schedules and locations. They published their own interface in the form of a structured doc (JSON?) that those providers could provide for inclusion in the maps. I think they do the same thing for businesses, noting their hours of operation, website url, etc.

So, to follow that example, you could mock up a sample specification doc for your favourite PCB provider and, after a few iterations, use that going forward for other manufacturers. If someone wants to be considered for inclusion as a service provider in LibrePCB, they can send you a URL of where that spec doc lives on their website so LibrePCB can pull the latest version every time. You would only be responsible for maintaining (vetting?) the list of service providers and those URLs so when the application starts it can download the list (from librepcb,org) and then pull the latest docs from each of the providers.

This way you don’t have to compare apples to oranges in terms of available options, the onus is now on the providers to do that. You just allow for them in your master specification.

1 Like