The same four triangles in STL, 3MF, and OBJ
A ten-millimetre right tetrahedron takes different amounts of space in three mesh containers. With just four triangles, indexing and container overhead account for much of the difference; the result does not rank the formats for larger models. Each downloadable file was created by this project.
How this was measured
Generate a tetrahedron with axis-aligned extents of ten and an explicit millimetre source unit. Export binary STL, 3MF, and OBJ through the checked-in writers. Count bytes directly. STL and 3MF preparation exports are reread and checked; OBJ is independently expected to contain four shared vertex definitions and four triangle faces. Inspect the actual text or package to confirm its unit and resource declarations.
| Measurement | Value |
|---|---|
| stl Bytes | 284 |
| three Mf Bytes | 1594 |
| obj Bytes | 105 |
| stl Unit | Not recorded |
| three Mf Unit | mm |
| obj Materials Written | false |
What the result does not establish
The OBJ writer emits no MTL file or texture coordinates. The STL records no physical unit. The 3MF records millimetres but is not a slicer project with printer settings. Container overhead dominates this tiny mesh; complex meshes and other writers can reverse the size comparison.
Try these files
These samples were created by this project and released under CC0. They contain no visitor files. Sizes and SHA-256 hashes identify the exact bytes measured in this experiment.
- Ten-millimetre tetrahedron; STL itself stores no unit. (STL, 284 bytes)
SHA-256
7d98ff53aa7c0ac15350e51fc0adf77ebd39df597cac09f07269e1ff3fff9aa4 - Ten-millimetre tetrahedron in 3MF. (3MF, 1,594 bytes)
SHA-256
432c2b72aa07fadacfa24f77b1750fda16822303fd96dd268d64d617a06f6d88 - Ten-millimetre tetrahedron in OBJ; no MTL file is emitted. (OBJ, 105 bytes)
SHA-256
1c10d5664480df567f096cb27889c3ef9489c9c75a96ca807b3d6d67bd6b71c4
Use this result
Versions and reproduction
Evidence generated 2026-09-05T21:13:29.140Z. The checked-in generator rebuilds the sample collection and measurements with one command:
node --experimental-strip-types scripts/build-workbench-evidence.tsCAD source generation: scripts/build-workbench-cad.py with cadquery-ocp 7.9.3.1.1; checked-in analytic cylinder outputs. The STEP and IGES outputs are checked in so ordinary evidence rebuilds do not require Python.
- @astrojs/cloudflare
- 14.3.0
- @cloudflare/containers
- 0.3.7
- astro
- 7.3.1
- fflate
- 0.8.3
- jose
- 6.2.12
- occt-import-js
- 0.0.23
- rhino3dm
- 8.32.2
- three
- 0.185.1
Geometry source and generator SHA-256 hashes:
- core/affine.ts
- cff986695025f835e54c530ef654a3b7b19862d5f5feba08a361f2db708fbe65
- core/bytes.ts
- 850a1863a411549bbaf73e85d339dd3109fb57aca4e89e1cbeb0a06cdb3cc924
- core/convert.ts
- e9e96ecbb498338b85bc122a7e328ae9d96666b2dadce581e4f86e8b7b59689d
- core/deflate-validation.ts
- 7427464082422b2a484cb4b845e21a41dbb015ffddb83a4d1f938b6c32cb40f1
- core/detect.ts
- 4c64ca45732c4339749fed372b20e6996f17e1f4d307046ad71e047723ccf3e9
- core/formats.ts
- f037f0543d19f5ffebe97ea40450c5b646d6d5164ae4e816bf3dce6cf3685479
- core/index.ts
- 6dcf467a7b1952cf270fd834927404b19eb58bc6d1f2542d8c420bda90d4e3f7
- core/inspect.ts
- 44100ac51622e986e3ab63e49d6704dde539141454e273b76d5be70b5115a1ec
- core/model.ts
- bef860184a185c098d72d30a12cfaa7fe3199b96dbde0e65428b8f3bfe6c79a5
- core/read/3dm.ts
- f26a7d22c86dc6780ce218822eafa4cc5dbf76f35289a6266f6f2161bd84127e
- core/read/3ds.ts
- 0142d9f82937566220d6616c52800ffa856fff500bab3e26e90c0cdc0c6f7e32
- core/read/3mf-package.ts
- 11ad7a82d1dc5698412479d0c6351c5b88cfbc308ebee4a5d91fdc71d969af51
- core/read/3mf.ts
- 9378aa3156d5b908d4ce2ac551b76500247762de75a21b29ae0b2feb341a950e
- core/read/amf.ts
- b68b2de1c27d3c374ce4e2ce4215c8a6edcfbccac3e9a7ed0f623956cfe4afde
- core/read/dae.ts
- acf671ba4ea931ca4e958a67886978e61da9c7cb936cb835265f86d3b271b2c5
- core/read/fbx-scene.ts
- 89bb4fa1718fafa1e8dd8ec27197e83752fe8af7bf0c04b5d49586f611d9812d
- core/read/fbx.ts
- 33c87b835bf7ba11a2dd937fd78ff21a094076e9b9d95e7d24e40ea859c16bf3
- core/read/gltf.ts
- 23296adfe9591efb9a7179413bf5a1ffe9a47acffa3daf997055c20ebd249c6c
- core/read/obj.ts
- 86fe1097ed8c07d052753255a17adcd746d3ccd847351a5632f78ecb7b8f8605
- core/read/occt.ts
- 1c129dc8ffb4f03bc992dd8940681acb92a4ed03271ce47485f3ac1533182117
- core/read/ply.ts
- 3cac9da6d62be20ae016cef751b01c14c0ebccd67d921107c56e8297835d2933
- core/read/scene-validation.ts
- 62e1f08faf9a9253e3b5d6c15395cbc97bc093e3867ce1aab87a3af8db704ebc
- core/read/stl.ts
- ac53b792bd9cb8bff4366331fa0bb49844c7d6fcf9df47819cc75544e812dec9
- core/read/usdz.ts
- caded369def6d998931378c616c271c565840ad280e5d797d4674f2ab1222fcb
- core/read/workbench-3mf-reader.ts
- 5f5ec69531981e06ef5246debe02b89323b065c928988bdc85c5d4f7675660da
- core/read/wrl-preflight.ts
- 2a4ef48b020ef98b381ab33aa34266bb5c43de716e2e38256598d69996d235ac
- core/read/wrl.ts
- ad3d6869874f7a3ac51ca09d885af0dec0376249f395bc083f5d8961d8c228af
- core/report.ts
- 3758e6ea6f7453b23bb21682caa8828464add92d839c0cc8ae30fe46c4ca54fa
- core/three-bridge.ts
- 84d16dd2834354c360a85453499abfbc462cc616714fe7a04992ab18ab5037ff
- core/units.ts
- f5367c6aa2932463c90769fd0ac080e8a42aec71facf63ae32b0b08337020963
- core/wasm.ts
- 5022bce9c3bfcf438525245373c798ff153c5ba716203ce1224318f1093da739
- core/workbench/export.ts
- cd663d1787eb8b97268bf12c9967e598223b98a9701fcd5bc948913b39725f62
- core/workbench/geometry.ts
- 7228ab0996857e68d69ccb5575be641f07159bc340bbc9b660d31d39f7deea31
- core/workbench/tessellation.ts
- f0b644e54709887e5651cdd6264e8678ed56fb9c3aebf1bd4f20124ca8cc4aea
- core/workbench/workbench-capability-report.ts
- 4f06ec57789c96892f7691c8c691867364ce80822f5cfc97bdcbe896f47e45d4
- core/write/3mf.ts
- bf9afa50480b3cb71a2a768897b7dfd5347cafa6f4d3d59550c19edf4c80446a
- core/write/gltf.ts
- f650b65a62d81b2c617448053726e89b4a6e0beb27955dea8e1d413d4156c0a0
- core/write/obj.ts
- cb0b5571284c4fe9b217a82057fd0758d406bba0fd50815313fe4ca4d4f0248c
- core/write/ply.ts
- cd71a26936091a3619cd67f9dc609101aea8a1ee84bc7b5c7fafcc551a328797
- core/write/step.ts
- 05b888318d999a952aa5d9b2bddc47a79ef9d361b6828058df4b834c6ca886fd
- core/write/stl.ts
- bed130d62ee6a645d79ea8fdd70441e9abb0962354963798387601f458167323
- core/write/usdz.ts
- 4cd8d9bf0d1aa1755c374980e5fb863b3045979e8201f8d79fc8e0857c09e962
- core/xml-namespaces.ts
- 10820125e1331ee730f577319faea4f279f1dd5a7b29a4bb7ec56475b7a9b0d8
- core/xml.ts
- b1b9e09cda3013013956dd0c0ad915dc17d6ee499d9d0ec7cd6298aa5c625184
- core/zip-strict.ts
- 76bdd9135e717129fa130c5597134b96056e77dbe2f3b4ed493dacd98a1ba972
- core/zip-write.ts
- 4db10ba581fe543ff7b3330276c8843a6ca709884b570444ab523d49aa642771
- core/zip.ts
- 71749962d39fec82ede645be7d9193edaaec800b3de71527c2e32a80ad54f529
- corpus/workbench/cylinder.iges
- 81274edc6d86ea10fe439b7077d4a0451159d16bc9802d4c778556425631a507
- corpus/workbench/cylinder.step
- 0004159d7b2a121deb50aeba379c153ed27b412a8a38782a65513b3a58583a1e
- package-lock.json
- af6a2e949a477492e6adfcc9042705c4a785cff25715acf2ed4e85578a304627
- package.json
- f506303de4ba20f6ad49a2e862be535b1374ac2d6485f1875b01c04fc1426b8f
- scripts/build-workbench-cad.py
- 6498bdf6347ba27e6d12d3818b5793113c2e74d0d227c68ba9fab7d22dba97b1
- scripts/build-workbench-evidence.ts
- 68716afd03c0d6e79a051eac57cc7a37a26218b9b119857f35dfb1663ac8770a
- test/core/workbench-3mf-baseline.test.ts
- 486b840aae41494b9a501d1403cb98f8c991725327e40132d96d2e53788ae4de
- test/core/workbench-3mf-integration.test.ts
- 7486085c9367e2a543f321d63a49dc621670141812a90b46e7651a718a0e165c
- test/core/workbench-3mf-package.test.ts
- 6a44fe9c9c5e79b026155a3d25bcfd31e41a588fcd5b0cfddb9de9f370fe444d
- test/core/workbench-3mf-reader.test.ts
- 41b8112430e7a77b34e15e7bbe081f8548d4d686c5a98ac42dc72b7d651ddb40
- test/core/workbench-collada-transforms.test.ts
- a3a0191626f4f1603d8d393437312609cdd7b32e620a77e30965bb739eb03c70
- test/core/workbench-fbx-transforms.test.ts
- 3601ac964baaae9eecda62c2301babd740a850f7e6c0d6a7569545a412105cdb
- test/core/workbench-writer-transforms.test.ts
- 03e8b9524d2b952f94c2ffef015d3e9b6d3a2f1882f16cb2138e96eeb5b85af0
- test/core/workbench-wrl.test.ts
- eb2f2188c418080e14a4695f3b3025aaeb507a7ab5ea11be55cd7e17c4af76e4
- test/core/workbench-xml-namespaces.test.ts
- de2661f4bd9414972a916eb9616c3b4f2baf4ff2a71de8268ee3a77fe8e271f5
- test/core/workbench-zip-strict.test.ts
- 36b56e2b3b46c3e0fbeba5ee022057a33b3dd91a68af83e58c388af028fe4a6c
- test/fixtures/3mf-reader-baseline.json
- 91ebcb16f07e8154612d02724e55282727fec77f831535400b294ec9b61655ff
- test/fixtures/collada-transforms-baseline.json
- aaaeeb63ed51414e8a8e44e7d8fb0b5341cc3d9f96a6107c4fe4d3ef9a407150
- test/fixtures/workbench-3mf.ts
- 1b81c046312396e774bbf4c5ee7199c2eabc02ec4253d4fa2501ba8635b1a026
- test/fixtures/workbench-challenges.ts
- 1d452755c74fed6b00b607f3b794a7213dc3c82011471b33721dafefe69715ba
- test/fixtures/workbench-rhino.ts
- 2dc0df1e0ae5bdd1142d3ffadcedc767c613fe59fb66cf59e8a9067e253461f3
- test/fixtures/workbench-scene-readers.ts
- e2c424f846248286392ff58a6d7c01a4ecf251e4dc69a32c31e4bd59dc0cd950
- test/fixtures/workbench-wrl.ts
- 808710bd63fa0d1b2cec322184cf916ffaaa21152190e62b4f723d419fa6e5fa
- test/fixtures/workbench.ts
- 06a23ec65d5e9aaf663aca6ec65a5f2005f52d4e76d7cb8f77f088cdd1b992a5
- test/fixtures/writer-transforms-baseline.json
- f421c74d527e73d00cd191611ccc0beebc0f8c37899969418446724f84fb8172
- test/fixtures/writer-transforms.ts
- 42848e9870398b7858285e1b3450147d71a2c2dc91d4c614f950cd4ac6327555