Plugin Marketplace
Sign in

Documentation

All articles

Building a plugin

The plugin bundle

What goes in the zip, the fields of manifest.json and which files are allowed.

A bundle is a zip file. At its root sits manifest.json, next to it the Lua files and any assets. Zip the contents of the folder, not the folder itself.

manifest.json
flow_tower.lua
assets/tower.svg
manifest.txt     added when you sign the bundle
manifest.sig     added when you sign the bundle

Allowed files

A bundle may contain only .lua, .json, .stl, .svg, .png, .md and .txt files, plus manifest.sig. Anything else, including symbolic links and other scripting languages, is refused on upload. The files are unpacked onto the user’s disk, so the list is kept short on purpose.

manifest.json

{
  "id": "com.example.flow-tower",
  "name": "Flow Tower",
  "version": "1.2.0",
  "author": "3df31bf0-7480-4969-aeff-de834c0e3a48",
  "license": "MIT",
  "min_slicer_version": "3.0.0-alpha13",
  "required_apis": { "project.plugin": "1.0.0" },
  "description": "Builds a flow tower to calibrate extrusion.",
  "web": "https://example.com/flow-tower",
  "repo": "https://github.com/example/flow-tower"
}

Required fields

Field What it is
id The plugin’s identity, reverse-DNS and lower case, e.g. com.example.flow-tower. It never changes and must be in one of your namespaces.
name The name people see, up to 160 characters.
version Semantic version, e.g. 1.2.0. Every release needs a new one.
author Your author id.
license The licence the plugin is under, e.g. MIT or AGPL-3.0.
min_slicer_version The oldest PrusaSlicer the plugin works with, e.g. 3.0.0-alpha13. A pre-release counts as older than its release, so 3.0.0 leaves out every 3.0.0 alpha and beta.
required_apis The plugin API versions it needs, e.g. { "project.plugin": "1.0.0" }. The Lua API reference shows what each version offers.

Optional fields

Field What it is
max_slicer_version The newest PrusaSlicer it works with.
description A longer description, Markdown.
category A catalogue category.
web The plugin’s homepage.
repo The source repository.
permissions What the plugin uses, shown to users: filesystem.read, filesystem.write, network.http, network.socket, process.spawn, clipboard.read, clipboard.write.
platforms win, mac, linux. All three when left out.

Name and description. The catalogue takes the name, description and links from manifest.json on the first release. After that you change them in the author console, where every edit is checked before it goes live. Later releases do not change them.