7 typography presets
Type is its own axis. Swap the preset and headings, body and captions all move together — you are not choosing a font per block and hoping the next page matches.
WordPress block theme · Free on WordPress.org
Zain is a full site editing theme built the way WordPress asks for one — patterns, templates and
theme.json. Change the whole site's colour and type from the Site Editor, without a
page builder and without a settings panel to learn.
Noon
Typography, spacing and colour come from theme.json, so the whole
site changes together instead of block by block.
In WordPress this is Appearance → Editor → Styles. Same eight, same hexes.
Style variations
A style variation is a small JSON file that re-declares the whole palette. Pick one in the Site Editor and every block on every template follows, because none of them had the colour hard-coded in the first place. Zain ships eight.
#1B1B1B base · #F0F0F0 contrast
#F8F7F5 base · #191919 contrast
#E2E2E2 base · #3B3B3B contrast
#DAE7BD base · #516028 contrast
#131313 base · #FFFFFF contrast
#DFDCD7 base · #191919 contrast
#330616 base · #FFFFFF contrast
#4433A6 base · #79F3B1 contrast
Type is its own axis. Swap the preset and headings, body and captions all move together — you are not choosing a font per block and hoping the next page matches.
Drop a section style on a group and everything inside it re-tints as a unit. It is how the alternating bands on a long page stay consistent without a second copy of the colours.
Display, Subtitle and Annotation — plus a Checkmark list style registered in
functions.php. Named roles, so the same idea looks the same everywhere.
Patterns
Patterns are blocks, not shortcodes and not a builder's own markup. Insert one, edit it like anything else, and if you switch away from Zain tomorrow the content stays where it is.
Business home, portfolio, shop, CV, coming soon, link-in-bio, and landing pages for a book, an event and a podcast. Each one is a complete page, inserted in a single step.
Cover headings, intro bands, posters and image grids — the top of a page, in the shapes a page usually needs it.
Newsletter, centred heading, search, event list, product grid and book links. All plain blocks, so your form plugin drops straight in.
Text, news, photo, offset and vertical-header — each with a matching home, archive, search, single and query loop, so a whole blog can change character at once.
Typography
Every font file ships inside the theme as woff2 and is registered in
theme.json with a file:./assets/fonts/ source. No request leaves the
visitor's browser for a typeface, which is one fewer thing to answer for under GDPR and one fewer
third party between your reader and your page.
Aa
Sets headings and body out of the box. Slightly rounded, wide apertures, comfortable at small sizes.
Aa
A tighter, more geometric alternative. One variable file covers the whole weight range.
Aa
For code blocks and anything that has to line up in a column. Ligatures included.
The samples above are rendered in the browser's own fallback unless you already have these typefaces installed — this page loads no webfont at all, for the same reason the theme self-hosts its own.
How it is built
There is nothing clever in here to learn or to work around. If you know the Site Editor, you already know Zain.
Home, index, single, page, archive, search and 404, plus three custom page templates — full width, no title, and with a sidebar. Headers and footers are template parts, so one edit reaches every page that uses them.
Appearance tools and root-padding-aware alignments are on. Content is
1160px, wide is 1300px. Change either in one place and every
template follows.
Aside, audio, chat, gallery, image, link, quote, status and video — with a block binding that prints the format's name into a template without a shortcode or a filter.
Every string in functions.php and every pattern passes through the
zain text domain, and the layout is declared RTL-capable on WordPress.org.
The front end loads style.min.css — under a kilobyte. The readable
style.css is served only when SCRIPT_DEBUG is on.
Zain starts from the WordPress team's own default theme, GPLv2, and says so in its readme. The foundations are the ones core maintains.
What it will not do
Most of what makes a theme hard to leave is the part nobody lists. Here is the part Zain leaves out — every item below is checkable in the source before you install it.
There is not one .js file in the theme. Nothing to block your Core Web Vitals,
nothing to conflict with a plugin, nothing to audit.
Every layout is core blocks. Nothing is stored as shortcodes or as a builder's private markup, so your posts stay readable in any other theme.
No "required plugins" notice, no installer, no third-party framework riding along in the zip. Activating Zain activates a theme and nothing else.
Zain registers no admin page and no Customizer section. Everything it can do, it does through the Site Editor — the screen WordPress already gives you.
The theme makes no HTTP request at runtime. No analytics, no licence check, no font CDN, no "usage data" prompt on activation.
Nothing writes rows into your database to make the screenshot come true. You insert the patterns you want, and deleting one deletes one thing.
Questions
WordPress 6.9 or newer and PHP 7.2 or newer. The 6.9 floor is real rather than cautious
— Zain uses block bindings and theme.json v3 features that earlier
versions do not resolve.
It is free, GPLv2 or later, and there is no paid tier. Nothing in the theme is disabled pending a licence key, because WordPress.org does not allow that and because a theme that nags is a theme people uninstall.
Yes. Patterns insert core blocks, so your pages are stored as standard block markup that any block theme renders. What you lose on switching is Zain's styling — the layout of your content, and the content itself, moves with you.
Yes — Appearance → Editor → Styles. Pick one of the eight variations, or one of the seven typography presets, or open the panel and set your own. Changes there are saved by WordPress, not written into the theme, so a theme update never overwrites them.
Zain ships no JavaScript and registers no admin page, so there is very little of it available to conflict with anything. Anything that renders as a block or a shortcode inside post content works the way it does in any block theme.
Yes, and for a block theme you usually do not need to. Template and style edits made in the Site Editor are stored in the database and survive updates on their own. Reach for a child theme when you want to add PHP or ship your own patterns.
All 36 of them are CC0 public domain, sourced from Rawpixel and the Twenty Twenty-Five
theme, and every one is credited with its source URL in the theme's
readme.txt. You may use them on your own site.
Through the WordPress.org support forum for the theme. It is public, so an answer helps the next person with the same question — and it does not depend on one inbox being read.
Install
Appearance → Themes → Add New, search Zain, activate. That is the whole installation, and it is the route that keeps you on automatic updates.
The directory page, with the changelog and the support forum.
wordpress.org/themes/zainClick through the theme in a real WordPress, before installing anything.
Open the previewVersion 1.0.6, straight from WordPress.org, for a manual upload.
zain.1.0.6.zipPublic, searchable, and the fastest way to reach whoever maintains this.
Ask a question