A refined documentation theme for Zensical
Project description
Zensical Alloy
A documentation theme for Zensical. Alloy extends the built-in Material theme, so search, instant navigation, code annotations, footnotes, tabs, palette switching, and plugins keep working.
Alloy only changes the visual layer. It gives Material a quieter header, denser navigation, calmer typography, and matching styles for common documentation surfaces.
Install
pip install zensical-alloy
Use
In zensical.toml:
[project.theme]
name = "alloy"
[project.extra.alloy]
accent_preset = "violet"
In mkdocs.yml:
theme:
name: alloy
extra:
alloy:
accent_preset: violet
What Alloy Changes
- Header, search trigger, source link, and palette toggle.
- Left navigation, right table of contents, and footer links.
- Prose typography, headings, links, tables, and task lists.
- Code blocks, annotations, content tabs, callouts, and buttons.
- Mermaid diagrams and optional Apache ECharts blocks.
- Mobile drawer spacing and tap targets.
Alloy does not replace the Material runtime. The behavior stays upstream.
Screenshots
| Light | Dark |
|---|---|
| Code | Callouts |
|---|---|
| Mobile home | Mobile drawer |
|---|---|
Theme Knobs
All public options live under [project.extra.alloy]:
[project.extra.alloy]
accent_preset = "violet" # orange, slate, cyan, violet
accent_color = "oklch(...)" # optional light-mode override
accent_color_dark = "oklch(...)" # optional dark-mode override
radius = "0.625rem"
font_sans = "\"Inter\", ui-sans-serif, system-ui"
font_mono = "\"JetBrains Mono\", ui-monospace"
content_width = "46rem"
sidebar_width = "clamp(10rem, 18vw, 14.5rem)"
toc_width = "clamp(9rem, 15vw, 13rem)"
top_nav_accent = false
accent_preset uses Alloy's curated preset values. Material palette.accent
still accepts Material names such as indigo, amber, and deep-purple.
Use alloy_layout: wide in page front matter when one page needs wider content:
---
title: System overview
alloy_layout: wide
---
See the theming guide for details.
Compatibility
Alloy is tested with zensical >= 0.0.40 on Python 3.10 through Python 3.13.
The compatibility notes in MATERIAL_COMPAT.md list the upstream Material selectors and variables that Alloy relies on.
Local Development
python -m venv .venv
.venv/bin/pip install -e .
.venv/bin/python scripts/bundle-css.py --watch
In another terminal:
cd examples/zensical-toml
../../.venv/bin/zensical serve -a 127.0.0.1:8765
Open http://127.0.0.1:8765. The Kitchen Sink page is the main regression target because it places the busiest surfaces on one page.
Checks
Run the full local sweep:
./scripts/smoke.sh
That rebuilds the CSS bundle, checks cache-bust versions, and builds the canonical docs, MkDocs compatibility example, variant fixtures, and real-world shape fixtures.
Contributing
Good changes are small and visible. Improve one component, add one focused fixture, tighten the docs, or make light and dark mode more consistent.
Read the contributing guide for the workflow.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zensical_alloy-0.2.3.tar.gz.
File metadata
- Download URL: zensical_alloy-0.2.3.tar.gz
- Upload date:
- Size: 1.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c7af51df9dd0651ad67c7b4f344f4ce47a7ec41bf84915638c1897756dab747
|
|
| MD5 |
46a3999b5fa0a857a2ffbfcd4f9e7c56
|
|
| BLAKE2b-256 |
559d18f8a1eace5a7f7ee8e48c7fea5e1073ce2386bf94580e4d64ccaa194de4
|
Provenance
The following attestation bundles were made for zensical_alloy-0.2.3.tar.gz:
Publisher:
release.yml on lokeshguduru/zensical-alloy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zensical_alloy-0.2.3.tar.gz -
Subject digest:
3c7af51df9dd0651ad67c7b4f344f4ce47a7ec41bf84915638c1897756dab747 - Sigstore transparency entry: 1899303760
- Sigstore integration time:
-
Permalink:
lokeshguduru/zensical-alloy@ae66d289cfbe32f9a809e8fa74c24403f6471414 -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/lokeshguduru
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ae66d289cfbe32f9a809e8fa74c24403f6471414 -
Trigger Event:
push
-
Statement type:
File details
Details for the file zensical_alloy-0.2.3-py3-none-any.whl.
File metadata
- Download URL: zensical_alloy-0.2.3-py3-none-any.whl
- Upload date:
- Size: 78.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed012f5f112c03a8b1213bb0bd0c16e221736db2c0f4ea2ebfaf9ccc9b162431
|
|
| MD5 |
47b6348f6538c7117e0aeedf41202253
|
|
| BLAKE2b-256 |
1d3f10d1384b1419f943f39124e11586e009e0376b62145095a93577addbf8c8
|
Provenance
The following attestation bundles were made for zensical_alloy-0.2.3-py3-none-any.whl:
Publisher:
release.yml on lokeshguduru/zensical-alloy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zensical_alloy-0.2.3-py3-none-any.whl -
Subject digest:
ed012f5f112c03a8b1213bb0bd0c16e221736db2c0f4ea2ebfaf9ccc9b162431 - Sigstore transparency entry: 1899303883
- Sigstore integration time:
-
Permalink:
lokeshguduru/zensical-alloy@ae66d289cfbe32f9a809e8fa74c24403f6471414 -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/lokeshguduru
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ae66d289cfbe32f9a809e8fa74c24403f6471414 -
Trigger Event:
push
-
Statement type: