Hugo Hackropole is an open-source Hugo theme for publishing Capture-The-Flag (CTF) challenges as a static website, developed by ANSSI, the French cybersecurity agency, and used to power hackropole.fr.
What is the Hackropole Hugo theme?
The Hackropole Hugo theme is a static-site generator theme that turns Markdown challenge files into a browsable CTF website. It takes challenge descriptions, write-ups, and related content as input, and outputs a lightweight static site that can be hosted anywhere. The theme is built on Hugo and carries the MIT license. No server-side code is required, and all assets are precompiled, so the resulting site runs on any static hosting service.
Key Features
- Lightweight output — The theme generates pure static HTML/CSS/JS files with no runtime dependencies, keeping page sizes minimal.
- Hardened security — It ships with a Content Security Policy (CSP) that restricts scripts and styles, and since there is no server-side code, the attack surface is limited to static files.
- Usable without JavaScript — Challenge pages and write-ups are fully readable with JavaScript disabled; interactive elements degrade gracefully.
- Bootstrap 5 styling with automatic dark mode — The visual design is based on Bootstrap 5 stylesheets and automatically switches to a dark palette based on the user's system preference.
- No Node.js build step — The theme is built entirely with Hugo; no npm packages, bundlers, or Node.js tools are required to compile the site.
- GitHub/GitLab-style Markdown rendering — Write-ups are rendered with a look similar to GitHub or GitLab, making long-form technical content familiar to developers.
- KaTeX math formulas — Mathematical notation in write-ups is rendered client-side with the KaTeX engine.
- Solarized color scheme — The default palette is based on the Solarized theme, known for its high-contrast, low-eye-strain colors.
Who is it for?
- CTF organizers — Publish challenge statements, downloadable challenge files, and after-competition write-ups on a static site without maintaining a database or backend.
- Cybersecurity trainers — Create a practice platform for students where each challenge is a Markdown file, and math-heavy solutions render via KaTeX.
- Self-hosting enthusiasts — Deploy a CTF archive on any static host, such as GitHub Pages or an S3 bucket, with a single Hugo command.
What can you do with it?
- Publish a CTF challenge set — Write each challenge as Markdown, add files to the site, and generate a complete navigable archive in minutes.
- Host write-ups with math — Use KaTeX to display formulas in your solution explanations.
- Run a CTF site without a server — Host it on any static file server, ensuring minimal maintenance and no vulnerable backend.
How does the Hackropole theme work?
Copy the contents of ./exampleSite/ into a new Hugo site, clone the repository into themes/hackropole, and run hugo serve. The theme uses Hugo's content pipeline to turn Markdown chapters and challenges into static pages, with no additional configuration beyond a standard hugo.toml.
Pricing
The theme is free and open-source under the MIT license. There are no paid tiers or premium features; the source code is available on GitHub.
FAQ
Is the Hackropole Hugo theme free?
Yes, the theme is released under the MIT license, so you can use, modify, and redistribute it freely, including for commercial projects.
Does the theme require JavaScript to view?
No. The theme is designed to be usable without JavaScript; all core content and navigation work with scripting disabled. JavaScript is only used for enhancements like KaTeX math rendering.
What tools do I need to build a site with it?
Only Hugo itself. The theme explicitly requires no Node.js tools, npm packages, or task runners. You just install Hugo, copy the example site, and run hugo serve.
Can I see a live example?
Yes, the website hackropole.fr is a live demo of this theme, hosted by the French cybersecurity agency ANSSI.
Does it support math formulas in write-ups?
Yes, the theme integrates the KaTeX engine to render LaTeX-style math formulas in Markdown write-ups.




