LibrePCB Developers Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
General Information for Developers

This page contains some general information for LibrePCB developers. Please also read our contribution guidelines:

Unstable Version

As explained in the Release Workflow, the master branch is always unstable. And unstable doesn't mean "If you have bad luck, something doesn't work as expected". It rather means "Everything you save with an unstable version can't be opened again with any other (stable or unstable) version!!!". So it's highly recommended to use a dedicated workspace for testing purposes, then the files in your productive workspace are safe. When working with real projects or libraries, make a backup first or at least use a version control system so any modifications can be reverted afterwards.

Unstable application versions show a warning message box on every startup to protect users from (accidentylly) beaking their files (for example if they are trying out a nightly build). For developers this message box is very annoying, so you can set the environment variable LIBREPCB_DISABLE_UNSTABLE_WARNING=1 to disable it. If you use QtCreator, this variable can be set in the run configuration, so the warning is only disabled when starting LibrePCB from within QtCreator. But be careful with the disabled warning! :)


  • The master branch must always compile and all tests have to pass (CI successful).
  • Use separate branches to fix bugs or implement new features.
  • Do not pack lot of changes in one commit. Make small, incremental commits instead.
  • Write commit messages according this guideline:

Internationalization (i18n)

  • All files (*.cpp, *.h, *.md, *.lp, *.ini,...) must be written in english. Only strings which are visible in the GUI should be translatable into other languages.
  • Always use international date/time formats in files:
  • All numbers which are stored in files (e.g. S-Expressions or INI) must have a locale-independent format. We always use the point '.' as decimal separator, and no thousands separator. Example: 123456789.987654321


  • All 3rd-party modules and source code (e.g. from the internet) must be compatible with the GNU GPLv3 license. This applies to all kinds of resources (images, symbols, text, sound, source code, ...).


  • Use always our own exception types (librepcb::Exception and derivated classes), see exceptions.h.
  • Never use other exception types (like std::exception).
  • Exceptions from 3rd-party libraries must be translated into our own exceptions in a wrapper class.