This will give you an overview on how to get started with developing custom FreeCAD features. To get started follow the Create a FeaturePython object part I tutorial on the FreeCAD wiki. The examples in this blogpost are from the tutorial in the FreeCAD wiki.
Setting up the folder structure for the custom feature project in VS Code

Quickstarting you into FreeCAD features with a hello world project
import FreeCAD as App
def create(obj_name):
"""
Object creation method
"""
obj = App.ActiveDocument.addObject('App::FeaturePython', obj_name)
box(obj)
return obj
class box():
def __init__(self, obj):
"""
Default constructor
"""
self.Type = 'box'
obj.Proxy = self
Adding properties to the custom FreeCAD object
import FreeCAD as App
def create(obj_name):
"""
Object creation method
"""
obj = App.ActiveDocument.addObject('App::FeaturePython', obj_name)
box(obj)
return obj
class box():
def __init__(self, obj):
"""
Default constructor
"""
self.Type = 'box'
obj.Proxy = self
obj.addProperty('App::PropertyString', 'Description', 'Base', 'Box description').Description = ""
obj.addProperty('App::PropertyLength', 'Length', 'Dimensions', 'Box length').Length = 10.0
obj.addProperty('App::PropertyLength', 'Width', 'Dimensions', 'Box width').Width = '10 mm'
obj.addProperty('App::PropertyLength', 'Height', 'Dimensions', 'Box height').Height = '1 cm'
Adding automatic recompute after the creation of the custom FreeCAD Feature
import FreeCAD as App
def create(obj_name):
"""
Object creation method
"""
obj = App.ActiveDocument.addObject('App::FeaturePython', obj_name)
box(obj)
App.ActiveDocument.recompute()
return obj
class box():
def __init__(self, obj):
"""
Default constructor
"""
self.Type = 'box'
obj.Proxy = self
obj.addProperty('App::PropertyString', 'Description', 'Base', 'Box description').Description = ""
obj.addProperty('App::PropertyLength', 'Length', 'Dimensions', 'Box length').Length = 10.0
obj.addProperty('App::PropertyLength', 'Width', 'Dimensions', 'Box width').Width = '10 mm'
obj.addProperty('App::PropertyLength', 'Height', 'Dimensions', 'Box height').Height = '1 cm'
Doing something on document recompute with the custom FreeCAD object
import FreeCAD as App
def create(obj_name):
"""
Object creation method
"""
obj = App.ActiveDocument.addObject('App::FeaturePython', obj_name)
box(obj)
App.ActiveDocument.recompute()
return obj
class box():
def __init__(self, obj):
"""
Default constructor
"""
self.Type = 'box'
obj.Proxy = self
obj.addProperty('App::PropertyString', 'Description', 'Base', 'Box description').Description = ""
obj.addProperty('App::PropertyLength', 'Length', 'Dimensions', 'Box length').Length = 10.0
obj.addProperty('App::PropertyLength', 'Width', 'Dimensions', 'Box width').Width = '10 mm'
obj.addProperty('App::PropertyLength', 'Height', 'Dimensions', 'Box height').Height = '1 cm'
def execute(self, obj):
"""
Called on document recompute
"""
print('Recomputing {0:s} ({1:s})'.format(obj.Name, self.Type))
Getting Started with FreeCAD
Jumpstart your first 3D CAD project with the open-source software FreeCAD and this illustrated step-by-step guide.

Exploring newest story
- Learning from scratch how to create custom features in FreeCADThis will give you an overview on how to get started with developing custom FreeCAD features. To get started follow the Create a FeaturePython object part I tutorial on the FreeCAD wiki. The examples in this blogpost are from the tutorial in the FreeCAD wiki. Setting up the folder structure for the custom feature project… Read more: Learning from scratch how to create custom features in FreeCAD