Official registry of extensions for Granspace — a local project manager. An extension teaches Granspace about a stack: how to detect a project and what commands it can run. Extensions are declarative JSON (no code runs), so installing one from here is safe.
Granspace ships built-ins (Node, Docker Compose, Unity, PHP, Python, Go, Rust). This repo adds more, community-maintained.
In Granspace → Settings → Extensions:
- Browse official extensions — lists everything in this registry; click Install.
- Install from a URL — paste any manifest URL (this repo's or your own).
Granspace validates the manifest, stores it, and merges it with the built-ins.
registry.json— the index Granspace reads (id, name, description, manifest URL).extensions/— one JSON manifest per extension.
Registry URL (used by Granspace):
https://raw.githubusercontent.com/granspace/extensions/main/registry.json
{
"id": "ruby",
"name": "Ruby",
"detectors": [
{ "type": "ruby", "runnable": true, "files": ["Gemfile"] }
],
"commandSources": [
{
"provider": "static",
"commands": [
{ "key": "ruby:install", "label": "install", "command": "bundle install", "kind": "build" },
{ "key": "ruby:test", "label": "test", "command": "bundle exec rake test", "kind": "test" }
]
}
]
}| Field | Notes |
|---|---|
id |
kebab-case, unique, matches the filename (extensions/<id>.json). Can't shadow a Granspace built-in. |
name |
Display name. |
detectors[] |
{ type, runnable, files } — a project matches if any of files exists at its root. Files are exact names, not globs. |
commandSources[] |
Optional. How the stack's commands are discovered. |
static— a fixed list:commands: [{ key, label, command, kind? }].scriptsFile— reads thescriptsobject of a JSON file, e.g.{ "provider": "scriptsFile", "file": "package.json", "keyPrefix": "npm", "runTemplate": "npm run {name}" }({name}is replaced with each script name).
kind ∈ dev | build | test | prod | other.
Detection uses exact filenames (not globs), so pick a fixed marker file a project always has (
Gemfile,pom.xml,mix.exs, …).
Add a stack in three steps — see CONTRIBUTING.md:
- Add
extensions/<id>.json. - Add an entry to
registry.json. node scripts/validate.mjs(also runs in CI on your PR).
MIT — see LICENSE.