DeclaraCAD has Fuse, Cut, and Common boolean operations.

Note: Use parallel = True to run the operation in parallel.

Fuse

The Fuse declaration performs a boolean add or union of two shapes. The resulting shape will be both parts fused together as if welded, casted, or printed as one piece. Fuse will join all child declarations so multiple shapes can be fused together with one Fuse block.

DeclaraCAD Union

enamldef Assembly(Part):
    Fuse:
        transparency = 0.5
        material = 'plastic'
        color = 'grey'
        Box:
            position = (-dx/2, -dy/2)
            dx = 5
            dy = 5
            dz = 1
        Cylinder:
            position = (0, 0, 1)
            radius = 1.5
            height = 5

Note: When performing a union of planar faces OCCT will keep each original face intact. You can set the unify = True to join all of the faces into a single face as shown below (on the left).

Union of faces

Cut

The Cut performs a subtraction of the all subsequent shapes from the first shape. The resulting shape will be the first shape with all other intersecting parts of the other shapes removed.

DeclaraCAD cut

enamldef Assembly(Part):
    Cut:
        transparency = 0.5
        material = 'plastic'
        color = 'grey'
        Box: box:
            position = (-dx/2, -dy/2)
            dx = 6
            dy = 4
            dz = 1
        Cylinder:
            position = (1.5, 0)
            radius = 1
            height = box.dz
        Cylinder:
            position = (-1.5, 0)
            radius = 1
            radius = 1
            height = box.dz

Common

The Common performs an intersection of all of the shapes. The resulting shape will be only parts which are common to all of the items.

DeclaraCAD boolean common

enamldef Assembly(Part):
    Common:
        transparency = 0.5
        material = 'plastic'
        color = 'grey'
        Cylinder:
            position = (0, 0)
            radius = 5
            height = 1
        Box: 
            position = (-dx/2, -dy/2)
            dx = 10
            dy = 8
            dz = 1

Any combination of these operations can be nested together as needed to create more complex parts. As an example here's one way to model a simplified ball screw nut.

Ball screw nut

enamldef BallScrewNut(Part): part:
    attr d = 16
    attr length = 42
    material = 'steel'
    color = '#555'
    attr show_bolts: bool = True
    func get_bolt_holes():
        r = 38/2
        a = radians(45)
        angles = [
            radians(0), radians(45), radians(-45),
            radians(180), radians(180+45), radians(180-45)
        ]
        return [(r*cos(a), 0, r*sin(a)) for a in angles]
    Chamfer:
        material = part.material
        color = part.color
        distance = 0.5
        Cut:
            Fuse:
                Cylinder: c2:
                    direction = (0, 1, 0)
                    radius = 28/2
                    height = length
                # Bracket
                Common: 
                    Cylinder: c1:
                            direction = (0, 1, 0)
                            radius = 48/2
                            height = 10
                    Box:
                        position = (-dx/2, 0, -dz/2)
                        dy = 10
                        dz = 40
                        dx = c1.radius*2
            Cylinder:
                direction = (0, 1, 0)
                height = c2.height
                radius = d/2

            Looper:
                iterable = get_bolt_holes()
                Cylinder:
                    position = loop.item
                    direction = (0, 1, 0)
                    radius = 6/2
                    height = 10
    Looper:
        iterable = get_bolt_holes() if show_bolts else []
        CounterSunkHex:
            direction = (0, 1, 0)
            diameter = 7
            length = 20
            material = 'charcoal'
            position = Point(0, 1.75, 0) + loop.item