Registry API
Everything the plugin pages show, as data your tool can read: the catalog, one plugin's record, its README, example and changelog. The endpoints are public.
Fair use
- 120 requests a minute per address. Over that you get
429with aretry-afterheader. - Cache what you fetch. Answers carry
cache-control(five minutes) and anETag; sendIf-None-Matchand an unchanged answer costs a304. - Name your tool in the
User-Agentheader, so we can reach you if something goes wrong on either side. - Read the API, not the pages. Scraping the HTML is slower for you and heavier for us, and it breaks when the pages change.
- Need more than this? Write to [email protected] and say what you are building.
The catalog
GET https://dartpub.dev/api/plugins
Every published plugin, fifty a page, by name. Parameters, all optional:
q: search, ranked like the site's search box. When present,sortis ignored.owner: one GitHub login, for exampleDartNative.sort:name(default),installs,active_apps,upvotes,created.status:published(default),archived,all. Archived plugins are delisted but their versions still install.limit: 1 to 100.page: from 1.
The answer is { count, page, limit, plugins: [ … ] },
each plugin in the shape below without the versions list.
One plugin
GET https://dartpub.dev/api/plugins/<name>
Answers 404 for a name that is not published. Example,
shortened:
{
"name": "dartnative_camera",
"owner": { "login": "DartNative", "type": "organization", "url": "https://github.com/DartNative" },
"publisher": { "handle": "…", "name": "…", "url": "https://dartpub.dev/@…", "verified": true },
"tagline": "…",
"description": "…",
"license": { "label": "dartpub Free" },
"source": "sdk",
"repo": { "name": "DartNative/dartnative/plugins/dartnative_camera", "url": "…", "docs_url": "…", "example_url": "…" },
"runtime_min": "DartNative ≥ 3.0",
"avatar": { "url": null, "initials": "dc", "colors": ["oklch(…)", "oklch(…)"] },
"status": "published",
"created_at": "2026-…", "updated_at": "2026-…",
"stats": { "weekly_installs": 0, "active_apps": 0, "upvotes": 0, "rating": { "stars": 4.1, "count": 3 } },
"latest": { "version": "1.2.0", "published_at": "2026-…" },
"versions": [ { "version": "1.2.0", "published_at": "…", "yanked": false, "license": "dartpub Free", "has_changelog": true } ],
"links": { "page": "…", "api": "…", "readme": "…", "example": "…", "changelog": "…", "pub": null }
} sourceis where the code comes from:pubmeans the source archive is served by the pub endpoint linked aslinks.pub;sdkmeans the plugin ships inside the DartNative SDK andlinks.pubis null.latestis the newest version that is not yanked.stats.rating.starsis the weighted score the site shows;ratingis null until someone rates.updated_atis the newest version's date.
README, example, changelog
GET https://dartpub.dev/api/plugins/<name>/readme GET https://dartpub.dev/api/plugins/<name>/example GET https://dartpub.dev/api/plugins/<name>/changelog
Markdown, as the author pushed it (text/markdown). Add
?format=html for the sanitized HTML fragment the plugin
page shows, with relative links and images already pointing at the
plugin's folder on GitHub. A plugin without an example answers
404; the changelog is every version's notes, newest
first, one ## heading per version.
What stays the same
A field named on this page is never removed or renamed without a line
in the changelog below. New fields may appear at any time; read what
you need and ignore the rest. The pub protocol endpoint
(/api/packages/<name>) is a separate contract for
the dn tool and is not part of this API.
Changelog
- 2026-09-24. First release, with the catalog, one plugin, README, example and changelog.