Model Project¶
A real Void website is a small, boring set of files that produces a distinctive
site. This page is the annotated, copy-pasteable layout of a typical project β
where each file lives, where assets go, and how the two configuration surfaces
(theme.void and the - void: plugin block) merge.
The layout¶
my-docs/
βββ mkdocs.yml # the whole look & behavior lives here
βββ requirements.txt # mkdocs + mkdocs-void (and friends)
βββ docs/ # your content; markdown becomes the site
β βββ index.md # home page
β βββ guide/
β β βββ index.md
β β βββ installation.md
β βββ assets/
β β βββ images/ # referenced from markdown (logos, screenshots)
β β β βββ logo-dark.svg
β β β βββ logo-light.svg
β β βββ stylesheets/ # optional extra CSS (theme.void.custom_css)
β β βββ javascripts/ # optional extra JS (theme.void.custom_js)
β βββ about.md
βββ .github/
β βββ workflows/
β βββ pages.yml # build + deploy to GitHub Pages
βββ site/ # build output, gitignored (mkdocs build)
βββ .gitignore
File-by-file¶
| File | Role |
|---|---|
mkdocs.yml |
Aggregates everything: theme.name: void, the theme.void.* settings, the plugins: block, and extra.* brand fields |
requirements.txt |
Pins mkdocs and mkdocs-void so builds are reproducible; third-party recipes add more here |
docs/** |
Your content. Every .md becomes a page; a nav: block in mkdocs.yml (or the default of walking the tree) turns it into navigation |
docs/assets/ |
Non-page files: images you reference from markdown, plus any custom CSS/JS you wire in via theme.void.custom_css / custom_js |
.github/workflows/pages.yml |
Optional but standard β build site/ and deploy to GitHub Pages (see Deployment) |
site/ |
Generated by mkdocs build; always gitignored |
Where assets live¶
Assets are plain files inside docs/, referenced by markdown or by config:
- Images in content β a screenshot sits at
docs/assets/images/search.pngand is referenced as. - Logo β
theme.logosets the default; for the dark-aware logo swap setextra.void_logo_darkandextra.void_logo_light(the theme picks the right one per active scheme). - Favicon β
extra.void_favicon_dark/extra.void_favicon_light, falling back totheme.favicon. - Social card β
extra.void_og_imagepins the social preview image; the theme also auto-generates cards and structured data per page (see Configuration).
The two config surfaces and how they merge¶
Void exposes the same settings from two places, and every key is valid in both:
theme.voidβ the "front door" under the standardtheme:block.- the
- void:plugin block β inline options inplugins:, useful for per-deploy overrides and for tools that generatemkdocs.yml.
At build time the bundled plugin resolves the effective config in one pass:
built-in defaults (_void_defaults, component defaults)
β (any key still missing)
theme.void β wherever you set it
β (deep-merge; the plugin block wins on conflicts)
- void: plugin options
β (validated as one unit β a bad value fails loudly)
rendered site
Concretely: the plugin sets sane defaults for anything you leave out, deep-merges
your theme.void over them, then deep-merges anything written inline in the
- void: block on top β so an inline option always wins β and finally
validates the combined result as a single configuration. Options are never
dropped; whatever you do not set keeps its default.
# mkdocs.yml β a typical, fully working project
site_name: My Docs
site_url: https://user.github.io/my-docs/
repo_url: https://github.com/user/my-docs
theme:
name: void
logo: assets/images/logo-dark.svg
palette:
scheme: slate
font: # Space Grotesk for text, Space Mono for code
text: Space Grotesk
code: Space Mono
void:
glass: medium # light | medium | heavy
dot_matrix: true # NothingOS texture overlay
animation: normal # normal | reduced | none
border: thin
highlight: true
notes: true # notes panel
notes_ttl: 7 # days before a note expires
components:
notes:
show: true # component toggle (all ON by default)
action_cluster:
position: bottom-right # bottom-left | bottom-right
timer:
default_minutes: 25
announcement_bar:
text: "v0.3.0 is live"
position: top
pinned: false
plugins:
- search
- void # every key from theme.void is valid here too
extra:
void_site_tagline: Beauty in broken glass
void_showcase: true # "Powered by Void" credit + badge
# dark-aware branding
void_logo_dark: assets/images/logo-dark.svg
void_logo_light: assets/images/logo-light.svg
Run it¶
Stage a build with mkdocs build (writes site/) and deploy it anywhere β see
Deployment for GitHub Pages, any static host, and Docker.
Next steps¶
- Configuration β the complete, generated reference for every key in both surfaces.
- Void Plugin β how
search+voidwork together and the plugin-block specifics.