Welcome to Void¶
Glass + NothingOS Design Language for MkDocs
Void blends the translucent depth of Glass with the industrial minimalism of
NothingOS to create documentation that feels like an app β distinctive by
default, fast, and privacy-first. Everything is driven from a single
mkdocs.yml; no custom CSS required to look intentional.
Design Principles¶
Void is built on five principles that ship on every page, every component, and every color by default.
1. Depth through transparency¶
Layer communicate hierarchy. Content sits behind glass; glass sits behind the canvas. The theme deliberately replaces drop shadows with translucency and blur as its primary depth cue, so panels float into the page rather than over it.
- Glass surfaces (
backdrop-filter: blur()+ semi-transparent fills) sit on top of the pure-black canvas and read differently at three intensities. - Layering order is fixed: canvas β dot-matrix β content β glass panels β header/sidebar/TOC rails β floating chrome (action cluster, back-to-top, toasts, overlays).
- No decoration without a job β every blur, border, and opacity value is a design token you can override.
| Intensity | Blur | Feel |
|---|---|---|
light |
subtle | Content stays almost fully crisp |
medium (default) |
balanced | Frosted panels that still reveal motion behind |
heavy |
strong | Deep frosted-glass, high separation |
Backdrop support
backdrop-filter needs a modern Chromium, Firefox, or Safari/WebKit engine.
On browsers without it the glass falls back to a flat semi-transparent
panel β the layout and hierarchy survive unchanged.
2. Restraint over decoration¶
Every visual element earns its place. There is a dot matrix, not a pattern library; one accent color, not a palette marketing deck; one pair of fonts, not a type romance.
- Pure black canvas β the NothingOS signature.
--void-ink: #000000. - Monochrome hierarchy β white β muted grays β Nothing Red. Structure is carried by tone, not by rainbow.
- Nothing Red (
#ff3030) is the only signal color: active nav, links, progress, focus, and accents. If it is red, it is interactive. - Dot-matrix overlay (
void.dot_matrix) adds the NothingOS texture as a fixed, non-intrusive layer behind every surface.
3. Functional color¶
Color is never decorative alone β it encodes meaning.
- Accent = actionable (links, active state, focus ring, progress).
- Tone = structure (text primary β secondary β muted, borders).
- Scheme = context:
slate(dark, default) anddefault(light) are swapped by the palette toggle in the header. - Selection & scrollbar are themed tokens too, so even the "invisible" chrome matches your brand.
4. Typographic clarity¶
One geometric sans for display and body, one monospace for code and metadata labels β no mixing, no third typeface.
- Space Grotesk β headings, body, UI (via
theme.font.text). - Space Mono β code, inline code, uppercase label chips (via
theme.font.code). - Every size, weight, leading, and letter-spacing is a token
(
theme.void.typography.*), fromfont_size_basetoheading_letter_spacing.
5. Motion with restraint¶
Animation exists to orient, never to distract β and it honors the operating system.
- Entrance & hover animations + scroll progressives, all tagged to the
animationtoken (normal|reduced|none). prefers-reduced-motionautomatically disables animations for users who ask for it.- The reading progress bar and scrollspy TOC give the page a sensed, physical presence without screens that chase the cursor.
graph LR
A[MkDocs Markdown] --> B[Void Plugin]
B --> C[HTML Templates]
C --> D[Glass: header sidebar toc footer]
D --> E[Search / Notes / Timer / Cluster]
E --> F[Reading mode / Offline SW / PWA]
Features¶
Everything below ships enabled by default β switch it, don't rebuild it.
Over 200 config keys under theme.void.* tune behavior without touching code.
Visual system¶
| Feature | What you get |
|---|---|
| Glass morphism | glass: light / medium / heavy β configurable blur, saturation, opacity |
| NothingOS canvas | Pure black #000000 background, dot-matrix overlay (dot_matrix) |
| Dark & Light modes | palette: toggle between slate and default schemes |
| Typography | Space Grotesk + Space Mono via Google Fonts, fully token-overridable |
| Borders & shadows | border width/style/color + shadows style per component family |
| Scrollbar & selection | Native-chrome theming (scrollbar, selection token groups) |
| Animations | Page transitions, hover effects, scroll progressives, reduced-motion aware |
Layout & navigation¶
- Sticky glass header β frosted rail with logo, site name, page title, and
configurable right-side actions (
palette_toggle,search,repo_link, custom links/buttons). - Sidebar β glass, collapsible (
Ctrl+Shift+B), collapsible section headings, active border, nested indent,left/rightposition swap. - TOC rail β scrollspy tracking, configurable levels (h2βh6), collapsible
(
Ctrl+Shift+T), permalinks,left/rightswap with the sidebar. - Breadcrumbs β auto trail above content when ancestors exist.
- SPA navigation β in-page transitions with scroll restore and back/forward handling.
- Reading progress bar + floating back-to-top button with threshold.
- Prev/next footer navigation,
default | minimal | extendedfooter layouts, social icons, custom columns. - Mobile drawer β hamburger menu with a responsive, touch-friendly layout.
- Page-level overrides β front matter
void:blocks (hide header/sidebar/ TOC/footer,glass: "heavy",dot_matrix: false, custom CSS,layout: wide|full).
Content & components¶
Check every component page for the full recipe β here is the home-page taste:
Note
Admonitions are glass callouts with per-type accent colors and optional
titles; details/pymdownx.details folds them into collapsibles.
pymdownx.tabbed alternates grouped content β works with code blocks,
admonitions, and task lists inside each tab.
pymdownx.tasklist renders interactive checkboxes; persist_state remembers
what you ticked per page.
footnotes disambiguates side notes1 without breaking reading flow.
- Code blocks β syntax highlighting (
highlight.js), copy button, optional line-number gutter andhl_linesemphasis. - Diagrams β
mermaidsuperfence with zoom/pan/fullscreen controls. - Math β KaTeX via
pymdownx.arithmatex, e.g. a glass blur radius \(r = \frac{1}{b}\) where \(b\) is blur:
$\(\text{radius} = \sqrt{{\text{blur}}^2 + {\text{saturation}}^2}\)$
- Images & SVG β click-to-zoom lightbox,
lazyloading, dark-aware logos viadata-md-scheme-dark/light. - Tables β responsive scroll wrapper, optional striped/bordered styles.
- Buttons, cards, trees, toast β component variants, glass cards,
treecode blocks with dimmed comments, and a toast notification system. - CSS classes in markdown β style content with utility classes
(
{.button .primary},.glass, accent text) viaattr_list+md_in_html.
Search & discovery¶
- Full-screen search modal β instant, opened with
/, suggestions, context snippets, term highlighting, and a per-result copy link share button. search.suggest+search.highlightpassthroughs and full dialog customization (search:*keys: placeholder, min chars, max results, glass, breadcrumbs, icons).
Engagement & privacy¶
- Page feedback β "Was this page helpful?" opens a prefilled GitHub issue. No analytics, no tracking.
- Announcement bar β dismissable (remembered) banner;
top|right|bottom| left|centerplacements; non-dismissable pinned mode. - Cookie consent β privacy-first: banner appears only when a real
integration exists (
render: auto), oralways/never. - Opt-in giscus comments β consent-gated GitHub Discussions threads with palette-synced theme.
- "Powered by Void" footer credit + dot-matrix badge (
void_showcase).
Productivity (the app layer)¶
- Keyboard shortcuts (
?opens the help modal) β every binding is remappable:
| Shortcut | Action |
|---|---|
/ |
Open search |
? |
Keyboard shortcuts help |
Alt+Shift+R |
Toggle reading mode |
Alt+Shift+A |
Toggle action cluster |
Alt+Shift+T |
Open focus timer |
Ctrl+Shift+N |
Toggle notes panel |
Ctrl+Shift+B / Ctrl+Shift+T |
Collapse sidebar / TOC |
Ctrl+Shift+L |
Cycle color scheme |
Ctrl+Shift+G |
Toggle repo popover |
- Reading mode β distraction-free article: header, sidebars, TOC, footer, and progress chrome hide; the article re-measures to full width; persisted.
- Action cluster β floating hub (
+) expanding into keyboard help, notes, focus timer, and reading mode; per-action shortcuts and badges. - Focus timer β 25-minute default session in the TOC panel + a chip in reading mode, WebAudio chime, toast on complete, persisted across reloads.
- Notes panel β quick side notes with TTL expiry and export.
- Repo popover β hover the repo link for description, stars, forks, issues, language, latest commit (cached; honest about GitHub rate limits).
Developer & extensibility¶
- Generated config reference β
tools/emit_config_reference.pyemits the canonical key table from the plugin's own truth. - Design tokens β override any of
colors,typography,spacing,border_radius,transitions,shadowsundertheme.void.*. - Component visibility toggles β show/hide any piece (
components.*.show) via config only; nothing is stripped from the theme. - Custom CSS/JS/head/body injection β
custom_css,custom_js,extra_css,extra_javascript,void_custom_head/body_start/body_end,void_custom_html_attrs. - Config builder (dev tool) β a self-contained wizard that generates a
mkdocs.ymlfrom grouped questions (gear in the cluster; OFF by default on real sites). - AI-readable mode β every page ships a watermarked Markdown mirror, plus
llms.txtandllms-full.txtat the site root for agents. - PWA + offline β auto
manifest.webmanifest, service-worker caching (void/templates/sw.js), CDN/local/bundle asset modes. - Social cards & structured data β per-page Article JSON-LD and a generated OG/Twitter card image.
- i18n β flat alias keys for every user-facing string (search, TOC, labels).
Quick Start¶
That is the whole setup: install, configure, serve, go.
Example¶
A working page using several components at once:
Glass adapts to your scheme
The same markup renders correctly in both slate and default palettes β
no per-scheme CSS needed.
Start with the components you reach for most:
- Admonitions for callouts
- Tabs for grouped content
- Task lists for steps
- Mermaid + KaTeX for signal
- A custom design token override
Void β where glass meets minimalism.
About Β· GitHub Β· Report an Issue
Docs policy: the documentation and READMEs never link to, embed, or depend on planning artifacts β this page stands on its own.
-
Footnote text renders in a clean, disambiguated note list at the foot of the page β marked, monospace, and searchable. ↩