Introduction to FreeCAD development

Have you ever wanted to contribute back to the project? Let us help you getting started!

If you want to contribute, write a thread about what you want to do in the developers corner and we will do our best to get you going. This post provides a brief overview of our workflow.


The FreeCAD forum: is the primary place for communication between FreeCAD users as well as developers. This should be the first place to search for answers if you have any questions.

Note: When you create a forum account, it might take a while before it's activated as the process is currently manual. This is done to limit spamming.


FreeCAD uses MantisBT as its tracker for bug reporting and feature requests.
The FreeCAD tracker address is
Note: In order to create issues you will have to create an separate MantisBT account.

As we are getting a lot of reports please follow the rules before creating a new issue

  1. Make sure you're using the most updated stable or development versions of FreeCAD.
  2. PLEASE PLEASE PLEASE post to FreeCAD forum to verify the issue.
  3. Only after community vetting, open a ticket and link said thread to ticket and vice-a-versa.
  4. Post your Help>About FreeCAD>Copy to clipboard version info in to forum thread and ticket.
  5. Post a Step-By-Step explanation on how to recreate the issue.
  6. If possible, upload an example file to demonstrate problem.
  7. If there is a crash involved, please consider Debugging and attaching the traceback to the ticket.


FreeCAD uses MediaWiki for its documentation. To be able to modify the wiki, you must request access from the FreeCAD wiki admins.
Note: To get an Wiki account we require you to have a forum account with at least 1 post.
Before you start changing things in the wiki please read the WikiPages guidelines,
There are several rules on how to write on the wiki to keep it organized, high quality, translated and up to date. It's our practice to discuss the additions/changes one wants to make in the FC wiki subforum prior to posting.


The FreeCAD codebase is mostly C++ and Python, we are currently migrating to Python3, new contributions based on Python2.X are frowned upon. The git repo is hosted at


If you're interested developing for FreeCAD please look into

  1. Read the Source code wiki page and check the API reference .
  2. Creating your own workbench (See Workbench Creation , Module Creation , Workbench Starterkit )
  3. Modifying an existing workbench (View source code of any external workbench at FreeCAD-Addons Repo )
  4. Creating your own macro (Read more about FreeCAD Macros and the FreeCAD Macros Repo )
  5. Building FreeCAD and writing C++ code (See Compiling instructions )

Summary of FreeCAD Development so far

Greetings to all FreeCADers, this post is created by a FreeCAD volunteer to keep the community up to date about how 0.18 development is progressing. Since FreeCAD has a pretty long release cycle (the team has decided on a yearly cycle) this blog then will come in handy for folks that are really wanting to use the vibrant and prolific bleeding-edge of FreeCAD (AKA 'HEAD' or the master branch) where many bugs are being removed (Hopefully! :wink:) and new features being woven in for testing and refinement.

It is the intention that there will be a post at the end of each month of FreeCAD development updates. Though that may seem a little ambitious, it may not be far from reality. For example, one of the core developers, Yorik Van Havre, creates a blog post on his website for his supporters every month with an update regarding his monthly FreeCAD hacking activities. So at the very least we'll figure out a way to link to his blog posts.

The main goal of the 0.18dev cycle is to iron out all Python3 and Qt5 incompatibilities.


  • Tracking Python3 and Qt5 compatibility is ongoing. Ways to track progress: Python3 and Qt5 Compatible Addon Workbenches (in preparation for 0.18). Many fixes provided by @looooo and @wmayer and others.
  • An upgrade to the Start Page Workbench was merged. The UI has been modernized and updated with a Notepad that persists between FreeCAD sessions.
  • Arch Stair was improved see FreeCAD forum thread
  • Assembly3 port continues to receive a lot of attention and care for @realthunder and a lot of interest from the rest of the FreeCAD community. Progress of As3 can be followed on the git repo
  • Several Sketcher Solver refinements made it in to master, thanks to @abdullahtahiriyo
  • New Workbenches added to FreeCAD Addon Manager: SlopedPlanes, Lithopane, and AirPlaneDesign
  • GSOC 2018 participant, @kkremitzki, completed his assignment of heroically maneuvering through the dependency hell that FreeCAD requires. Many upstream dependencies have been updated and are either pending or part of the upstream Debian package repositories which will make compiling FreeCAD more uniform across most *nix-based platforms.

Announcing the FreeCAD Development Blog


CC-BY-SA: EmojiOne

This is the debut post for the FreeCAD Development Blog, which provides a unique opportunity to bring the best FreeCAD development news and updates from the community of developers and users.

The blog uses the Python-based Nikola which provides an intuitive command-line interface (see nikola help after installation) and consumes reStructuredText files.

Custom themes are available, and standard CSS/JS customization is possible as well. Nikola supports \(\LaTeX\) equation rendering. It also has good multilingual support, key for FreeCAD's international community. Nikola also comes with RSS support out of the box, so readers of this site can subscribe for automatic updates.

You can contribute posts by following a few steps. First, visit the the repository for the blog source and click the "Fork" button. You can read about installing Nikola or (assuming you have pip) just run sudo apt install python3-pip && pip3 install --user -U nikola webassets ws4py watchdog. Then you need to clone your forked repository by running:

$ git clone<your-username>/freecad-blog && cd freecad-blog
$ nikola auto -b # Run autobuild and open an auto-refreshing browser window
$ nikola new_post # Follow the prompts and then edit posts/your_title.rst until satisfied
$ git add posts/your_title.rst # Begin the pull request process...

... and then finishing by making a pull request on the main repository using the commits you've pushed to your fork.

Once the pull request is merged, anyone with write permission to the repository for built pages can then use nikola build && nikola deploy to build and deploy the new post.