{"id":27323324,"url":"https://github.com/spinframework/spin-plugins","last_synced_at":"2025-04-12T10:36:22.377Z","repository":{"id":104355793,"uuid":"528929358","full_name":"spinframework/spin-plugins","owner":"spinframework","description":"Repository for hosting Spin plugin manifests","archived":false,"fork":false,"pushed_at":"2025-03-25T20:45:31.000Z","size":205,"stargazers_count":11,"open_issues_count":3,"forks_count":17,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-03-25T21:32:15.178Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spinframework.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-25T16:19:59.000Z","updated_at":"2025-03-25T20:45:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"2887e4f8-8172-4709-bcd0-a223b2a42570","html_url":"https://github.com/spinframework/spin-plugins","commit_stats":null,"previous_names":["spinframework/spin-plugins"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spinframework%2Fspin-plugins","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spinframework%2Fspin-plugins/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spinframework%2Fspin-plugins/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spinframework%2Fspin-plugins/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spinframework","download_url":"https://codeload.github.com/spinframework/spin-plugins/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248554131,"owners_count":21123608,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-04-12T10:35:58.019Z","updated_at":"2025-04-12T10:36:21.926Z","avatar_url":"https://github.com/spinframework.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spin Plugin Manifests\n\nThis repository acts as an index for hosting spin-maintained and community-maintained manifests for Spin plugins. These plugins can be installed via the Spin CLI with the `spin plugin install $name` command. By default, Spin will look for a plugin manifest named `$name.json` in this repository; however, Spin can also be directed to use a local manifest or one at a different remote location using the `--file` or `--url` flag, respectively.\n\n## What is a Spin plugin manifest?\n\nA Spin plugin is defined by a Spin plugin manifest, which is a JSON file that conforms to the [Spin plugin manifest schema](./json-schema/spin-plugin-manifest-schema-0.1.json). A plugin manifest defines a plugin’s name, version, license, homepage (i.e. GitHub repo), compatible Spin version, and gives a short description of the plugin. It also points to the plugin source for various operating systems and platforms.\n\n## Adding a Spin plugin manifest\n\nTo add a manifest for a plugin named `$name` to this index, run `./create-manifest.sh $name`, which creates a new subfolder `manifests/$name` and adds the manifest to it. Modify the example manifest to fit your plugin, being sure to note [naming conventions](#spin-plugin-naming-conventions) and [compatibility with Spin](#plugin-compatibility).\n\n### Spin Plugin Naming Conventions\n\nThe following naming conventions are to be followed for plugins where `$name` is the name of the plugin.\n\n- The `name` field in the plugin manifest must be `$name`.\n- Even if the majority of plugins live within the Spin plugins repository, there is a need to distinguish between plugins that are maintained by Spin vs community plugins. They will be distinguished via the plugin name inside the manifest. The name of community plugins must not have \"spin\" as a prefix, while plugins maintained by Spin should contain a prefix of `spin-`.\n- Manifests for older versions of the plugin can be retained in the Spin Plugins repository named `$name@$version.json` where `$version` is the value of the `version` field of the manifest. These specific versions can be installed using the `--version` flag.\n- The binary of the plugin must be named `$name`\n- The latest plugin manifest file must be named `$name.json`\n- The license for the plugin must be named `$name.license`\n\n### Plugin Compatibility\n\nSpin plugins must specify compatible versions of Spin in the `spinCompatibility` field of the manifest. The field is expected to be a list of rules, with each rule being a [comparison operators](https://docs.rs/semver/1.0.13/semver/enum.Op.html) (`=, \u003e, \u003e=, \u003c, \u003c=, ~, ^, *`) along with the compatible version of Spin. The JSON schema validates that the `spinCompatibility` field is a string that matches the following regular expression: `^([\u003e\u003c~^*]?[=]?v?(0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?(\\.(0|[1-9]\\d*))?(-(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(\\.(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\\+[0-9a-zA-Z-]+(\\.[0-9a-zA-Z-]+)*)?)(?:, *([\u003e\u003c~^*]?[=]?v?(0|[1-9]\\d*)(\\.(0|[1-9]\\d*))?(\\.(0|[1-9]\\d*))?(-(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(\\.(0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*)?(\\+[0-9a-zA-Z-]+(\\.[0-9a-zA-Z-]+)*)?))*$`.\nFor example, specifying `=0.4` means that the plugin is compatible with versions equivalent to `\u003e=0.4.0, \u003c0.5.0`. Multiple rules may be specified (i.e. `\u003e=0.2, \u003c0.5`).\n\nSpin will use the [`semver`](https://docs.rs/semver/1.0.13/semver/struct.VersionReq.html) crate that inspired this syntax to verify that the plugin works on the current version of Spin. If it does not, it will fail to install the plugin and log a message explaining the version mismatch.\n\n## Validating Plugin Schemas\n\nA plugin schema can be validated locally using any JSON schema validator. The spin plugins GitHub workflow that must succeed before a plugin is merged uses [ajv](https://ajv.js.org/), which can also be run locally as follows:\n\n1. Install [`ajv-cli`](https://www.npmjs.com/package/ajv-cli)\n1. Get the current schema used by spin and validate all json plugin manifests against it:\n\n    ```sh\n    export JSON_SCHEMA_VERSION=$(cat json-schema/version.txt)\n    ajv -s json-schema/spin-plugin-manifest-schema-$JSON_SCHEMA_VERSION.json -d \"manifests/*/*.json\" --spec=draft2019\n    ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspinframework%2Fspin-plugins","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspinframework%2Fspin-plugins","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspinframework%2Fspin-plugins/lists"}