Skip to content

Proposal: Migrate from Jekyll to VitePress #167

@maxrjones

Description

@maxrjones

Summary

I'm opening this issue to propose migrating zarr.dev from Jekyll + Minimal Mistakes to VitePress, following the approach successfully used by zarrs.github.io (live at zarrs.dev).

Motivation

The current Jekyll setup has several pain points:

Why VitePress

  • Node.js-only — aligns with the JS tooling already used across Zarr repos like conventions and the zarrs website.
  • Fast — near-instant hot module replacement in dev, optimized static output in production.
  • Vue components — easy to add interactive elements (tabbed examples, live demos) when needed.
  • Proven in the ecosystem — zarrs.dev and geozarr-site already use VitePress successfully.
  • Minimal dependencies — zarrs.github.io runs on just vitepress + one syntax highlighting package.
  • Built-in features — search, dark mode, sidebar navigation, and responsive design come out of the box with the default theme.

Scope

Content pages to migrate:

Page Source
Home (/) index.md
Adopters (/adopters) adopters/index.md + adopters/logos/
Community (/community) community/index.md
Conventions (/conventions) conventions/index.md
Datasets (/datasets) datasets/index.md
Implementations (/implementations) implementations/index.md
Office Hours (/office-hours) office_hours/index.md
Slides (/slides) slides.md + slides/ directory (Reveal.js assets)
Blog posts _posts/ (2 posts)

Additional migration tasks:

  • Navigation — Convert _data/navigation.yml to VitePress config.mts (nav + sidebar)
  • Redirects — Preserve numcodecs_redirects/ (23 redirect pages) using static meta redirects
  • Static assets — Move images/, favicons, and CNAME to public/
  • GitHub Pages deployment — Replace Jekyll build with VitePress build in GitHub Actions (reference: zarrs deploy workflow)
  • Social links — Map footer links (Bluesky, Mastodon, GitHub, Zulip) to VitePress social links config

Reference implementation

zarrs.github.io (source, live) demonstrates the target setup:

.vitepress/
├── config.mts          # Site config, nav, sidebar, analytics
└── theme/
    ├── index.js        # Theme entry
    ├── Layout.vue      # Custom layout (optional)
    ├── custom.css      # Brand colors and overrides
    └── components/     # Custom Vue components (optional)
public/                 # Static assets (logos, CNAME, etc.)
index.md                # Home page (VitePress hero layout)
package.json            # Just vitepress as devDependency
.github/workflows/deploy.yml  # Node 20 + npm ci + vitepress build

Files to remove after migration

  • _config.yml, Gemfile, Gemfile.lock
  • Dockerfile, pixi.toml, pixi.lock, .readthedocs.yml
  • _data/, _includes/, _posts/
  • vendor/, .pixi/

Open questions

  • Should we take this opportunity to redesign the homepage with a VitePress hero layout (like zarrs.dev), or do a 1:1 content migration first?
  • Should the Reveal.js slide decks be kept as-is in public/slides/, or converted/dropped?
  • Do we want to continue using Google analytics?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions