SKADIS Pegboard Hook
A simple hook for slotted pegboards; it fits IKEA SKADIS pegboards. An upper tab passes through a slot and drops down behind the board, and a lower peg sits in the slot 40 mm below, so the hook locks at two points and cannot swing or lift off. The arm sticks straight out with an upturned tip to keep tools, cables or bags from sliding off. With the default settings it is 58 x 52 x 8 mm (depth x height x width). Print it flat on its side with no supports; the tab and peg are 4.5 mm thick to slide into the 5 mm slots. Arm length, hook width, tip height and arm thickness can be adjusted, as can the slot and board dimensions if your board differs.
# Pegboard Hook - for SKADIS-style slotted pegboards
#
# How it hangs: the upper tab goes through a slot and its leg drops down
# behind the board; then the hook swings in and the lower peg drops into the
# slot 40 mm below in the same column. The tab carries the load, the back
# plate pushes against the board face, and the peg stops the hook from
# swinging sideways or lifting off. To remove it, swing the bottom out first.
#
# Print orientation: flat on its side, exactly as modeled. The side profile is
# drawn in XY (X = out from the board, Y = up the wall) and extruded along Z.
# Every part starts at Z = 0, so there are no overhangs and no supports; the
# layers run along the arm, so the bending load stays within each layer.
#
# Coordinates: board front face at X = 0, upper slot center at Y = 0.
# --- Board (assumed SKADIS-style values; measure your board) ---
@param 4..6 step:0.1 group:"Board" desc:"Slot width (mm)"
slot_w = 5.0
@param 12..18 step:0.5 group:"Board" desc:"Slot height (mm)"
slot_h = 15.0
@param 3..8 step:0.1 group:"Board" desc:"Board thickness (mm)"
board_t = 5.0
@param 20..80 step:1 group:"Board" desc:"Vertical distance between the two slots used (mm)"
slot_pitch = 40
# --- Hook ---
@param 20..120 step:1 desc:"Arm length, from the board face to the tip (mm)"
arm_len = 50
@param 4.5..20 step:0.5 desc:"Hook width (part thickness in front of the board, mm)"
hook_w = 8.0
@param 0..40 step:1 desc:"Height of the upturned tip above the arm (mm)"
tip_h = 10
@param 4..10 step:0.5 desc:"Arm thickness (mm)"
arm_t = 6.0
# --- Fixed design values ---
fit = 0.25 # sliding fit per side in the slot width
tab_t = slot_w - 2 * fit # thickness of tab and peg (4.5 for a 5 mm slot)
neck_l = board_t + 0.5 # neck reaches past the board back with 0.5 mm play
neck_h = 5 # neck height (rests on the slot bottom)
leg_t = 2.5 # leg thickness behind the board
leg_drop = 6 # leg length below the neck
peg_h = 8 # lower peg height (slot is 15, so +-3.5 mm slack)
peg_l = 4 # peg depth into the slot (shorter than the board)
plate_t = 5 # back plate thickness in front of the board
tip_t = 5 # thickness of the upturned tip
g = 8 # 45deg gusset between plate and arm
ov = 0.5 # overlap of tab and peg into the plate for a clean union
# --- Key heights ---
neck_y0 = slot_h / -2 # neck bottom sits on the bottom of the upper slot
neck_y1 = neck_y0 + neck_h
peg_yc = -slot_pitch # lower slot center
arm_top = peg_yc - peg_h / 2 - 2 # arm top 2 mm below the peg
arm_bot = arm_top - arm_t
plate_top = 0
# --- Front body: back plate + arm + upturned tip + gusset ---
body = sketch [
(0, arm_bot),
(arm_len, arm_bot),
(arm_len, arm_top + tip_h),
(arm_len - tip_t, arm_top + tip_h),
(arm_len - tip_t, arm_top),
(plate_t + g, arm_top),
(plate_t, arm_top + g),
(plate_t, plate_top),
(0, plate_top)
] | extrude hook_w
# --- Upper tab: neck through the slot, leg dropping down behind the board ---
lx = -neck_l # front face of the leg (faces the board back)
tab = sketch [
(ov, neck_y0),
(lx, neck_y0),
(lx, neck_y0 - leg_drop + 1),
(lx - 1, neck_y0 - leg_drop),
(lx - leg_t, neck_y0 - leg_drop),
(lx - leg_t, neck_y1),
(ov, neck_y1)
] | extrude tab_t
# --- Lower peg, with a 1 mm lead-in chamfer ---
peg = sketch [
(ov, peg_yc - peg_h / 2),
(1 - peg_l, peg_yc - peg_h / 2),
(-peg_l, peg_yc - peg_h / 2 + 1),
(-peg_l, peg_yc + peg_h / 2 - 1),
(1 - peg_l, peg_yc + peg_h / 2),
(ov, peg_yc + peg_h / 2)
] | extrude tab_t
hook = body + tab + peg
assert hook.solids == 1
assert hook.valid
assert tab_t ~ 4.5
assert tab.bbox.y <= slot_h - 2 # tab fits in the slot height with play
assert peg_h < slot_h # peg drops into the lower slot
assert peg_l < board_t # peg does not reach past the board
assert neck_l > board_t # leg clears the board back
assert hook.bbox.x ~ arm_len + neck_l + leg_t # 50 + 5.5 + 2.5 = 58
assert hook.bbox.y ~ plate_top - arm_bot # 52
assert hook.bbox.z ~ hook_w
assert hook.bbox.min[2] ~ 0 tol:0.001
print "tab thickness" tab_t
print "size" hook.bbox
hook