This repo includes a community-maintained component registry of Streamlit components under components/registry/components/. Each file is a small JSON document describing a single component found on the internet.
If you maintain a Streamlit Component, we’d love for you to add it here via a pull request!
- Fork this repository.
- In your fork, open
components/registry/components/and click Add file → Create new file. - Name your file:
components/registry/components/<slug>.json- Use a short, URL-safe slug like
streamlit-my-component.json(lowercase + hyphens is best).
- Use a short, URL-safe slug like
- Copy/paste the Starter template below, fill in your values.
- Commit to a new branch in your fork.
- Open a Pull Request back to this repo.
When you open the PR, CI will automatically validate your JSON.
Once your PR is merged, your component will appear in the gallery after the next weekly refresh (runs early Monday UTC / Sunday evening PT). Metrics like GitHub stars and PyPI downloads are updated automatically.
Tip: If you’re editing in VS Code / GitHub’s web editor, you should get live validation + autocomplete from the schema once
.vscode/settings.jsonis present in the repo.
{
"schemaVersion": 1,
"title": "My Component",
"author": {
"github": "your-github-username",
"displayName": "Your Name (optional)"
},
"links": {
"github": "https://github.com/OWNER/REPO",
"pypi": null,
"demo": null,
"docs": null
},
"media": {
"image": null
},
"install": {
"pip": "pip install your-package-name"
},
"governance": {
"enabled": true,
"notes": null
},
"categories": ["Widgets"]
}CI runs components/registry/scripts/validate.py on every PR that touches components/registry/components/**.
Your JSON must conform to components/registry/schemas/component.schema.json. Key points:
schemaVersion: must be1.title: 1–80 characters.author.github: GitHub username without@.links.github: must be a repo URL likehttps://github.com/<owner>/<repo>(no extra path segments).links.pypi: PyPI project name (not a URL), ornull.links.docs: optional URL to your component’s documentation, ornull.- No extra keys: the schema uses
additionalProperties: false, so don’t add custom fields.
The validator enforces a few “lint” rules to keep the registry stable:
- JSON-only directory: every file in
components/registry/components/must end with.json(placeholder files like.gitkeepwill fail CI). - Unique repo:
links.githubmust be unique across all submissions. If the same repo was already submitted, CI will fail. - HTTPS only: all URLs must be
https://and must not usejavascript:,data:, orfile:schemes. - Stable images (
media.image): must be a stablehttps://URL.- Signed/expiring URLs (S3/GCS/CloudFront-style query params like
X-Amz-Signature,Expires, etc.) are rejected. - Proxy hosts like
camo.githubusercontent.comare rejected.
- Signed/expiring URLs (S3/GCS/CloudFront-style query params like
- File size: each
components/registry/components/*.jsonmust be ≤ 50 KB.
Pick at least one category (you can pick multiple). Allowed values are:
LLMsWidgetsChartsAuthenticationConnectionsImages & videoAudioTextMapsDataframesGraphsMolecules & genesCode editorsPage navigationDeveloper toolsIntegrations
Open a draft PR and let CI validate it automatically.
From the repo root:
uv sync
uv run python components/registry/scripts/validate.pyIf it prints OK: all validated files passed., your submission is valid.
- Don’t edit
components/registry/compiled/components.jsondirectly — it’s a generated artifact.