Skip to content
DocsShare a plugin

PluginsEarly

Share a plugin

Share a plugin through a git repository, pin it for a team in the repository it serves, or publish it to the plugin store. Plus updates, rollback and importing VS Code and Zed extensions.

Whoever installs your plugin approves it on their own machine, whichever way it reaches them. Sharing a plugin never shares an approval.

Through git

Push the plugin’s folder to a public repository. Anyone can install it from there:

gr plugin install github.com/you/greeter
gr plugin install github.com/you/plugins/greeter        # a folder inside the repository
gr plugin install github.com/you/greeter@v0.2.0         # a branch, tag or commit
gr plugin install https://git.example.com/you/greeter.git

A link to the repository or a folder on GitHub, GitLab, Codeberg or Bitbucket works too, as copied from the browser. Graphide fetches public repositories over HTTPS, up to 64 MiB, and reads the files without checking anything out, so nothing in the repository runs while it is fetched.

An install records the commit it came from. Without @, gr plugin update follows the repository’s default branch; with one, it stays at what you named. Each update is a new version, and waits for approval.

For a team

To give everyone working in a repository the same plugins, list them in that repository’s .graphide/plugins.toml, each pinned to the exact contents you reviewed:

[plugins.greeter]
source = "github.com/you/greeter@v0.2.0"
hash = "6f5b8e0a0cb9d575bfaa41ecdeb715b1ee02bdae239bc104dcf73afe40700f20"

gr plugin hash <folder> prints a folder’s hash, offline. Commit the file. Each teammate then runs, in the repository:

gr plugin install --from-repo

Every plugin is fetched from its source and checked against its hash. One whose contents differ is refused. Each person still approves each plugin for themselves, and the plugins run in that repository only. Until then, gr plugin list --root . shows them as suggested.

Your own list works the same way without hashes: name sources in [plugins.<name>] of your config.toml and run gr plugin install --from-config on a new machine.

In the plugin store

The store lists open-source plugins. Anyone can find and install one by its name:

gr plugin install store:greeter
gr plugin install store:greeter@0.2.0

To publish, the plugin’s folder needs one of these licences in a LICENSE, LICENCE or COPYING file at its root: MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, MPL-2.0, LGPL-2.1-only, LGPL-3.0-only, GPL-2.0-only, GPL-3.0-only, AGPL-3.0-only or Unlicense. You also need to be signed in.

gr plugin publish ./greeter                    # or a repository link

The first time, you choose a public publisher handle, which accepts the Publisher Terms. Then gr plugin publish makes a draft, shows you the same review a person sees before approving, and asks you to type yes on your terminal. A draft you leave waits; confirm it later with gr plugin publish --confirm greeter@0.1.0, or drop it with gr plugin unpublish greeter@0.1.0.

  • A plugin’s first version, and any version that asks for something the last listed one did not, waits for review by Graphide’s staff. A version that asks for nothing new is listed when you confirm it.
  • Each version must be higher than every version you confirmed before.
  • The name is yours once you publish it.
  • Only a person confirms or withdraws a version, on their own terminal; the daemon refuses one that comes from inside an agent.

If a listed version turns out to be unsafe, staff can pull it. Graphide checks the store when the daemon starts and once a day: a version that was pulled is switched off on every machine that has it, and gr plugin list and the app’s Plugins page say why. You may switch it on again.

Update and roll back

gr plugin update greeter      # fetch the newest version; it waits for approval
gr plugin rollback greeter    # put back the version you approved before

The same daily check finds updates to plugins from the store, and gr plugin list names them.

Bring in a VS Code or Zed extension

Themes, icon sets, languages and snippets from an editor extension can become a plugin:

gr plugin import open-vsx:dracula-theme.theme-dracula
gr plugin import zed:catppuccin
gr plugin import ./some-extension.vsix

open-vsx: fetches from Open VSX, and zed: from Zed’s registry. A .vsix, a Zed extension’s .tar.gz or an unpacked extension’s folder works too. The import keeps only data: no script, native program or other WebAssembly is ever copied, and it lists what did not carry over. The plugin it writes waits for your approval like any other. Imported themes then appear among your theme choices by their names.

These docs describe Graphide 0.2.16, the latest release. Something wrong or missing? Tell us onDiscord or at hello@graphide.com.