Renders GitHub issues and PRs as tables from search queries or GitHub URLs. See the index page for installation and tokens.
Token scopes
Fine-grained PATs:
Issues (read-only),Pull requests (read-only), andProjects (read-only)if you query project boards;Metadatais implied.Classic PATs:
repo(orpublic_repofor public data only),read:org(for org project views), andproject(for project boards).GitHub Actions: usually works for public data but may need
permissions: contents: read, issues: read, pull-requests: read, projects: readif you query projects.Fine-grained PATs must also be installed on every repository you query. A 401 with correct scopes usually means the token isn’t granted to one of the repos in your query.
Quick Start¶
The directive takes a GitHub search query and renders matching issues as a table. Use :columns: to pick which columns to show (default: title, author, state, reactions) and :limit: to control how many rows (default 25). Results are sorted first, then trimmed to the limit.
:::{issue-table} org:jupyter-book is:pr is:open sort:reactions-desc
:columns: title, author, reactions, updated
:limit: 5
:::| TITLE | AUTHOR | REACTIONS | UPDATED |
| 📓 Add `ipynb` as export format | rowanc1 | 🎉 2 · 👀 1 | 2026-06-15 |
| Simplified Admonition Titles | rowanc1 | 👍 1 · 👀 1 | 2023-03-19 |
| Add a brief guide about AST structure and metadata | choldgraf | 👍 1 · ❤️ 1 | 2026-06-15 |
| 📂 Allow renderer/runtime extensions with Module Fedaration | agoose77 | 👀 2 | 2026-07-08 |
| 📖 Concepts and Terms | stefanv | 🚀 1 | 2026-03-19 |
Sorting¶
Use GitHub’s native sort: in your search query for single-column sorting (recommended). See GitHub’s sorting docs for supported fields. For multi-column or project-field sorting, use the :sort: option with comma-separated column-direction pairs:
:::{issue-table} org:jupyter-book is:pr is:open sort:updated-desc
:columns: title, author, reactions, updated
:sort: reactions_thumbsup-desc,updated-desc
:limit: 10
:::*Error: fetching GitHub data: Resource limits for this query exceeded.*
Date Formatting¶
Use :date-format: to control how created, updated, and closed columns display: either relative (e.g., “2d ago”) or absolute (default, YYYY-MM-DD).
:::{issue-table} org:jupyter-book is:pr is:open sort:updated-desc
:columns: title, author, created, updated
:date-format: relative
:limit: 10
:::| TITLE | AUTHOR | CREATED | UPDATED |
| 🧹 Remove test-case patching in myst-parser tests | fwkoch | 2y ago | 2h ago |
| 🚀 Release | github-actions | 1mo ago | 3h ago |
| Respect heading numbering offsets in references | sapunyangkut | 1d ago | 1d ago |
| Use pre-rendering for SSG in React Router 7 | agoose77 | 7d ago | 1d ago |
| Add public manifest to site builds | agoose77 | 1d ago | 1d ago |
| Upgrade to React Router 7 | agoose77 | 8d ago | 3d ago |
| Upgrade from Remix Compiler to Vite 5 | agoose77 | 8d ago | 3d ago |
| Add Jupyter-compatible notebook cell deep-links | Darshan808 | 20d ago | 7d ago |
| Remove autoplay and add controls to the Video component | goekce | 7d ago | 7d ago |
| Add avif and webm to the list of supported extensions | goekce | 7d ago | 7d ago |
Column Widths¶
Set column width percentages (one per column). Values are normalized proportionally if they sum to more than 100%.
:::{issue-table} org:jupyter-book is:pr is:open sort:reactions-desc
:columns: title, author, reactions
:widths: 60,20,20
:limit: 5
:::Truncation¶
Limit body, description, and summary columns to approximately N characters of visible text. Truncated content appends a “More” link to the full issue. Truncation is applied after Markdown is parsed, so it never produces broken links or formatting.
Options: :body-truncate: controls body and description; :summary-truncate: controls summary (falls back to :body-truncate: when not set)
:::{issue-table} https://github.com/orgs/jupyter-book/projects/1/views/7
:columns: title, body, summary
:limit: 5
:body-truncate: 200
:summary-truncate: 150
:::| TITLE | BODY | SUMMARY |
| 🟢 Use React-Router instead of Remix | I’ve seen a few discussions about using React Router - creating this issue to track the topic overall, reasons for doing it, and implementation and design
🟢 More | I’ve seen a few discussions about using React Router - creating this issue to track the topic overall, reasons for doing it, and implementation and... 🟢 More |
| 🟢 Allow authors to link custom JavaScript scripts to their pages by adding HTML manually or via configuration | As an author, I want to be able to include custom JavaScript libraries and scripts on any page in my MyST site, so that I can enable extra functionality for readers that isn’t packaged with mystmd. A... 🟢 More | As an author, I want to be able to include custom JavaScript libraries and scripts on any page in my MyST site, so that I can enable extra... 🟢 More |
| 🟢 Allow users to specify static files to include in their MyST sites | It is often useful to be able to link static assets with your site. For example, if you want to link to a video file directly (rather than embedding it), a data file like a CSV, or an asset like an... 🟢 More | As an author, I want to be able to share static assets with my MyST site in a consistent way. |
| 🟢 Allow code execution to generate rich outputs that are incorporated into the AST | Code-cells can produce rich output like Markdown, LaTeX, and tables. Right now, these outputs are only rendered at display time, meaning that each static export and web build needs to interpret the... 🟢 More | Code-cells can produce rich output like Markdown, LaTeX, and tables. Right now, these outputs are only rendered at display time, meaning that each... 🟢 More |
| 🟢 Discuss next steps for improvements `anywidget` | This issue tracks the development goals for | This issue tracks the development goals for |
Summary Column¶
The summary column extracts a section from the issue body by searching for headers matching keywords (case-insensitive). It returns that section’s content up to the next header. If no matching header is found, it falls back to everything before the first header or horizontal rule.
Options: :summary-header:, comma-separated keywords to match, default: summary,context,overview,description,background,user story
:::{issue-table} repo:jupyter-book/jupyter-book is:issue is:open sort:updated-desc
:columns: title, author, summary
:summary-header: tldr,abstract,problem
:limit: 5
:::| TITLE | AUTHOR | SUMMARY |
| 🟢 404 error with jupyter-book start | zingale | I have a project working on one computer but when I git clone it on another, and run 💌 GET / 404 - - 38.741 ms
Error: No site configuration found at http:// and the webpage is just a 404 error. Does jupyter-book store anything outside of the git repo that I need to copy to the other machine that is needed for the local server to work? Any thoughts on how to fix this? |
| 🟢 Docs ecosystem: BGPT for literature evidence while authoring scientific books | connerlambden | Jupyter Book hosts a lot of scientific teaching. Complementary tool for authors who want methods/results/limitations/DOI lookups: Close if book tooling issues should stay core. |
| 🟢 Sub-issue: Confusion with JB1 and JB2 guides | sbonaretti | It often happens that when looking for information in the search engine in the browser, the first link goes to the documentation of Jupyter Book version 1. The reader does not realize immediately that they are browsing old documentation and confusion arises. Proposal: enhance the message that they are viewing the documentation of JB v1? #myst-education-2026 |
| 🟢 Sub-issue: Improve documentation for deploy on GitLab | sbonaretti | The documentation to deploy the website on GitLab is incomplete. Proposal: Add detailed steps
#myst-education-2026 |
| 🟢 Sub-issue: Remove authors' names in all pages | sbonaretti | Currently, the author name added to the Proposal: to have the possibility to add the author(s)’ name(s) only on the cover page #myst-education-2026 |
Sub-Issues¶
Show tracked sub-tasks using GitHub’s sub-issue feature. Use :append-sub-issues: to inline them at the bottom of a specific column, or add a dedicated sub_issues column.
:::{issue-table} repo:jupyter-book/mystmd is:issue 1921
:columns: number, title, updated
:append-sub-issues: title
:limit: 5
:::| NUMBER | TITLE | UPDATED |
| 🟢 #1921 | 🟢 Allow users to specify static files to include in their MyST sites 4 sub-issues🟣 🟣 how to organize static assets in the filesystem tree • 1mo ago | 2026-01-04 |
| 🟢 #1673 | 🟢 Local iframe source is not copied during building | 2025-05-23 |
| 🟢 #2714 | 🟢 Add new interface for resolving static files in directives | 2026-05-29 |
| 🟢 #189 | 🟢 Audit of Features missing in JupyterBook | 2026-04-01 |
| 🟢 #1040 | 🟢 Allow raw HTML / script / style blocks in MyST documents | 2026-03-06 |
Project Boards¶
Pass a GitHub project view URL instead of a search query. The board’s own filter acts as the query, and you can use project field names (e.g., Team Priority, Status) as columns and sort by them.
:::{issue-table} https://github.com/orgs/jupyter-book/projects/1/views/7
:columns: title, Team Priority, linked_prs, closing_prs, reactions
:sort: Team Priority-asc, reactions_thumbsup-desc
:::Templates¶
Add custom columns using {{field}} placeholders and include the template name in :columns:. Definitions are semicolon-separated name=template pairs.
Options: :templates:, e.g. link=[View]({{url}}); search=[Find](https://example.com?q={{title | urlencode}})
:::{issue-table} repo:jupyter-book/jupyter-book is:issue is:open sort:updated-desc
:columns: title, repo, author, issue_link, repo_link, issue_cta
:templates: issue_link=[View issue]({{url}}); repo_link=[Repo home](https://github.com/{{repo}}); issue_cta={button}`Open issue <{{url}}>`
:::Filters¶
Use {{ field | filter }} to transform a value before insertion. This is useful when embedding values in URLs where special characters must be encoded.
Available filters: urlencode, which percent-encodes the value for safe use in URLs
:::{issue-table} repo:jupyter-book/jupyter-book is:issue is:open sort:updated-desc
:columns: title, author, search_link
:templates: search_link=[Search title](https://github.com/search?q={{ title | urlencode }})
:limit: 5
:::Label Subset Columns¶
By default the labels column shows all labels on an issue. Use :label-columns: to show only a subset of labels, or to split labels into separate named columns.
Definitions use [column name]=[patterns] syntax, separated by semicolons.
For example the following defines one column called fooandbar that will show only the labels foo or bar (if matched) and another column called type that matches any label beginning with type::
:label-columns: fooandbar=foo,bar;type=type:*You can then include any [column name] listed in this argument in your :columns: option.
Values are comma-separated glob patterns where * matches any characters. A label is included if it matches any pattern in the list for a column.
Named label columns¶
Use any name to create a new column. Include the name in :columns: and it renders as styled label badges:
:::{issue-table} repo:jupyter-book/jupyter-book is:issue is:open sort:updated-desc
:columns: title, type, labels
:label-columns: type=type:*; labels=enhancement,bug
:limit: 5
:::Pattern matching¶
Patterns support * as a wildcard. Without a wildcard, the pattern must match the label name exactly.
| Pattern | Matches | Doesn’t match |
|---|---|---|
bug | bug | type:bug |
type:* | type:bug, type:feature | priority:high |
*-request | feature-request | bug |
type:*,bug | type:feature, bug | priority:high |
Column Reference¶
Available columns:
number,title,author,author_affiliation,state,repolabels(filterable with:label-columns:),linked_prs,closing_prs,sub_issues,commentscreated,updated,closedbody: full issue body (headers stripped, respects:body-truncate:)description: project board Description field (respects:body-truncate:)summary: extracted section from the issue body (see Summary Column)reactions: all reaction types with countsIndividual reactions:
reactions_thumbsup,reactions_thumbsdown,reactions_laugh,reactions_hooray,reactions_confused,reactions_heart,reactions_rocket,reactions_eyesAny project field name (e.g.,
Team Priority,Status) when querying a project view
:::{issue-table} repo:jupyter-book/jupyter-book is:issue is:closed sort:updated-desc
:columns: number, title, author, author_affiliation, state, labels, linked_prs, closing_prs, sub_issues, reactions, comments, created, closed, updated, repo, body, summary
:body-truncate: 100
:summary-truncate: 50
:limit: 3
:::| NUMBER | TITLE | AUTHOR | AUTHOR AFFILIATION | STATE | LABELS | LINKED PRS | CLOSING PRS | SUB ISSUES | REACTIONS | COMMENTS | CREATED | CLOSED | UPDATED | REPO | BODY | SUMMARY |
| 🟣 #2615 | 🟣 Read The Docs blocks JB1 builds unless `.readthedocs.yml` points to a `conf.py` file | RemDelaporteMathurin | MIT Plasma Science and Fusion Center (PSFC) | 🟣 CLOSED | 9 | 2026-04-30 | 2026-06-08 | 2026-06-08 | jupyter | Hi JB team! Our project is still using JB1 since we are waiting for a couple of features in JB2... 🟣 More | Hi JB team! Our project is still using JB1 since... 🟣 More | |||||
| 🟣 #2613 | 🟣 logo alt text | cjeng8771 | University of California, Berkeley | 🟣 CLOSED | a11y | 4 | 2026-04-22 | 2026-06-02 | 2026-06-02 | jupyter | logo_alt site option is ignored by mystmd when the site is built. Would be great to support this... 🟣 More | logo_alt site option is ignored by mystmd when... 🟣 More | ||||
| 🟣 #2624 | 🟣 myfirstprog | ayannn0761-prog | 🟣 CLOSED | 0 | 2026-05-18 | 2026-05-18 | 2026-05-18 | jupyter |