Reviewed, checksummed,
and unable to change under you.

A plugin system is an invitation to run somebody else’s code against your files. This page is about what that invitation is limited to here: what review means, what the app rechecks before it installs anything, and what a plugin cannot reach even after you have said yes.

Studio 1.4.0 · macOS 14+6.5 MB download

What stands between a plugin and your files.

Four separate stages, each of which can refuse: review, the catalog entry, the download, and the permissions you grant afterwards.

01

A release is immutable once published

The archive is built deterministically and its SHA-256 recorded. A resubmission whose bytes differ is refused rather than merged, so any edit — even one reworded line — has to become a new version with its own review.

02

The checksum is rechecked on your machine

After downloading, the app recomputes the SHA-256 and compares it to the reviewed value, and checks the size matches the recorded one. A mismatch refuses the install outright rather than warning.

03

The download URL cannot point elsewhere

A catalog entry is only accepted if its download URL is https, on linelark.com, at the exact path for that plugin and version, with no query string and no fragment. A catalog that has been tampered with cannot redirect an install to another host.

04

The archive itself is constrained

No symbolic links, no paths escaping the bundle, at most 1,000 entries, at most 20 MB unpacked and 50 MB compressed. A zip that tries any of those is rejected before anything is written.

05

Capabilities are declared, then granted separately

The manifest asks for git write access, for named hosts, and for named credentials. Installing does not grant them — you switch each on in Manage Plugins, and the panel shows exactly what was asked for.

06

Changing what a plugin asks for revokes your consent

Permissions are bound to a fingerprint of the manifest’s capabilities. An update that adds a host, or moves a credential to a different header, has to ask again from scratch rather than inheriting the yes you gave the previous version.

What a plugin cannot do, whatever it asks for.

These are properties of the API surface rather than promises about plugin behaviour. A capability that does not exist cannot be requested, misused or granted by mistake.

BoundaryHow it is enforced
Read a stored credentialNo call returns one. A plugin can ask whether a credential exists and can hand one over; the value is attached to requests by the host and never enters the plugin’s context.
Send a credential somewhere elseEach credential is bound in the manifest to a single host and header. The host attaches it only to requests bound for that host.
Reach an undeclared hostHTTPS only, hosts matched exactly with no wildcards, redirects not followed, responses capped at 5 MB.
Touch arbitrary filesThere is no filesystem API. A plugin’s storage is one JSON file keyed by its own identifier, with no path to name, capped at 4 MB and 2,000 keys.
Write to disk quietlyThe only way out is a save panel. The panel is the consent, so there is no path argument for a plugin to choose.
Force push, reset or mergeNo such calls exist. Pull is fast-forward only, and a diverged push is rejected by git itself.
Discard your changes without askingThe host puts that confirmation on screen itself, in front of the call, because a plugin cannot show a dialog and one that could would be the wrong thing to trust with it.
Load on a host that is too oldA plugin declares the API generation it was written against, and an older app refuses to load it and says so rather than losing half its panel silently.

Read from the Linelark Studio 1.4.0 source, not from its documentation. Where the two disagree, this is the one that ships.

The limits of this model.

The mechanisms above are real and testable. The parts that are not mechanical are worth naming, because a trust page that only lists strengths is not a trust page.

  • Review is one person reading the codeThere is no formal audit, no third-party assessment and no automated malware analysis. Review means the bundle was packed, validated and read by the catalog owner alongside the permissions it asks for.
  • A granted permission is a real permissionGit write access means a plugin can stage, commit, switch branches and push. Network access means it can talk to the hosts it declared. The gates are consent, not sandboxing within consent.
  • A plugin can hang the editorScripts run without a watchdog. A plugin that never yields will freeze the app until it is force quit, and the constrained API cannot prevent that.
  • Sideloading bypasses the catalog entirelyA plugin folder installed by hand is not checksummed against anything, because there is nothing to compare it to. The guarantees on this page are about catalog installs.

Open it on
your own files.

Apple-notarized, macOS 14 and newer, Intel and Apple silicon.

Choose a release 6.5 MB · versioned checksums on the download page