{"id":18754917,"url":"https://github.com/errata-ai/static-school","last_synced_at":"2025-07-21T07:04:44.464Z","repository":{"id":93626899,"uuid":"230813756","full_name":"errata-ai/static-school","owner":"errata-ai","description":":school: Discover, explore, and compare static site generators.","archived":false,"fork":false,"pushed_at":"2021-08-17T12:03:19.000Z","size":8211,"stargazers_count":11,"open_issues_count":2,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-13T01:11:55.286Z","etag":null,"topics":["jamstack","static-site-generator"],"latest_commit_sha":null,"homepage":"https://staticschool.com/","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/errata-ai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-12-29T23:06:29.000Z","updated_at":"2023-08-06T06:28:27.000Z","dependencies_parsed_at":"2023-05-03T22:31:33.957Z","dependency_job_id":null,"html_url":"https://github.com/errata-ai/static-school","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/errata-ai/static-school","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/errata-ai%2Fstatic-school","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/errata-ai%2Fstatic-school/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/errata-ai%2Fstatic-school/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/errata-ai%2Fstatic-school/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/errata-ai","download_url":"https://codeload.github.com/errata-ai/static-school/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/errata-ai%2Fstatic-school/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266255269,"owners_count":23900103,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jamstack","static-site-generator"],"created_at":"2024-11-07T17:30:43.423Z","updated_at":"2025-07-21T07:04:44.446Z","avatar_url":"https://github.com/errata-ai.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Static School [![Netlify Status](https://api.netlify.com/api/v1/badges/ed60bc51-026c-4e4d-b22f-3b16cfc70493/deploy-status)](https://app.netlify.com/sites/festive-wiles-39ebae/deploys) [![PageSpeed](https://img.shields.io/badge/PageSpeed-98%20%2F%20100-success?style=flat\u0026logo=google\u0026logoColor=white)](https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2Fstaticschool.com%2F\u0026tab=desktop) [![Accessibility](https://img.shields.io/badge/accessibility-passing-success?style=flat\u0026logo=html5\u0026logoColor=white)](https://wave.webaim.org/report#/https://staticschool.com/)\n\nStatic School is an open-source project with the goal of making it easier to discover, research, and (ultimately) choose a static site generator (SSG) for your next project. We try to provide in-depth analysis for all SSGs we cover, including data (updated daily) on activity, popularity, and performance.\n\n## Site Structure\n\nStatic School is built with [Hugo](https://gohugo.io/) and deployed daily with [Netlify](https://www.netlify.com/).\n\n```text\n├── LICENSE\n├── README.md\n├── bench \u003cFiles related to data collection and benchmarking\u003e\n├── config.toml\n├── content\n│  └── ssg/ \u003cIndividual pages for each SSG\u003e\n├── data\n│  └── report.json \u003cAn auto-generated, JSON-formatted report of all our data\u003e\n├── layouts\n├── resources\n```\n\n## Benchmarking\n\n\u003e **Dependecies**: To run the benchmark suite, you'll need [Python 3.7+](https://www.python.org/downloads/) and [Docker](https://www.docker.com/products/docker-desktop) installed.\n\nEach static site generator is tested against three size increments 10, 100, and 1,000 files. The files are copied from a [corpus](https://github.com/errata-ai/static-school/tree/master/bench/corpus) of approximately-equivalent files for AsciiDoc, Markdown, and reStructuredText.\n\nThe following commands will build and run the benchmark suite:\n\n```shell\n$ cd bench\n$ make build\n$ make bench ssg=\u003cNAME OF SSG TO TEST\u003e\n```\n\nThe actual benchmarking is handled by the [hyperfine](https://github.com/sharkdp/hyperfine) command-line tool, which handles warmup runs, statistical outlier detection, and results formatting.\n\n## Contributing\n\nIf you'd like to submit a new static generator to our test suite, please follow these steps:\n\n1. Create a new directory in [`/bench/generators/`][1] that includes `sample_site/`, `Dockerfile`, and `meta.yml`.\n\n   `example_site/` is a functional example of the given static site generator\u0026mdash;it's the template that will be used for all performance testing. When committed to this repo, though, its content directory should be empty.\n\n   `Dockerfile` should contain all required steps to build `example_site/` while adhering to the following structure:\n\n   ```dockerfile\n   # Required:\n   FROM jdkato/hyperfine\n\n   # Custom steps:\n   ARG repo=\"@testing http://dl-3.alpinelinux.org/alpine/edge/testing\"\n\n   RUN echo $repo \u003e\u003e /etc/apk/repositories \u0026\u0026 \\\n   apk add --no-cache --update zola@testing\n\n   # Required:\n   COPY meta.yml /meta.yml\n   COPY example_site /example_site\n\n   # Required:\n   ENTRYPOINT [\"python3\", \"/bench.py\"]\n   ```\n\n   `meta.yml` acts as a means of standardization across multiple static site generators:\n\n   ```yaml\n   # All supported formats from 'md', 'adoc', and 'rst':\n   formats:\n    - md\n\n   # The CLI commands to (1) build the site and (2) obtain the tool's version:\n   commands:\n    build: 'cd {dir} \u0026\u0026 zola build \u0026\u0026 cd ..'\n    version: zola --version\n\n   # Any required front matter. This will be added to all test files.\n   layout: |\n    +++\n    title = \"Benchmark\"\n    +++\n\n    {content}\n\n   # The file naming scheme to use for test files:\n   filename: test{0}\n\n   # The location, relative to `/example_site`, to copy test markup files:\n   content: content\n   ```\n2. Create a new directory in [`/content/ssg`](https://github.com/errata-ai/static-school/tree/master/content/ssg) that includes `logo.png` (project logo), `preview.png` (website screenshot), and `index.md` (project description and metadata).\n\n   `index.md` should define the following front matter variables (the example below is for [Gatsby](https://www.gatsbyjs.org/)):\n\n   ```yaml\n   title: Gatsby\n   homepage: https://www.gatsbyjs.org/\n\n   description: Build blazing fast, modern apps and websites with React.\n\n   language:\n     name: JavaScript\n     link: https://nodejs.org/en/\n     icon: devicon-javascript-plain colored\n\n   templating:\n     name: React\n     link: https://reactjs.org/\n\n   features:\n     localization:\n       type: plugin\n       link: https://www.gatsbyjs.org/docs/localization-i18n/\n     versioning: false\n     custom_output:\n       type: plugin\n       link: https://github.com/dominicfallows/gatsby-plugin-json-output\n     asset_pipelines:\n       type: plugin\n       link: https://www.gatsbyjs.org/packages/gatsby-plugin-minify/\n     data_files:\n       link: https://www.gatsbyjs.org/docs/recipes/sourcing-data\n     image_processing:\n       link: https://www.gatsbyjs.org/docs/gatsby-image/\n     extensible:\n       link: https://www.gatsbyjs.org/docs/creating-plugins/\n\n   license:\n     name: MIT\n     slug: mit\n\n   adoc: true\n   md: true\n   rst: false\n\n   twitter: gatsbyjs\n   repo: gatsbyjs/gatsby\n   ```\n\n## Credits\n\nThis project was inspired by Netlify's MIT-licensed [StaticGen](https://www.staticgen.com/) website. The major difference is that *Static School* is much more than a \"leaderboard\": we provide in-depth benchmarking, guides, and tutorials.\n\n[1]: https://github.com/errata-ai/static-school/tree/master/bench/generators\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferrata-ai%2Fstatic-school","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ferrata-ai%2Fstatic-school","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ferrata-ai%2Fstatic-school/lists"}