Raspberry Pi 5 NVMe case

Pi 5 + M.2 HAT+ + 2280 SSD; snap-fit lid without extra screws; passive cooling; port, button and microSD access.

Prototype CadQuery 2 printed parts from 2 STL files, 1 optional or reference Source files

Preview of Raspberry Pi 5 NVMe case

Drag to rotate, scroll or pinch to zoom, right-drag or two-finger drag to pan. Units: mm.

Files

STLQtyDescriptionSize
tray.stl 1Tray, printed floor down 740 KiB
lid.stl 1Lid with snap hooks, exported in printing orientation 255 KiB
reference-assembly.stl –Keep-out volumes of the boards and SSD; reference only, not for printing 163 KiB

Qty is the number of prints for the configuration described in the notes; “–” marks optional or reference-only files.

Design notes

A two-part, passively ventilated case for Raspberry Pi 5 with the Raspberry Pi M.2 HAT+ (standard variant) and an M.2 2280 NVMe SSD. The case needs no screws beyond those supplied with the M.2 HAT+: the boards sit in four cups on the tray floor, and the lid snaps on, pressing the boards down with spring tongues. All external ports, the power button, the status LED and the microSD slot remain accessible.

Status: prototype. The geometry has been checked against simplified keep-out volumes only; it has not been printed or fitted.

Assembly preview with the lid lifted

Tray and lid views

Section at the SSD centreline

2280 SSD on the M.2 HAT+

The M.2 HAT+ officially supports 2230 and 2242 devices only. A 2280 drive inserted into its connector extends about 38 mm beyond the 2242 mounting position, past the HAT edge and above the USB/Ethernet ports. This configuration is outside the manufacturer's specification.

Screwless retention

Hardware

Assembly

  1. Assemble the Pi, the HAT, the PCIe ribbon cable and the SSD outside the case, following the M.2 HAT+ instructions, but without the knurled drive screw.
  2. Lower the assembly vertically into the tray until the lower screw heads drop into the floor cups. The microSD card, power button and ribbon-cable loop pass the left wall; the SSD end lands on the right ledge.
  3. Fit the lid and press it down until all four hooks click into their windows. The GPIO stacking header passes through the rear slot, and the camera/display FFC can leave through the slot above the HAT notch.

Printing

Cooling and material limits

There is no heatsink and no fan. Air enters through the floor slots and the side slots and leaves through the lid slots and the portal. Under sustained CPU load the SoC will reach its throttling temperature; this case is intended for light or intermittent loads such as a NAS or a small server. PLA softens at about 55 to 60 °C. Do not use the case in a closed cabinet, in direct sunlight or above other heat sources. If the inside temperature is a concern, print the same files in PETG or ASA.

Sources and design assumptions

Values read off the drawings or assumed, which must be checked on the physical parts before printing (constants in generate.py):

ConstantValueBasis
PCB_THICKNESS1.6 mmassumed for both boards
USB_TOP_ABOVE_PCB15.3 mmscaled from the side view
M2_CARD_STANDOFF2.25 mmassumed connector height from HAT top to SSD underside
M2_2242_END_X61.1 mmscaled from the HAT drawing; the 2280 end follows at 99.1 mm
M2_CARD_Y17.5 to 39.5 mmscaled from the HAT drawing
MICROSD_Y22.5 to 33.5 mmscaled from the top view
GPIO_HEADER_X7.2 to 58.2 mmheader body, scaled from the top view
SCREW_HEAD_HEIGHT2.0 mmassumed for the HAT kit screws; sets the cup depth and clamp preload
ribbon-cable loopto x = −5.5 mmestimated from the product photograph

generate.py refuses to export if any keep-out volume (boards, ports, ribbon-cable loop, GPIO header, SSD, spacers and the assumed cable plugs) intersects the tray or lid, if any board volume cannot be lowered vertically into the tray, if the lid intersects the tray, if a hook arm bent inward while snapping would hit the boards, if the hook strain exceeds 2 %, or if a tongue preload differs from the intended value. If a measurement differs, change the constant, regenerate, and inspect the images.

The STL files were generated with Python 3.12 and CadQuery 2.7.0; the images use NumPy 2.3.5 and Pillow 12.3.0. Use the pinned Nix and container commands in the repository README to regenerate and check all outputs.

License: CC BY-SA 4.0. This is an independent accessory and is not an official Raspberry Pi product. Raspberry Pi is a trademark of Raspberry Pi Ltd.