{"id":50529418,"url":"https://github.com/skpm-dev/registry","last_synced_at":"2026-06-03T11:31:04.567Z","repository":{"id":356822358,"uuid":"1234183085","full_name":"skpm-dev/registry","owner":"skpm-dev","description":"Package registry and API for skpm","archived":false,"fork":false,"pushed_at":"2026-05-17T22:17:30.000Z","size":137,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-18T00:23:19.700Z","etag":null,"topics":["go","minecraft","package-registry","skript"],"latest_commit_sha":null,"homepage":"https://github.com/skpm-dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skpm-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-09T21:17:39.000Z","updated_at":"2026-05-17T22:17:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/skpm-dev/registry","commit_stats":null,"previous_names":["skpm-dev/registry"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/skpm-dev/registry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skpm-dev%2Fregistry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skpm-dev%2Fregistry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skpm-dev%2Fregistry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skpm-dev%2Fregistry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skpm-dev","download_url":"https://codeload.github.com/skpm-dev/registry/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skpm-dev%2Fregistry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33863265,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["go","minecraft","package-registry","skript"],"created_at":"2026-06-03T11:31:03.763Z","updated_at":"2026-06-03T11:31:04.552Z","avatar_url":"https://github.com/skpm-dev.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# skpm Registry\n\n**[skpm.org](https://skpm.org)** — the package manager for Skript.\n\n\u003e The HTTP API and GitHub-backed data store powering the skpm ecosystem.\n\nPackage metadata and script files live in this repository as version-controlled JSON, accessed via `raw.githubusercontent.com`. Download counts are stored in Postgres. The registry itself holds no persistent state beyond those two sources.\n\n---\n\n## API\n\n**Base URL:** `https://registry.skpm.org`\n\n| Method | Endpoint | Description |\n|---|---|---|\n| `GET` | `/packages` | Full package index |\n| `GET` | `/packages/:name` | Metadata for one package (all versions) |\n| `GET` | `/packages/:name/versions/:version/files/:file` | Download a script file (counts the download, redirects to raw GitHub) |\n| `GET` | `/search?q=` | Search packages by name or description |\n| `POST` | `/publish` | Publish a new package or version (requires `Authorization: Bearer \u003cGitHub PAT\u003e`) |\n\n**Rate limits:** 10 req/min per IP on `POST /publish`; 120 req/min per IP globally.\n\n---\n\n## Integration API\n\nThird-party services can publish packages and fetch file contents via a dedicated API. All integration endpoints require an API key.\n\nTo get an API key, open an issue on this repository.\n\n### Authentication\n\nInclude your API key in every request:\n\n```\nAuthorization: Bearer \u003capi-key\u003e\n```\n\n### Endpoints\n\n| Method | Endpoint | Description |\n|---|---|---|\n| `POST` | `/v1/packages` | Publish a package (see below) |\n| `GET` | `/v1/packages/:name/versions/:version/files/:file` | Fetch raw file content inline |\n\n### Publish a package\n\n`POST /v1/packages`\n\nRequires two headers:\n- `Authorization: Bearer \u003capi-key\u003e` — your integration API key\n- `X-GitHub-Token: \u003cgithub-pat\u003e` — a GitHub PAT with `read:user` scope, used to verify your identity as the package author\n\n```json\n{\n  \"manifest\": {\n    \"name\": \"my-package\",\n    \"version\": \"1.0.0\",\n    \"description\": \"A short description\",\n    \"skript\": \"2.9\",\n    \"minecraft\": \"1.21\"\n  },\n  \"files\": {\n    \"my-package.sk\": \"# script content here\"\n  }\n}\n```\n\nReturns `201` with a pull request URL on success. The package goes live once a maintainer merges the PR.\n\n### Fetch file content\n\n`GET /v1/packages/:name/versions/:version/files/:file`\n\nReturns the raw script file content as `text/plain`. Also counts the download.\n\n---\n\n## Package format\n\nPackages are stored as `packages/\u003cname\u003e.json` in this repository:\n\n```json\n{\n  \"name\": \"economy\",\n  \"description\": \"A Vault-backed economy system\",\n  \"author\": \"adammcgrogan\",\n  \"latest\": \"1.0.1\",\n  \"versions\": {\n    \"1.0.1\": {\n      \"skript\": \"\u003e=2.8.0\",\n      \"minecraft\": \"\u003e=1.20\",\n      \"addons\": {},\n      \"dependencies\": {},\n      \"files\": [\n        {\n          \"name\": \"economy.sk\",\n          \"url\": \"https://registry.skpm.org/packages/economy/versions/1.0.1/files/economy.sk\",\n          \"sha256\": \"sha256:a1b2c3...\"\n        }\n      ]\n    }\n  }\n}\n```\n\nScript files live at `files/\u003cname\u003e/\u003cversion\u003e/\u003cfilename\u003e`. A flat `index.json` at the repo root powers search and listing.\n\n---\n\n## Publish flow\n\n1. The [skpm CLI](https://github.com/skpm-dev/cli) sends `POST /publish` with the manifest and file contents\n2. The registry validates the request (name format, semver, ownership, duplicate version check)\n3. A branch `publish/\u003cname\u003e-\u003cversion\u003e` is created and script files + package metadata are committed to it\n4. A pull request is opened — a maintainer reviews and merges it\n5. The package is live once merged\n\nOwnership is enforced server-side: the GitHub identity behind the bearer token must match the stored author for all versions after the first.\n\n---\n\n## Repository structure\n\n```\nregistry/\n├── index.json                   ← flat index of all packages (rebuilt post-merge)\n├── packages/\n│   ├── economy.json\n│   └── join-message.json\n└── files/\n    ├── economy/\n    │   └── 1.0.1/\n    │       └── economy.sk\n    └── join-message/\n        └── 1.0.0/\n            └── join-message.sk\n```\n\n---\n\n## Related\n\n- **[skpm-dev/cli](https://github.com/skpm-dev/cli)** — CLI tool for publishing packages\n- **[skpm-dev/plugin](https://github.com/skpm-dev/plugin)** — Bukkit plugin for installing packages in-game\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskpm-dev%2Fregistry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskpm-dev%2Fregistry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskpm-dev%2Fregistry/lists"}