# The zoomies.sh site. # # It publishes the docs that already live in docs/ rather than a second copy of # them, so the website cannot drift from the repository. install.sh and # install.ps1 are copied to the site root by the deploy workflow, again from the # ones in the repository root, so `curl -fsSL https://zoomies.sh/install.sh | sh` # and the file a contributor edits are the same file. site_name: Zoomies site_url: https://zoomies.sh/ site_description: >- Free, open-source self-hosted GitHub Actions runners with ephemeral jobs, a live web UI, autoscaling across your own hosts and a path off static runners. site_author: Zoomies contributors copyright: Zoomies is AGPL-3.0 licensed. repo_url: https://github.com/eyupio/zoomies repo_name: eyupio/zoomies edit_uri: edit/main/docs/ docs_dir: docs site_dir: site theme: name: material # Sharing and structured metadata that Material does not emit by itself. # overrides/main.html extends the theme rather than replacing anything. It is # outside docs/ so the template is not also published as a page. custom_dir: overrides language: en favicon: brand/favicon.ico # The header renders at favicon scale, where v2.1 reserves the paw/swish. # overrides/partials/logo.html draws this one on the dark scheme and the # black one on the light scheme, since the header sits on the page's ground. logo: brand/paw-swish-white.png icon: repo: fontawesome/brands/github # No `font:` key: the faces are self-hosted rather than fetched from Google # Fonts. overrides/main.html replaces the theme's font block, and # docs/stylesheets/ carries the @font-face rules and the woff2 files beside # it. A third-party font stylesheet is render-blocking, and when the host is # slow or unreachable the tab spins with nothing to show. features: - navigation.tracking - navigation.sections - navigation.top - navigation.footer - toc.follow - search.suggest - search.highlight - search.share - content.code.copy - content.code.annotate palette: # The brand is a near-black identity, so dark is the default and light is # the alternative rather than the other way round. - media: "(prefers-color-scheme: dark)" scheme: slate primary: custom accent: custom toggle: icon: material/weather-sunny name: Switch to light - media: "(prefers-color-scheme: light)" scheme: default primary: custom accent: custom toggle: icon: material/weather-night name: Switch to dark extra_css: - stylesheets/zoomies.css - stylesheets/animated-logo.css - stylesheets/showcase.css - stylesheets/showcase-material.css - stylesheets/cloud.css extra_javascript: - javascripts/animated-logo.js - javascripts/showcase.js markdown_extensions: - abbr - admonition - attr_list - def_list - footnotes - md_in_html - tables - toc: permalink: true permalink_title: Link to this section - pymdownx.details # Material's icon sets, as `:material-webhook:` shortcodes. The home page's # feature cards and comparison table use them; they render as inline SVG that # inherits the text colour, so there is no icon image to theme or to go stale. - pymdownx.emoji: emoji_index: !!python/name:material.extensions.emoji.twemoji emoji_generator: !!python/name:material.extensions.emoji.to_svg - pymdownx.highlight: anchor_linenums: true line_spans: __span pygments_lang_class: true - pymdownx.inlinehilite - pymdownx.snippets # Diagrams are Mermaid, rendered in the browser and themed by Material to # follow whichever palette the reader is in. A diagram is a fenced block in # the same file as the prose it explains, so GitHub renders it too and there # is no exported image to go stale. - pymdownx.superfences: custom_fences: - name: mermaid class: mermaid format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.tabbed: alternate_style: true - pymdownx.tasklist: custom_checkbox: true plugins: # The built-in search index, told where a Zoomies identifier stops being one # word: the default separator does not split on a dot or a hyphen, so # `scheduler.scale_up_delay` and `zoomies-linux-x64` were each a single term # nobody would type in full. - search: separator: '[\s\-,:!=\[\]()"/]+|(?!\b)(?=[A-Z][a-z])|\.(?!\d)|&[lg]t;' # Build-time SEO metadata: a real last-edited date per page for the sitemap and # the sharing tags, and llms.txt generated from the navigation. It is a hook # rather than a plugin so the docs build keeps to its pinned dependencies. hooks: - hooks/seo.py # The header's latest release, stars and forks, resolved once per build and # rendered by overrides/partials/source.html. Material would otherwise fetch # them in the browser and cache them in the tab for as long as it lives. - hooks/source.py # Lazy, sized images: the colour scheme a reader is not using is never # downloaded, and a page does not reflow as its screenshots arrive. - hooks/images.py - hooks/showcase.py extra: field_guides: - source: what-are-self-hosted-runners.md category: Getting started card_title: Start with a runner. Build up to a fleet. - source: runners-without-kubernetes.md category: Architecture card_title: All the runners. None of the Kubernetes. - source: home-lab.md category: Home lab card_title: Good hardware deserves another lap. - source: queued-job.md category: Operations card_title: A job is waiting. Find out why. - source: persistent-caches.md category: Operations card_title: Disposable runners. Useful memories. - source: migration.md category: Getting started card_title: A smaller leap than you think. - source: ephemeral-runners.md category: Architecture card_title: A fresh start for every job. - source: runner-autoscaling.md category: Architecture card_title: A little more room to run. - source: should-i-self-host.md category: Getting started card_title: Your hardware. Your call. - source: docker.md category: Architecture card_title: Put a runner in its place. - source: many-repositories.md category: Operations card_title: More repositories. One happy pack. - source: costs.md category: Getting started card_title: Count more than the minutes. # Who builds Zoomies. overrides/partials/copyright.html prints this in the # footer of every page, beside the licence; the product's own footer says the # same thing from web/src/lib/links.ts, so a fork renames it in two places # rather than everywhere. developer: name: EyUp.io url: https://eyup.io social: - icon: fontawesome/brands/github link: https://github.com/eyupio/zoomies name: Zoomies on GitHub generator: false # Keep the learning path separate from operating tasks and exact reference. # A reader can find a first job without knowing a feature name, while an # operator can go directly to a setting, command or API route. nav: - Home: index.md - Documentation: - Overview: start-here.md - Get started: - Understand the basics: fundamentals.md - Run your first job: quickstart.md - Docker Compose: compose.md - Deploying on a PaaS: paas.md - Deploying on InstaPods: instapods.md - One-click deployment: marketplace.md - Run your fleet: - Web UI tour: ui.md - Hosts and pools: hosts-and-pools.md - Migrating repositories: migration.md - Backup and restore: backup-and-restore.md - Upgrading: upgrading.md - Two-step verification: two-step.md - Public view: public-view.md - Host health and tuning: host-health.md - Troubleshooting: troubleshooting.md - A job stuck in the queue: queued-job.md - Scale and tune: - Advanced operations: advanced.md - Size classes and automatic pools: auto-pools.md - Persistent caches: persistent-caches.md - Elastic CPU zoomies: elastic-cpu.md - Elastic memory: elastic-memory.md - Private hosts with Tailcat: private-hosts.md - Proxmox VE: proxmox.md - Assistants and repository checks: - MCP for your AI assistant: mcp.md - Eli conversations and PR repairs: eli.md - Kennel Club: kennel-club.md - Connect Claude: connect-claude.md - AI Context for assistants: ai-context.md - Reference: - Configuration: configuration.md - Command line: cli.md - API: api-surface.md - Architecture: architecture.md - Naming and platforms: naming.md - Security: security.md - Problem codes: problem-codes.md - Metrics: metrics.md - Runner startup stability: runner-startup-stability.md - Runtime compatibility: runtime-compatibility.md - Recovering a published image: development/image-recovery.md - Provider contract: providers.md - Automation contract: automation.md - Capacity-demand receiver: capacity-demand-receiver.md - Dependencies: dependencies.md - UI guidelines: ui-guidelines.md - Field guide: guides/index.md - Choosing Zoomies: - What are self-hosted runners?: what-are-self-hosted-runners.md - Should you self-host?: should-i-self-host.md - What it costs: costs.md - FAQ: faq.md - Many repositories: many-repositories.md - Runners in your home lab: home-lab.md - Runners in Docker: docker.md - Runners without Kubernetes: runners-without-kubernetes.md - Ephemeral runners: ephemeral-runners.md - Autoscaling runners: runner-autoscaling.md - Compare: - Choose your setup: alternatives/index.md - Compared with ARC: actions-runner-controller.md - Compared with GARM: alternatives/garm.md - Compared with the AWS Terraform module: alternatives/terraform-aws-github-runner.md - Compared with TestFlows Hetzner runners: alternatives/testflows-hetzner-runners.md - Compared with Cirun: alternatives/cirun.md - Compared with runscaler: alternatives/runscaler.md - Compared with gharp: alternatives/gharp.md - Compared with runner services: hosted-runner-services.md - GitHub Actions alternatives: github-actions-alternatives.md - About: - Brand: brand.md - Privacy: privacy.md - Terms: terms.md # The brand pack's own guide is published because docs/brand.md links to it, but # it is not a section of the site's navigation. not_in_nav: | brand/BRANDING_GUIDE.md # docs/agents/ is guidance for coding agents working in the repository, not a # page for the people reading the site. exclude_docs: | agents/ # A link in the docs that points nowhere is a broken promise, so a broken one # fails the build rather than shipping. strict: true validation: links: absolute_links: ignore unrecognized_links: warn # A heading that gets reworded silently breaks every deep link into it, and # a link that lands at the top of a long page looks like it worked. anchors: warn