May 15, 2026
Description
Parametric cable grommet that fits into a round hole in any surface — desk, enclosure wall, plexiglass panel, workbench. Two grommet body types and three interchangeable cover types — all driven by a single FreeCAD spreadsheet. Pre-generated STLs included for 7 standard hole saw sizes (22–80 mm). FreeCAD source included for custom dimensions.
Threaded
Threaded grommet body with a matching nut. Insert through the hole, screw the nut on from the other side. The nut adjusts to fit a range of surface thicknesses. Accepts any of the three cover types.
Snap-fit
Grommet body with flexible clips. Push into the hole — clips compress going in, then spring back to hold the grommet in place. No nut or threading. Accepts any of the three cover types.
Side Cutout | Notch cut into the edge of the cover. A cable slides in from the side without needing to disconnect the plug. |
Center/Custom Hole | Round hole in the center of the cover. Diameter matches the cable_diameter parameter in the spreadsheet. |
Flexible | Star/cross-slit pattern cut into the cover surface. Slits flex open when a cable is pushed through, then close around it. |
Cable grommets are available to buy, but they come in fixed sizes and fixed cover styles. If your surface thickness, hole size, or cable setup doesn't match what's on the shelf, you're stuck. This design is fully parametric — every dimension adjusts from a single FreeCAD spreadsheet, so it fits the exact hole, thickness, and cable combination you have.
Cutout | Inner dia | Hole saw | Fits |
22 mm | 16 mm | 22 mm | Single cable — Ethernet (16 mm), USB-A (17 mm) |
27 mm | 21 mm | 27 mm | HDMI (20 mm), thicker cables |
35 mm | 29 mm | 35 mm | IEC C13 (28 mm), cable bundles |
44 mm | 38 mm | 44 mm | Europlug / US 2-pin plug pass-through |
57 mm | 51 mm | 57 mm | Schuko / US 3-pin (NEMA 5-15) plug pass-through |
68 mm | 62 mm | 68 mm | UK plug (BS1363) pass-through. Standard electrical box size. |
80 mm | 74 mm | 80 mm | Standard large desk hole, multiple plugs |
Parameter | Options | Description |
Body wall thickness | 10, 18, 20, 25 mm | Surface thickness the body is sized for. Threaded and snap-fit both ship at all three. 10 = thin panels / plexiglass. 18 = MDF / particleboard. 20 = standard desktop. 25 = solid wood / thick panels. |
Cover cable diameter | 10, 12, 16, 17, 20, 28 mm | Center Hole and Side Cutout covers ship at multiple cable openings to match common cable diameters (see cable table below). Flexible cover ships at one size — slits stretch to fit. |
Cable / Connector | Diameter |
Barrel plug (DC power) | 10 mm |
USB-C | 12 mm |
USB Micro | 12 mm |
Ethernet (RJ45) | 16 mm |
USB-A | 17 mm |
IEC C7 (figure-8 power) | 17 mm |
HDMI | 20 mm |
IEC C13 (kettle plug) | 28 mm |
If the plug needs to fit through the grommet opening, the inner diameter must be larger than the plug body.
Plug type | Body size | Min inner dia | Use cutout |
Europlug / Type C (2-pin) | ~35 x 14 mm | ~38 mm | 44 mm |
US 2-pin / Type A | ~33 x 16 mm | ~38 mm | 44 mm |
Schuko / Type E/F (round) | ~48 mm dia | ~50 mm | 57 mm |
US 3-pin / Type B (NEMA 5-15) | ~40 x 32 mm | ~51 mm | 57 mm |
UK / Type G (BS1363) | ~50 x 35 mm | ~62 mm | 68 mm |
Approximate dimensions. Measure your actual plug — sizes vary by manufacturer.
Check the largest cable or plug that needs to pass through — see size tables above.
Pick a cutout size from the table — each matches a standard hole saw.
Measure the surface thickness with calipers — pick the closest wall_thickness (10, 18, 20, or 25 mm).
Pick a body type — threaded (body + nut) or snap-fit (clips).
Pick a cover type — side cutout, center hole, or flexible — and the cover cable_diameter that matches your cable.
STLs are organized into one folder per part. Each filename encodes the three parameters that vary:
{Part}_cutout_diameter{D}__wall_thickness{T}__cable_diameter{C}.stl
{Part} — Grommet, Grommet_snapfit, Nut, Cover_SideCutout, Cover_centerHole, or Cover_flex
{D} — cutout diameter in mm (22, 27, 35, 44, 57, 68, 80)
{T} — surface wall thickness in mm (bodies: 10/18/20/25 — covers and nut: 10)
{C} — cable opening diameter in mm (covers only — bodies and nut use 10 as a placeholder)
Example: Grommet_cutout_diameter44__wall_thickness18__cable_diameter10.stl — threaded body, 44 mm cutout, 18 mm wall.
Example: Cover_centerHole_cutout_diameter44__wall_thickness10__cable_diameter17.stl — center-hole cover for a 44 mm grommet with a 17 mm cable opening (USB-A / IEC C7).
The download contains the following pre-generated set:
Grommet (threaded body) — 28 files: 7 cutout sizes × 4 wall thicknesses
Grommet_snapfit — 28 files: 7 cutout sizes × 4 wall thicknesses
Nut — 7 files: one per cutout size (one nut fits all wall thicknesses of its cutout size)
Cover_SideCutout — 39 files: 7 cutout sizes × 5–6 cable diameters (28 mm only on 35 mm and larger)
Cover_centerHole — 40 files: 7 cutout sizes × 5–6 cable diameters (28 mm only on 35 mm and larger)
Cover_flex — 7 files: one per cutout size (slits stretch to fit any cable)
Material: PLA, PETG, or ASA. PETG for the flexible cover and snap-fit clips.
Layer height: 0.2 mm
Infill: 20–30%. Threaded body: 3–4 perimeters.
Supports: None.
Orientation: Print as oriented in STL. Body upright, covers face-down.
Thread fit: If the thread is too tight or loose, adjust thread_tolerance by ±0.05 mm in the spreadsheet.
Drill or cut a round hole using the matching hole saw size from the cutout table above.
Insert the grommet from one side. The lip flange rests on the surface.
Threaded: Screw the nut on from the other side. Snap-fit: Push until the clips lock. Twist-lock: Insert and rotate to the closed position.
Place the cover on top (threaded and snap-fit bodies only).
Route cables through the passthrough or cover opening.
Open Cable_grommets_v5.2.FCStd in FreeCAD 1.1 or later. The spreadsheet is labeled "sp". Edit values in column B. Press Ctrl+Shift+R to recompute — all 9 bodies update together.
Parameter | Default | Description |
cutout_diameter | 53 mm | Diameter of the hole in the surface. Min 12 mm. |
inner_diameter | 47 mm | Auto-calculated: cutout_diameter – 6 mm. Usable opening inside the grommet. Do not edit directly. |
wall_thickness | 4 mm | Thickness of the surface (desk, panel, enclosure wall). |
cable_diameter | 6 mm | Diameter of the cable passing through the cover hole. |
thread_tolerance | 0.15 mm | Gap between body thread and nut thread. Adjust ±0.05 mm. |
Parameter | Default | Description |
lip | 10 mm | Width of the flange that sits on the surface. Min 6 mm. |
nut_height | 4 mm | Height of the threaded nut. |
snap_fit_height | 11 mm | Height of the snap-fit clips on the body. |
FreeCAD files are available, if you need any step files or any other modifications, let me know!
Designed with FreeCAD 1.1 + Spreadsheet workbench
Cable_grommets_v5.2.FCStd — Parametric FreeCAD source. All bodies driven by the "sp" spreadsheet.
Grommet/ — 28 threaded body STLs (7 cutout sizes × 4 wall thicknesses)
Grommet_snapfit/ — 28 snap-fit body STLs (7 cutout sizes × 4 wall thicknesses)
Nut/ — 7 nut STLs (one per cutout size)
Cover_SideCutout/ — 39 side-cutout cover STLs (7 cutout sizes × 5–6 cable diameters)
Cover_centerHole/ — 40 center-hole cover STLs (7 cutout sizes × 5–6 cable diameters)
Cover_flex/ — 7 flexible cover STLs (one per cutout size)
Let me know if you want any changes or requests!
License:
Creative Commons — Attribution