Updated: 20 Apr 2026
There are (at least) two options for hosting your Jupyter Book through GitHub:
Using GitHub actions to deploy to an external server (e.g. TU Virtual Machine). We do not cover the instructions here.
Using GitHub Pages to host the book directly on GitLab
GitHub Pages allows you to host static HTML files online from GitHub repositories using GitHub actions. This page includes the how-to instruction. Note that most of the actions are already covered for you, we give some additional information.
Instructions¶
enable GH pages
check GH pages link
# This file was created automatically with `myst init --gh-pages` 🪄 💚
# Ensure your GitHub Pages settings for this repository are set to deploy with **GitHub Actions**.
name: MyST GitHub Pages Deploy
on:
push:
branches: [main]
env:
# `BASE_URL` determines, relative to the root of the domain, the URL that your site is served from.
# E.g., if your site lives at `https://mydomain.org/myproject`, set `BASE_URL=/myproject`.
# If, instead, your site lives at the root of the domain, at `https://mydomain.org`, set `BASE_URL=''`.
BASE_URL: /${{ github.event.repository.name }}
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: 'pages'
cancel-in-progress: false
jobs:
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Pages
uses: actions/configure-pages@v3
- uses: actions/setup-node@v4
with:
node-version: 23
# Install MyST
- name: Install MyST
run: npm install -g mystmd
# Install Python and dependencies
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
# If you have a requirements file, prefer that:
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
# Minimum needed for execution:
pip install jupyter-server nbclient nbformat ipykernel jupyter-client ipython
# Common plotting libs (adjust to your stack):
pip install matplotlib numpy pandas scipy plotly
# If you use plotly static images:
# pip install plotly kaleido
# Make sure a kernel is visible:
python -m ipykernel install --user --name=python3
# Install Imagemick for conversion of figs
- name: Install Imagemagick
run: sudo apt-get install -y imagemagick
# Install typst
- name: Setup Typst
uses: typst-community/setup-typst@v4
# Build pdf with typst, capturing logs for error reporting
- name: Build PDF
run: |
myst build --typst > build.log 2>&1 || true # Capture both stdout and stderr to build.log
# Upload PDF as artifact
- name: Upload Output PDF as Artifact
uses: actions/upload-artifact@v4
with:
name: Output PDF
path: exports/*.pdf
compression-level: 0
# Feedback errors in pdf build
- name: Write build errors to errorlog.md
if: always()
run: |
echo "# PDF Build Error Log" > errorlog.md
echo "" >> errorlog.md
echo "**Build time:** $(date -u '+%Y-%m-%d %H:%M:%S UTC')" >> errorlog.md
echo "" >> errorlog.md
echo '```text' >> errorlog.md
grep -iE "error|warning" build.log >> errorlog.md || echo "No errors or warnings." >> errorlog.md
echo '```' >> errorlog.md
# To build the HTML site
- name: Build HTML Assets
run: myst build --html --execute
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: './_build/html'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4