MeshVault Generator Integration

Open packaging format · No API required

Add MeshVault export
to any model generator.

Keep the generator’s normal exports. Add one more action that places its existing model bytes, available details and optional images into a standard ZIP named .mvpack.

01

Their exporter

The generator creates the package using its own language, framework and ZIP library.

02

Their existing model

Reuse the STL, 3MF or other supported bytes it already produces. Do not rewrite its geometry.

03

Only available data

Title, settings, thumbnail and gallery images are optional. Missing features never block export.

Minimum integration

One model and one JSON file

An .mvpack is an ordinary, unencrypted ZIP. A generator with no thumbnail, settings or rich metadata can still produce a useful package.

Package contents
Generated-Model.mvpack
├── Generated-Model.stl
└── meshvault.model.json
meshvault.model.json
{
  "schema": "meshvault.model",
  "version": 1,
  "title": "Generated Model"
}
Do not replace the normal export. Add a separate “Export for MeshVault” action and reuse the exact model bytes produced by the existing exporter.

Optional reference files

Instructions and colour guides can travel with the model

Add instructions, PDFs, JSON generation parameters or other files to the ZIP and list their portable paths in documentFiles. MeshVault attaches them to the imported model and shows them through Documents or Related files.

Package contents
Generated-Model.mvpack
├── Generated-Model.3mf
├── meshvault.model.json
└── documents/
    └── instructions.pdf
Document references
{
  "schema": "meshvault.model",
  "version": 1,
  "title": "Generated Model",
  "documentFiles": [
    "documents/instructions.pdf"
  ]
}

Each model can include up to ten attachments of any file type, up to 10 MiB each. PDF files must have a PDF signature. Generation parameters remain attached files; MeshVault does not regenerate a model from them.

No Base64 required

Images can remain ordinary files

Put image bytes into the ZIP and reference their paths. This works with browser Blobs, Canvas PNGs, uploaded files and server-rendered images.

Package contents
Generated-Model.mvpack
├── Generated-Model.3mf
├── meshvault.model.json
└── images/
    ├── thumbnail.png
    ├── front.jpg
    └── detail.webp
Image references
{
  "schema": "meshvault.model",
  "version": 1,
  "title": "Generated Model",
  "thumbnailFile": "images/thumbnail.png",
  "extraImageFiles": [
    "images/front.jpg",
    "images/detail.webp"
  ]
}

PNG, JPEG, BMP, GIF and WebP are accepted, up to 50 MiB per image. Prefer file references for new integrations. Existing Base64 remains supported through thumbnailDataBase64 and extraImageDataBase64.

Progressive enhancement

Include only what the generator knows

MinimumModel + title
UsefulSource, author, summary and tags
VisualThumbnail and gallery files
DetailedSettings, description and hash

The complete field definitions, exact types, Base64 alternative, supported model formats and full JSON example are in the Markdown specification.

View every metadata field

Separate model and generator credit

Keep the generator associated with the design

author is the model designer. generatorName names the generating site or tool. An optional exportDonationUrl supplies its HTTPS support page, without credentials.

Generator attribution
{
  "schema": "meshvault.model",
  "version": 1,
  "title": "Generated Vase",
  "author": "Model designer",
  "generatorName": "Example Generator",
  "exportDonationUrl": "https://example.org/support"
}

Details show “Created by [author]”, “Generated with [generator]” and a discreet “Support [generator]” link. It opens only when clicked. Omit unknown authors and optional support links. The old donationUrl spelling is unsupported.

Never export printedStatus. It is personal library state. Printing advice and printSettingsJson remain supported.

Complete model exports

Include the files the model references

Package OBJ material files and texture maps, and glTF/GLB external buffers and images with their relative layout. Embedded data needs no extra file. Missing resources, remote or absolute references, and conflicting contents fail visibly.

ZIP paths cannot contain traversal segments. References inside model files may use relative parent segments only while they stay inside the package and library. Exact filename casing matters. Existing resources with different bytes are never overwritten.

Ready-to-import example

Try the complete vase package

The original 110 mm vase example contains a 3MF, thumbnail, gallery image, metadata, print notes and JSON generation parameters. Generator branding and support URLs are clearly labelled placeholders.

Download sample .mvpack

MeshVault is downloadable software released for Windows, Linux and macOS. Use a build with current package and generator-attribution support. Core import, model loading and re-export are checked; desktop link placement and physical printing need manual verification.

Portable paths

The ZIP path controls the initial folder

model.stlImports to Review

No folder was declared, so the user chooses where it belongs.

Generated/Example/model.stlGenerated › Example

The declared path is restored from the MeshVault library root.

Always use /. Never use drive letters, absolute paths, a leading slash, or . and .. segments.

Optional multi-model form

Several model files need a manifest

When one export intentionally produces several independent library items, use meshvault.models.json with one metadata object per model. Each object identifies its fileName and exact portable relativePath.

Declare packType: "collection" for separate items, or packType: "project" for one retained archive with accessible parts. Put a project's shared title, description, images and documents in the root project object. Import options cannot change that identity.

A project without a declared folder enters Imports to Review. Only project.relativePath, such as Furniture/riser.mvpack, sets its library location; internal part folders do not. Unmarked packages keep their legacy behaviour. Project support requires an updated MeshVault build.

Try custom author credits, support links and a YouTube guide in Bracket Works →

Read the project manifest example · Try the assembly project demo

Multi-model outline
{
  "schema": "meshvault.models",
  "version": 1,
  "packType": "collection",
  "models": [
    {
      "schema": "meshvault.model",
      "version": 1,
      "title": "Base",
      "fileName": "base.stl",
      "relativePath": "Parts/base.stl"
    },
    {
      "schema": "meshvault.model",
      "version": 1,
      "title": "Lid",
      "fileName": "lid.stl",
      "relativePath": "Parts/lid.stl"
    }
  ]
}

Framework independent

Implement at the existing export boundary

  1. 1
    Find the current model export

    Identify the function that produces the final Blob, byte array, stream, buffer or file.

  2. 2
    Collect available information

    Use real values already held by the generator. Omit everything else.

  3. 3
    Create the standard ZIP

    Add model bytes, dependencies, JSON metadata, images and attached files.

  4. 4
    Return or download .mvpack

    Use MIME type application/vnd.meshvault.package+zip.

Use the project’s existing ZIP library. Browser JavaScript or TypeScript projects without one should use fflate or JSZip, including a pinned local copy for no-build sites. Do not hand-write ZIP records. No MeshVault-specific package is required.

Acceptance checks

Know when the integration is complete

  • Existing exports still work and produce the same model bytes.
  • An ordinary ZIP reader opens the .mvpack.
  • The model and correct metadata filename are present.
  • Metadata parses as UTF-8 JSON with schema version 1.
  • Every referenced image exists and contains a supported image.
  • All ZIP entry paths use / and contain no traversal.
  • Model dependencies and attachments are present and valid.
  • Generator credit and optional support links are separate from the model author.
  • Printed status is excluded.
  • Missing optional data does not block export.
  • Failures are shown instead of downloading a partial package.

Built for coding assistants

Give the full brief to an LLM

The Markdown version includes the complete contract, field table, package examples, pseudocode, browser notes, supported extensions and a copyable implementation task.

Download Markdown