🚂 3D Printed Model Railway Accessories · OO · N · TT:120
Free postage over £75 3DWagonWorks@gmail.com

Precision 3D printed
railway accessories

Welcome to 3D Wagon Works. We design and 3D print highly detailed model railway wagon kits and accessories for OO, N and TT:120 gauge layouts.

Every item starts from a blank screen — we don't download and print existing files. Our kits are designed with the modeller in mind: straightforward to build, accurate to the prototype, and finished to a standard that stands up to close inspection on any layout.

We're modellers ourselves, so we understand what matters. If you're looking for something specific or have a suggestion for a future product, we'd love to hear from you.

Browse the Shop →
🚃

Available Scales

OO
4mm · 1:76
The most popular British scale. Full wagon range available.
N
2mm · 1:148
Wagons, lineside and decals for compact layouts.
TT
3mm · 1:120
Growing range in the increasingly popular TT:120 scale.

How ordering works

Step 01
Add items to your basket
Browse by scale and category. Add what you need — no payment at this stage.
Step 02
Submit your order request
Tell us your name, delivery address and any notes or special requests.
Step 03
Pay via PayPal
Secure checkout via PayPal — pay by PayPal balance or any major debit or credit card.
() { var count = cart.reduce(function(s,i){ return s + i.qty; }, 0); var cc = document.getElementById("cartCount"); if (cc) { cc.textContent = count; cc.classList.toggle("visible", count > 0); } } document.addEventListener("DOMContentLoaded", function() { var ct = document.getElementById("cartToggle"); if (ct) ct.addEventListener("click", function(){ alert("Add items from the shop to use your basket."); }); var carouselIndex = 0; var carouselTotal = 10; var carouselAuto; function goToSlide(n) { carouselIndex = (n + carouselTotal) % carouselTotal; var track = document.getElementById("carouselTrack"); if (track) track.style.transform = "translateX(-" + (carouselIndex * 100) + "%)"; document.querySelectorAll(".carousel-dot").forEach(function(d,i){ d.classList.toggle("active", i === carouselIndex); }); } function resetAuto() { clearInterval(carouselAuto); carouselAuto = setInterval(function(){ goToSlide(carouselIndex+1); }, 5000); } var cn = document.getElementById("carouselNext"); var cp = document.getElementById("carouselPrev"); if (cn) cn.addEventListener("click", function(){ goToSlide(carouselIndex+1); resetAuto(); }); if (cp) cp.addEventListener("click", function(){ goToSlide(carouselIndex-1); resetAuto(); }); document.querySelectorAll(".carousel-dot").forEach(function(dot){ dot.addEventListener("click", function(){ goToSlide(parseInt(dot.dataset.slide)); resetAuto(); }); }); if (cn || cp) carouselAuto = setInterval(function(){ goToSlide(carouselIndex+1); }, 5000); });