JSON and binary glTF for the same geometry
Binary and JSON glTF can carry the same geometry while packaging their buffers differently. These two self-contained files represent a ten-millimetre tetrahedron with four triangles. Neither sample contains textures, animation, or an external resource dependency.
How this was measured
Write the same millimetre source model as GLB and as JSON glTF with an embedded data URI. Measure the actual byte lengths, then read each output and inspect triangle count and bounds. The glTF coordinate convention expresses the ten-millimetre source extent as 0.01 metres; float32 storage explains the small observed difference from that decimal value.
| Measurement | Value |
|---|---|
| glb Bytes | 676 |
| gltf Bytes | 1232 |
| glb / triangles | 4 |
| glb / dimensions | 0.009999999776482582 × 0.009999999776482582 × 0.009999999776482582 |
| glb / units | m |
| glb / open Edges | 0 |
| glb / inconsistent Edges | 0 |
| glb / non Manifold Edges | 0 |
| glb / degenerate Triangles | 0 |
| glb / components | 1 |
| gltf / triangles | 4 |
| gltf / dimensions | 0.009999999776482582 × 0.009999999776482582 × 0.009999999776482582 |
| gltf / units | m |
| gltf / open Edges | 0 |
| gltf / inconsistent Edges | 0 |
| gltf / non Manifold Edges | 0 |
| gltf / degenerate Triangles | 0 |
| gltf / components | 1 |
| gltf Buffer | embedded data URI |
What the result does not establish
This compares packaging for a geometry-only sample. It does not show that the reader handles an arbitrary external .bin file, every compression extension, or a complete material and animation pipeline. A successful geometry readback says nothing about scene properties that were not in the example.
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.
- The same tetrahedron in binary glTF. (GLB, 676 bytes)
SHA-256
760b9725fd3cc64d5893cf7d245d606fbd7d71be52b0ee50ca2c8de7bd09f52e - The same tetrahedron in JSON glTF with embedded buffer. (GLTF, 1,232 bytes)
SHA-256
292c4ea69ce09e0ad1cad00687c2b0e5447d9fc3e4e15ecc257f12b5548bf0d9
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