Chulapa v2.1.0 is here. This release gives you more control over how your site looks, how readers find its content and how pages appear when shared.
When I first built Chulapa, I wanted a theme I
could use for different sites while giving each one its own look. The idea is
still the same. You can choose a skin, change a few settings in _config.yml
and make the site your own. This release adds more ways to do that, along with
some useful fixes behind the scenes.
Here are the changes I would start exploring.
Give each page the right introduction
A page title has several jobs. It introduces the content on the page, appears in the browser tab and helps describe a link when someone shares it. You may want different wording for each of those places.
In v2.1.0, seo_title and og_title let you set the metadata titles separately
from the visible heading. The new description option also gives you an
explicit metadata description, independent of the subtitle and excerpt:
---
layout: default
title: "My field notes"
subtitle: "A weekend exploring the mountains"
seo_title: "Mountain field notes | My travel blog"
og_title: "A weekend in the mountains"
description: "Routes, observations and practical notes from a mountain weekend."
---
The theme shares that description across HTML, Open Graph, Twitter/X cards and JSON-LD, without forcing it into a fixed character limit. You can keep the introduction on the page conversational and write a separate description for people encountering its link elsewhere.
There is more control over the rest of the metadata, too. canonical_url
provides a consistent preferred URL across the page’s metadata, breadcrumbs
and feeds. Page language and Open Graph locales can be configured separately,
and translated locales can be listed. Article metadata includes publication
and modification dates, authors, sections and tags where supplied.
For sites with several contributors, the JSON-LD publisher can now be
configured independently of the author. Sharing images can have explicit
alternative text, dimensions and a MIME type, while schema_image identifies
representative article images for structured data.
These settings help describe your content accurately. They do not guarantee a particular search result or social preview, so check a few real pages after updating. The metadata reference and global settings explain the options and their defaults.
One theme, more looks
This release adds 13 skins, including listen, navi, cyborg, darkly,
slate, solar and the butterfly variants. There are also more code
highlighting styles, including github.dark, nord, one.dark and
stackoverflow.light.
The configuration stays familiar. For example, to combine the Navi skin with Nord code highlighting:
chulapa-skin:
skin: navi
highlight: nord
Browse the skin previews and
syntax highlighting examples
to compare them with your own content. Skin names are case-sensitive: use the
filename without its .scss extension.
Titles and subtitles now support Markdown as well as HTML. A little emphasis or an inline code name can be written using the same syntax as the rest of your post.
Give readers another way to find your content
Chulapa now supports Fuse.js and Simple-Jekyll-Search, alongside the existing search providers. Both use an index generated during the Jekyll build, so they are useful options for a static site.
To select Fuse.js in _config.yml:
search:
provider: fusejs
maxwords: 30
Use provider: simplesearch to select Simple-Jekyll-Search. The maxwords
setting controls how much page content is included in these indexes; it is
not a limit on the number of results. Pages can be excluded with
include_on_search: false.
The provider needs a separate page using layout: search, with a permalink
matching search.landing_page (by default, /search). Changing the provider
does not create that page for you.
Fuse.js and Lunr results now highlight matching terms, helping readers see why
a page appeared. When updating an older Lunr configuration, replace
search.lunr_maxwords with search.maxwords. The old option still works and
takes precedence if both are present, so remove it when migrating.
See the search configuration for provider-specific settings and setup.
Make room for different kinds of pages
The minimal layout is useful when you want to control your own content width
and structure. In v2.1.0, it can also reuse a theme header:
---
layout: minimal
title: "A project of my own"
show_header: true
header_type: base
---
The header is optional, and the layout stays headerless by default. Enabling it does not add a content container: your markup still controls the page’s width and spacing. Try the minimal header demo for an example.
At the end of an article, show_random adds another way to discover content,
and related_label and random_label let you customize the introductions to
those cards. Random selection happens at build time, using the same tag-based
candidate pool as related content; it does not select a new set on each visit.
The layouts reference covers those options and the other components you can enable on a page.
A few important fixes behind the scenes
Some of the most useful changes are the ones you should barely notice.
Canonical URLs, breadcrumbs and feeds now preserve filenames containing
index.html. Metadata avoids repeated subtitles and empty title separators,
and guest pages no longer inherit the site author’s Twitter/X attribution.
Video structured data now uses the correct URLs before and after deferred
playback. Video snippets also accept optional titles, thumbnails, dates,
descriptions and durations. The main theme script and deferred video player
load from the installed theme, and minimal pages without a maincontent
element no longer trigger the previous JavaScript error.
Font Awesome’s fa_kit_code setting now loads the configured kit. If you still
have fa5_kit_code, it remains supported and takes precedence when both keys
are present. Check that combination if a kit change seems to have no effect.
You can find the full list, including the new skins and highlighting styles, in the v2.1.0 release notes.
Try v2.1.0 on your site
For a remote-theme installation, pin the release in _config.yml:
remote_theme: dieghernan/chulapa@v2.1.0
For a gem-based installation, set the version constraint in your Gemfile:
gem "chulapa-jekyll", "~> 2.1.0"
Then run bundle update chulapa-jekyll and rebuild your site. Version 2.1.0
is available on RubyGems.
The installation guide covers the
required plugins and deployment steps for each method.
Preview a post, a standalone page and your search results before deploying. If you use custom layouts or includes, check them alongside the theme’s examples. For metadata changes, inspect the generated titles, descriptions and canonical URLs on a few representative pages.
The release was checked with Jekyll 3.10.0 and 4.4.1. That is useful coverage, but your own content, plugins and overrides still deserve a preview.
A sneak peek at what’s next
There is already more work on the development branch: optional Mermaid diagrams for technical content, keyboard navigation and visible-focus improvements, and four small starter examples for blogs, portfolios and project pages.
These changes are not part of v2.1.0. They are a preview of the next stage, with no release date promised here. If you try the development branch, keep its version caveats in mind; the pinned release above gives you v2.1.0.
If you give Chulapa a go, I would love to see what you build. Share your site or feedback in GitHub Discussions.