The fitfigure shortcode automatically scales images to the container width and outputs 1x and 2x resolutions
paperesque — Hugo Starter Template
By capnfabs
Paperesque is a lightweight Hugo theme that provides automatic image scaling, footnote-to-sidenote conversion, visual draft marking, and mostly hidden pages.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
The accompanying drop-resources.py script can remove original images after build, disabled by default
Footnotes automatically become sidenotes when space permits, with site-level or page-level disabling
Draft pages are always displayed with an orange striped background, which cannot be disabled
Pages can be set to be accessible only by URL via front matter, excluded from lists and sitemaps
Top menu links are driven by params.topmenu in config.toml
Template Details
Paperesque is a lightweight theme for Hugo, used by the author on capnfabs.net. The theme provides a fitfigure shortcode that automatically scales images to the container width and outputs 1x/2x resolutions, along with a drop-resources.py script to remove original images after build. Footnotes automatically become sidenotes when space permits, and can be disabled via site parameters or page front matter. Draft pages are always distinguished by an orange striped background, which cannot be disabled. Pages can be made accessible only by URL through a combination of sitemap.disable and params.mostlyHidden in front matter. The homepage has two options: a custom link list, or sections with sidebar content. Top menu links are driven by params.topmenu in config.toml.
Usage limitations: mostlyHidden requires Hugo 0.125.0 or later; drop-resources.py for removing original images is disabled by default, and when enabled generates a .droplist file in the output; modifying the theme JavaScript requires the yarn and parcel toolchain.
Is it right for your project?
Use Cases
- Adding a blog theme with image scaling and sidenote features to a Hugo site
- Writing workflows that need to visually distinguish drafts from published content
- Scenarios where some pages should be shared only by URL and not publicly listed
- Building article-focused Hugo sites that need to control image output size
Suitable For
- Developers building personal blogs or article sites with Hugo
- Sites that need automatic image scaling and original file cleanup
- Writing scenarios where footnotes are presented as sidenotes
- Editorial workflows that need visual draft marking and mostly hidden page control
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Recommended to copy the theme into themes/paperesque using git subtree; git submodule is also possible
- 2
Set theme = "paperesque" in config.toml
- 3
Configure the top menu via the params.topmenu array with name and url
- 4
To enable original image removal, add outputs.page = ["HTML", "droplist"] in config.toml and run buildscripts/drop-resources.py after build
- 5
mostlyHidden requires Hugo 0.125.0 or later
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license in the public repository; the free scope is the code of this version and does not imply that external services or third-party assets are free.
Must comply with when using
- Free use, modification, commercial use, and distribution of this version's code are permitted.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- The sitemap.disable feature in mostly hidden pages requires Hugo 0.125.0 or later; ensure the build environment meets this version requirement to use it.
- The original image removal feature is disabled by default; when enabled, it generates a .droplist file in the build output, which you must handle yourself.
- Modifying the theme JavaScript requires installing the yarn package manager and using the parcel toolchain for building.
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses; they cannot be assumed to be covered solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
Note that `sitemap.disable` is only available since [Hugo 0.125.0](https://github.com/gohugoio/hugo/releases/tag/v0.125.0), so ensure you're building with that if you're relying upon this feature.
Original README
This is _off by default_ because it peppers your build output with `.droplist` files, and if you're not expecting them, it's going to be an unpleasant surprise.
Original README
https://github.com/capnfabs/paperesque/blob/mainline/LICENSE.mdhttps://github.com/capnfabs/paperesque/blob/mainline/README.mdFirst, you need to [install the `yarn` package manager](https://yarnpkg.com/getting-started/install).
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-02. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- Hugo Themes
- Documentation and maintenance reference score
- More documented · 87 / 100
- Technologies
- Hugo
- Website type
- Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-09-06
- Screenshot last checked
- 2026-10-02
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Hugo as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Automatically checked against source and license rules; no manual editorial review.
Inspect the recorded source material
SHA-256: fc3fbb4bfe59f8a06cf01031965a1fee0b525284b2b9e04392d35435bf942ce4
2026-10-02T23:12:56.664Z
Source file / repository# Paperesque
A lightweight [Hugo](https://gohugo.io) theme with a couple of neat tricks.
You can see it in action on [capnfabs.net](https://capnfabs.net).
Here's what makes it special:
- Has a shortcode for resizing images to fit the page, _and_ tools for removing originals from the output
- Footnotes turn into margin notes when there's enough space.
- Tools for editing and controlling publication:
- Visual differentiation for drafts
- The ability to "mostly hide" pages so that they're only accessible by knowing the URL.
## Install
### git subtree (easiest!)
Copy the files into your repo using `git subtree` (this is way easier to use than submodules; [here's an explainer](https://www.atlassian.com/git/tutorials/git-subtree)):
```sh
git subtree add --prefix themes/paperesque https://github.com/capnfabs/paperesque mainline --squash
```
This will add a commit to your repo with everything ready to go. You'll probably want to modify parts of this theme for your own usage! Subtree makes that easy, because you've just copied the code into your repo ✨
### git submodules
If you're sure you want to use git submodules:
```sh
git submodule add -b mainline https://github.com/capnfabs/paperesque themes/paperesque
```
### Select the theme in your `config.toml`
Add / Modify the `theme` field in your `config.toml` for your hugo site:
```toml
theme = "paperesque"
```
## Using Features
### Homepage
You've got two options for the homepage:
#### 1. A custom list of links.
**Example**: see [examples/1-with-homepage-menu](examples/1-with-homepage-menu/).
This was the _only_ thing supported until Dec 2022-ish.
See the [example readme](examples/1-with-homepage-menu/README.md) for details on how to implement this.
#### 2. A section + custom content in a sidebar.
**Example**: see [examples/2-with-homepage-sidebar-content](examples/2-with-homepage-sidebar-content/).
This is what's in use on capnfabs.net today. I like it much better.
See the [example readme](examples/2-with-homepage-sidebar-content/README.md) for details on how to implement this.
### Links in the top-right corner
These are config driven! Add this to your `config.toml` (for example):
```toml
[[params.topmenu]]
name = "about"
url = "about/"
[[params.topmenu]]
name = "contact"
url = "contact/"
[[params.topmenu]]
name = "rss"
url = "posts/index.xml"
```
### Removing original images after resizing
The `fitfigure` shortcode is exactly the same as the `figure` shortcode, but it automatically resizes your images to fit the container, _and_ provides different resolutions for different DPIs (1x, 2x).
Whenever you use this shortcode, the theme makes a mental note of the resource you specified.
Now, you need to do some configuration if you want the originals to be removed from the output.
First, add this to your site's `config.toml`:
```toml
[outputs]
page = ["HTML", "droplist"]
```
Now, as part of your build process, run:
```sh
./themes/paperesque/buildscripts/drop-resources.py [hugo-output-directory]
```
(the Hugo output directory is usually `./public`).
That's it! Resized resources will be removed.
This is _off by default_ because it peppers your build output with `.droplist` files, and if you're not expecting them, it's going to be an unpleasant surprise.
### Visual differentiation for drafts
This one's on, and can't be switched off. Drafts have an orange stripey background everywhere. You can't miss them.
### Footnotes turn into margin notes
This is _on by default_.
You can switch it off site-wide by adding `disableMarginNotes = true` to your `params` in your `config.toml`, i.e.
```toml
[params]
disableMarginNotes = true
```
Alternatively, you can turn it off per-page by adding the `disableMarginNotes = true` to your front-matter for the page.
### Make pages only visible / accessible by URL
You can prevent a page from being publicly visible (included in lists etc) by adding the following to your front-matter:
```toml
sitemap:
disable: true
params:
mostlyHidden: true
```
- Note that `sitemap.disable` is only available since [Hugo 0.125.0](https://github.com/gohugoio/hugo/releases/tag/v0.125.0), so ensure you're building with that if you're relying upon this feature.
## Testing against the example site
You can build the example site with this theme with:
```
cd examples/[example]
hugo serve --themesDir=../../..
```
## Hacking / Modifying the JS
The javascript in use (`assets/js/main.js`) is built from the `./js/` directory. Here are instructions for how to modify the JS:
### Set up
First, you need to [install the `yarn` package manager](https://yarnpkg.com/getting-started/install).
Then, run:
```sh
yarn install
```
to install the required dependencies.
### Dev builds
Run:
```sh
npx parcel watch
```
Simple as that!
### Production builds (i.e. before you commit code / deploy code)
```sh
npx parcel build --no-source-maps
```
### Other resources
- The explanation for how a lot of this works is in [this blog post](https://capnfabs.net/posts/hugo-theme-exclude-processed-images/), so take a look there if you get stuck or want to borrow some of the ideas without grabbing all of them.
- You can see who else is using this theme by [searching Github for `paperesque filename:config.toml`](https://github.com/search?q=paperesque+filename%3Aconfig.toml&type=Code) (requires login).
Explore similar templates
Compare previews and descriptions within the same stack and category.

hugo-xmin
hugo-xmin is an extremely minimal Hugo theme written by Yihui Xie for template beginners. HTML and CSS total about 140 lines, with no external dependencies, and it uses the MIT license.
Hugo · Starter

hugo-theme-gallery
A Hugo Extended photo gallery theme that organizes images with Page Bundles, automatically generating album lists and gallery pages with a Justified layout and PhotoSwipe lightbox.
Hugo · Starter

reveal-hugo
reveal-hugo is a Hugo theme that converts Markdown content into Reveal.js-based HTML presentations. It supports slide separation with `---`, shortcodes for fragments, slides, sections, notes, Markdown, and MathJax, and organizes content as root or section presentations with order controlled by weight.
Hugo · Starter

anatole
Anatole is a minimalistic two-column Hugo theme ported from farbox-theme-Anatole, featuring dark mode, multilingual and RTL support, and optional portfolio, comments, analytics, KaTeX, and Mermaid integrations. It suits personal blogs, portfolios, or documentation sites built with Hugo.
Hugo · Starter

hugo-theme-diary
A Hugo diary-style theme ported from the Hexo theme Journal, with a grid homepage for essays and daily notes. It supports six languages, dark mode, table-of-contents scroll positioning, reading time, code highlighting, and configurable sidebar, fonts, and colors.
Hugo · Starter

risotto
risotto is a minimalist, responsive Hugo theme inspired by terminal ricing aesthetics. It uses semantic HTML and pure CSS with no JavaScript, and its layout relies on CSS Grid for native responsiveness without manual breakpoints.
Hugo · Starter
