streamlit/update-docs-for-release
Update the streamlit/docs repo for a new Streamlit release. Covers branch setup, release notes, API docstring generation, and API tiles/pages. Use when the user asks to update docs for a new Streamlit release, add release notes, generate docstrings, or add API tiles for new commands.
npx skills add https://github.com/streamlit/docs --skill update-docs-for-release
Follow these steps in order for each new Streamlit release (x.y.0).
Pull the latest main and create a release branch:
git checkout main && git pull origin main
git checkout -b docs/streamlit-x.y-release
You need the release notes text. If the user hasn't provided them, ask them to run the generating-changelog skill in the streamlit/streamlit repo and paste the output here.
Two files to update:
content/develop/quick-references/release-notes/_index.md
## Version x.x.0 (latest) section with the new releasecontent/develop/quick-references/release-notes/<year>.md
Format each section as:
## **Version x.y.0**
_Release date: Month D, YYYY_
**Highlights**
...
**Notable Changes**
...
**Other Changes**
...
Remove any duplicate bullets from the provided notes before adding them.
Run python/generate.py in a clean virtualenv with the correct Streamlit version.
cd python
python3 -m venv .venv-generate
.venv-generate/bin/pip install -q streamlit docstring-parser docutils numpydoc
.venv-generate/bin/python -c "import streamlit; print(streamlit.__version__)"
.venv-generate/bin/python generate.py
Important:
x.y.0 release key in streamlit.json, not patch releases (e.g. 1.59.0 not 1.59.2). After running, rename the key if pip installed a patch release: sed -i '' 's/"x.y.z":/"x.y.0":/' python/streamlit.json and do the same for GitHub source URLs in the blob links.obj_key dict in generate.py and re-run.streamlit.json with Prettier after generating: npx prettier --write python/streamlit.json"x.y.0" top-level key should appear — no existing version keys should be modified or removed. Check with: git diff python/streamlit.json | grep "^@@"— there should be exactly one hunk at the end of the file.For each new command introduced in the release (not new parameters on existing commands), add a tile and detail page.
Detail page — create content/develop/api-reference/<section>/st.<command>.md:
---
title: st.<command>
slug: /develop/api-reference/<section>/st.<command>
description: <one-line description>
keywords: st.<command>, ...
---
<Autofunction function="streamlit.<command>" />
For column config types, use content/develop/api-reference/data/column_config/<name>.md with:
<Autofunction function="streamlit.column_config.<TypeName>" />
Tile — add to both:
_index.md (e.g. content/develop/api-reference/status/_index.md)content/develop/api-reference/_index.mdTile format:
<RefCard href="/develop/api-reference/<section>/st.<command>">
<Image pure alt="screenshot" src="/images/api/<command>.jpg" />
<h4>Title</h4>
One-line description.
st.<command>(...)
</RefCard>
**Menu** — add an entry in `content/menu.md` in the correct position.
**Images** — do not generate images. Ask the user to provide one, and point them to the Figma template file for reference:
https://www.figma.com/design/MOGYWhaoD7OON4HsnbAT1z/API-illustrations?node-id=0-1&t=bs0XekxOUD8pO0to-1
Tell them the required format:
- **Format:** JPG
- **Size:** 862×862px for data/widget elements, 862×816px for status/layout elements (match the dimensions of a similar existing image in `public/images/api/`)
- They can also provide a PNG and you will convert it with: `sips -s format jpeg input.png --out public/images/api/<name>.jpg`
Place images at `public/images/api/<name>.jpg`.
## 5. Example apps
For each new command, check `python/streamlit.json` under the `x.y.0` key for embedded `<Cloud name="...">` elements in the `examples` field. These are interactive apps that need to be deployed to Community Cloud.
For each Cloud embed found:
1. Extract the `name` attribute (e.g. `doc-mermaid-chart`) — this is the required subdomain.
2. Extract the code from the adjacent `<pre>` block (strip HTML tags and unescape HTML entities).
3. Save the code to `python/api-examples-source/<section>.<command_or_variant>.py` following the existing naming convention (e.g. `charts.mermaid_chart.py`, `status.skeleton_standalone.py`).
After adding all files, present a table to the user:
| App | Deploy link | GitHub file | Subdomain |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- | -------------- |
| `<description>` | [Deploy](https://share.streamlit.io/deploy?repository=streamlit/docs&branch=main&mainModule=python/api-examples-source/<filename>.py&subdomain=<cloud-name>) | [<filename>.py](https://github.com/streamlit/docs/blob/main/python/api-examples-source/<filename>.py) | `<cloud-name>` |
The user will handle deploying the apps to Community Cloud.
## 6. Commit and push
Make focused commits per logical unit of work (release notes, docstrings, API tiles, images, example apps). Push to the branch and open a PR against `main`.
Take streamlit/update-docs-for-release from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip, npx.
Without those the skill loads but fails at the first command.