A smol k8s homelab kit. Also mirrored to codeberg.org/open-engineering/smol-k8s-lab https://smol-k8s-lab.open.engineering
  • Python 99.9%
  • Shell 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Owentje c81b715305
All checks were successful
Python package build and publish / build_and_publish (push) Successful in 9s
Python package build and publish / build-and-publish (push) Successful in 0s
Update dependency zensical to ^0.0.66 (#95)
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [zensical](https://github.com/zensical/zensical) ([changelog](https://zensical.org/docs/changelog/)) | `^0.0.57` → `^0.0.66` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/zensical/0.0.66?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/zensical/0.0.57/0.0.66?slim=true) |

---

> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/10) for more information.

---

### Release Notes

<details>
<summary>zensical/zensical (zensical)</summary>

### [`v0.0.66`](https://github.com/zensical/zensical/releases/tag/v0.0.66): 0.0.66

[Compare Source](https://github.com/zensical/zensical/compare/v0.0.65...v0.0.66)

#### Summary

This version adds compatibility with `mkdocs-autoapi` and `mkdocs-api-autonav`, making it easier to document Python projects. These plugins discover modules and packages, generate API reference pages, and organize them in your site's navigation. They build on `mkdocstrings`, which renders the reference content from your code and docstrings, so you can skip manually creating a page for each module.

It also fixes responsive image URLs in raw HTML, ensures sitemaps include all published pages, and adds support for custom InlineHilite formatters configured through TOML.

Additionally, the [user interface is updated to v0.0.33](https://github.com/zensical/ui/releases/tag/v0.0.33), adding styling for `mkdocstrings` backlinks in both themes, restoring GLightbox styles after instant navigation, respecting custom Mermaid node label colors, and fixing the `/` search shortcut.

#### Changelog

##### Features

- [`b2f4de7`](b2f4de7) **zensical**, **compat** – support mkdocs-autoapi and mkdocs-api-autonav plugins

##### Bug fixes

- [`3d8c0e2`](3d8c0e2) **ui** – update ui to v0.0.33
- [`7be3d1d`](7be3d1d) **compat** – resolve custom inline formatters in TOML configuration ([#&#8203;980](https://github.com/zensical/zensical/issues/980))
- [`e3099ab`](e3099ab) **zensical**, **compat** – include all published pages in sitemap ([#&#8203;977](https://github.com/zensical/zensical/issues/977))
- [`e24d0fc`](e24d0fc) **compat** – resolve raw HTML srcset URLs relative to Markdown source ([#&#8203;975](https://github.com/zensical/zensical/issues/975))

### [`v0.0.65`](https://github.com/zensical/zensical/releases/tag/v0.0.65): 0.0.65

[Compare Source](https://github.com/zensical/zensical/compare/v0.0.64...v0.0.65)

#### Summary

This version expands MkDocs compatibility with a native replacement for the `rss` plugin and support for mkdocstrings backlinks. Zensical can now generate RSS 2.0 and JSON Feed 1.1 feeds for created and updated pages. Python API documentation can also show which pages reference a documented object, with backlinks kept current across cached builds.

#### Changelog

##### Features

- [`e7876ab`](e7876ab) **zensical**, **compat** – support mike's `version_selector` setting
- [`25b95e9`](25b95e9) **zensical**, **compat** – support mkdocstrings' `enable_inventory` setting
- [`0223fc9`](0223fc9) **compat** – support more macros settings
- [`acee89a`](acee89a) **zensical**, **compat** – support autorefs settings
- [`0291923`](0291923) **zensical**, **compat** – support mkdocstrings backlinks
- [`c214988`](c214988) **zensical**, **compat** – add `rss` plugin replacement ([#&#8203;443](https://github.com/zensical/zensical/issues/443))

##### Bug fixes

- [`cf68f6d`](cf68f6d) **zensical**, **compat** – resolve source links to published post URLs ([#&#8203;966](https://github.com/zensical/zensical/issues/966))

### [`v0.0.64`](https://github.com/zensical/zensical/releases/tag/v0.0.64): 0.0.64

[Compare Source](https://github.com/zensical/zensical/compare/v0.0.63...v0.0.64)

#### Summary

Many of you have been waiting for this one: Zensical now includes native blog support. As a direct port of the Material for MkDocs blog plugin, it preserves the familiar configuration, metadata, URLs, archives, categories, authors, pagination, and more. We're happy to finally put it into your hands, with more flexible blogging functionality planned for the future.

#### Changelog

##### Features

- [`5825381`](5825381) **zensical**, **compat**, **ui** – add `blog` plugin replacement

##### Bug fixes

- [`a85875e`](a85875e) **ui** – update ui to v0.0.32

### [`v0.0.63`](https://github.com/zensical/zensical/releases/tag/v0.0.63): 0.0.63

[Compare Source](https://github.com/zensical/zensical/compare/v0.0.62...v0.0.63)

#### Summary

This version ensures pages containing snippets rebuild when source files change during local preview and excludes hidden files and directories from the generated site. It also fixes preview-site root redirects and returns proper 404 responses while preserving custom error pages.

Additionally, the [user interface] is updated to [v0.0.31], fixing empty submenus for sections containing only an index page and improving task list checkbox sizing and alignment in the modern theme. It also updates dependencies and adds 60 new icons across Lucide, Octicons, and Simple Icons.

[user interface]: https://github.com/zensical/ui

[v0.0.31]: https://github.com/zensical/ui/releases/tag/v0.0.31

#### Changelog

##### Bug fixes

- [`a771962`](a771962) **ui** – update ui to v0.0.31
- [`dfe8f94`](dfe8f94) **zensical** – rebuild pages containing snippets on source changes ([#&#8203;950](https://github.com/zensical/zensical/issues/950))
- [`d6cd5d5`](d6cd5d5) **zensical**, **zensical-serve** – append trailing slash to preview site root ([#&#8203;944](https://github.com/zensical/zensical/issues/944))
- [`2070bf1`](2070bf1) **zensical**, **compat** – don't add dotfiles to final site ([#&#8203;945](https://github.com/zensical/zensical/issues/945))

### [`v0.0.62`](https://github.com/zensical/zensical/releases/tag/v0.0.62): 0.0.62

[Compare Source](https://github.com/zensical/zensical/compare/v0.0.61...v0.0.62)

#### Summary

This version adds support for the [mkdocs-callouts] plugin, which renders Obsidian-style callouts as admonitions. It also improves compatibility with existing MkDocs projects by accepting more plugin settings and fixes builds when the project configuration file is included in `watch`.

Additionally, the [user interface] is updated to [v0.0.30], ensuring that anchor links reveal targets inside collapsed details, content tabs, and annotations – including deeply nested combinations – before scrolling to them.

[mkdocs-callouts]: https://github.com/sondregronas/mkdocs-callouts

[user interface]: https://github.com/zensical/ui

[v0.0.30]: https://github.com/zensical/ui/releases/tag/v0.0.30

#### Changelog

##### Features

- [`d8fbb05`](d8fbb05) **compat** – support mkdocs-callouts plugin by enabling pymdownx.quotes extension with callouts support ([#&#8203;938](https://github.com/zensical/zensical/issues/938))

##### Bug fixes

- [`65a019d`](65a019d) **ui** – update ui to v0.0.30
- [`5c0bd36`](5c0bd36) **compat** – ignore config file in watch setting ([#&#8203;934](https://github.com/zensical/zensical/issues/934))
- [`13fd89e`](13fd89e) **compat** – relax mike settings validation ([#&#8203;932](https://github.com/zensical/zensical/issues/932))

##### Refactorings

- [`9f36bb5`](9f36bb5) **compat** – relax all plugins validation

### [`v0.0.61`](https://github.com/zensical/zensical/releases/tag/v0.0.61): 0.0.61

[Compare Source](https://github.com/zensical/zensical/compare/v0.0.60...v0.0.61)

#### Summary

This version adds more comprehensive support for [documentation redirects](https://zensical.org/docs/setup/redirects/) in `mkdocs.yml` and `zensical.toml`. Zensical supports page and [anchor redirects](https://zensical.org/docs/setup/redirects/#redirect-a-section), resolves redirect chains, rejects cycles, and preserves links [when pages are moved or split](https://zensical.org/docs/setup/redirects/#split-a-page).

##### Anchor redirects

Renaming a heading normally breaks bookmarks and external links to its old anchor. For example, after renaming `## Installation` to `## Getting started`, add:

```toml
[project.plugins.redirects.redirect_maps]
"guide.md#installation" = "guide.md#getting-started"
```

Existing links to `/guide/#installation` will then redirect to `/guide/#getting-started`. The same configuration can redirect anchors between pages or preserve individual sections when splitting a page.

##### Automatic redirects

[Zensical Studio](https://zensical.org/studio/) detects renamed headings and offers an **Add anchor redirect** CodeLens. It can complete, validate, navigate to, and repair redirect targets while compacting repeated changes, updating redirect chains, and removing redundant self-redirects.

<img width="557" height="86" src="https://github.com/user-attachments/assets/802d8d99-a205-44af-a29f-6a26eaaa5780" />

#### Changelog
##### Features

- [`215d7fa`](215d7fa) **zensical**, **compat** – resolve redirect chains and reject cycles
- [`a6fdc5f`](a6fdc5f) **zensical**, **compat** – resolve anchor overrides in page redirects
- [`0b1a378`](0b1a378) **zensical**, **compat** – support anchor redirects

##### Bug fixes

- [`6910d56`](6910d56) **compat** – relax validation of autorefs settings
- [`eac9e24`](eac9e24) **ui** – update ui to v0.0.29
- [`78a34cd`](78a34cd) **zensical-serve** – avoid port conflicts in server doctests
- [`304e280`](304e280) **compat** – relax search validation ([#&#8203;926](https://github.com/zensical/zensical/issues/926))

##### Refactorings

- [`6220f43`](6220f43) **zensical** – clarify redirect planning and output

### [`v0.0.60`](https://github.com/zensical/zensical/releases/tag/v0.0.60): 0.0.60

[Compare Source](https://github.com/zensical/zensical/compare/v0.0.59...v0.0.60)

#### Summary

This version updates the user interface to 0.0.28, fixing navigation pruning and alternate-link handling while adding 51 new icons. It also adds direct support for the `table-reader` plugin and fixes template inclusion with macros on Windows extended-length paths.

#### Changelog

##### Features

- [`3b929cc`](3b929cc) **compat** – support table-reader plugin directly (not through macros)

##### Bug fixes

- [`82ece74`](82ece74) **ui** – update ui to v0.0.28
- [`206b6b3`](206b6b3) **compat** – handle Windows extended-length paths when including templates with macros ([#&#8203;914](https://github.com/zensical/zensical/issues/914))

### [`v0.0.59`](https://github.com/zensical/zensical/releases/tag/v0.0.59): 0.0.59

[Compare Source](https://github.com/zensical/zensical/compare/v0.0.58...v0.0.59)

#### Summary

This version fixes navigation title precedence, Windows `custom_dir` paths, `material/meta` activation, and inline SVG icons processed by the `minify` plugin.

#### Changelog

##### Bug fixes

- [`005f01f`](005f01f) **zensical** – `minify` plugin breaks icons `circle` and `rect` elements
- [`05f297e`](05f297e) **zensical**, **compat** – respect navigation title precedence ([#&#8203;906](https://github.com/zensical/zensical/issues/906))
- [`96d43cd`](96d43cd) **compat** – `custom_dir` path interpreted incorrectly on Windows ([#&#8203;902](https://github.com/zensical/zensical/issues/902))
- [`9f1042a`](9f1042a) **zensical**, **compat** – `meta` plugin only enabled when using `material/meta` ([#&#8203;898](https://github.com/zensical/zensical/issues/898))

##### Refactorings

- [`6398ebd`](6398ebd) **zensical**, **compat** – separate navigation title resolution

### [`v0.0.58`](https://github.com/zensical/zensical/releases/tag/v0.0.58): 0.0.58

[Compare Source](https://github.com/zensical/zensical/compare/v0.0.57...v0.0.58)

#### Summary

This version marks a major evolution of Zensical's build architecture and completes the most essential MkDocs plugin replacements.

Six new plugin replacements are now included:

- `meta`
- `redirects`
- `minify`
- `tags`
- `literate-nav`
- `awesome-nav`

The existing `search`, `mkdocstrings`, and `autorefs` replacements have also been migrated to the new architecture. We kept their behavior close to the upstream plugins while moving almost all processing into Rust. Python is now primarily responsible for configuration normalization and the narrow Python-Markdown adapter used by `literate-nav`.

Under the hood, the build pipeline now runs on a substantially more efficient ZRX scheduler and stream architecture. Together with more compact intermediate data, shared page state, and fewer allocations, this **reduces peak memory usage by roughly 30–40%** on large projects. Builds are also modestly faster.

Most remaining build time is now spent rendering Markdown through Python-Markdown. One of our next major performance steps is replacing that stage with our Rust-based, Python-Markdown-compatible parser, as announced in the [June edition](https://mail.zensical.org/monthly/2026/06/) of Zensical Monthly.

Over the coming weeks, we'll focus on adding more plugin replacements so that increasingly complex existing projects can switch to Zensical without missing out on functionality. We'll also continue evolving the module API and make it available to interested early users before releasing it publicly.

#### Changelog

##### Breaking changes

- [`34043fe`](34043fe) – remove x86 and armv7 musl builds

##### Features

- [`af7ae6f`](af7ae6f) **zensical** – support secure WebSockets for preview ([#&#8203;893](https://github.com/zensical/zensical/issues/893))
- [`1e1fc79`](1e1fc79) **zensical**, **compat** – add `awesome-nav` MkDocs plugin replacement
- [`c3dbdfe`](c3dbdfe) **zensical**, **compat** – add `literate-nav` MkDocs plugin replacement
- [`32bd870`](32bd870) **zensical**, **zensical-serve**, **zensical-watch**, **compat** – add `tags` MkDocs plugin replacement
- [`cbdd6ce`](cbdd6ce) **zensical**, **compat** – add `minify` MkDocs plugin replacement
- [`afe1ecb`](afe1ecb) **zensical**, **compat** – add `redirects` MkDocs plugin replacement
- [`8dc4a80`](8dc4a80) **zensical**, **compat** – add `meta` MkDocs plugin replacement

##### Bug fixes

- [`1ec42b9`](1ec42b9) **ui** – update ui to v0.0.27
- [`965351d`](965351d) **compat** – run link rewriting post-processor before raw HTML post-processor
- [`7fe9245`](7fe9245) **zensical** – propagate unresolved operator failures
- [`02d903d`](02d903d) **compat** – maintain Python-Markdown extensions ordering

##### Performance improvements

- [`f4830e0`](f4830e0) **compat** – iterate over raw HTML blocks only once per post-processor
- [`af0ca2e`](af0ca2e) **compat** – faster autorefs URL membership check

##### Refactorings

- [`3c779b9`](3c779b9) **zensical**, **compat** – finalize scheduler and plugin integration
- [`86646a4`](86646a4) **zensical**, **zensical-serve**, **compat** – reconcile MkDocs plugin infrastructure
- [`83b0fd7`](83b0fd7) **zensical**, **compat** – migrate `autorefs` MkDocs plugin replacement
- [`3a390c7`](3a390c7) **zensical**, **compat** – migrate `mkdocstrings` MkDocs plugin replacement
- [`ff11fe3`](ff11fe3) **zensical**, **compat** – migrate `search` MkDocs plugin replacement
- [`de7757b`](de7757b) **zensical**, **zensical-watch** – migrate workflows to ZRX scheduler and streams

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yODguMCIsInVwZGF0ZWRJblZlciI6IjQzLjI4OC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: Renovate Bot <bot@renovateapp.com>
Reviewed-on: #95
2026-09-29 19:47:51 +00:00
.forgejo Add valkey-operator (#96) 2026-09-13 16:23:05 +00:00
docs Add valkey-operator (#96) 2026-09-13 16:23:05 +00:00
renovate_scripts update renovate script 2026-05-17 09:58:19 +02:00
smol_k8s_lab Add valkey-operator (#96) 2026-09-13 16:23:05 +00:00
.gitignore Support Environments (#49) 2026-08-05 22:17:03 +00:00
.pre-commit-config.yaml update XDG library, add pre-commit hook (#56) 2023-04-08 02:14:07 -07:00
.stylelintrc.json Massive docs update for 2.0.0 (#98) 2023-12-02 11:34:58 +01:00
AI_POLICY.md fix bitwarden migration to include database hostname 2026-08-17 09:38:52 +02:00
CODEOWNERS clean up more docs 2026-08-06 08:19:59 +02:00
CONTRIBUTING.md clean up old docs and old repos 2026-06-21 12:40:51 +02:00
LICENSE update license to be APGL: GNU Affero General Public License, which it should have been all along 2024-01-10 21:39:47 +01:00
poetry.lock Update dependency zensical to ^0.0.66 (#95) 2026-09-29 19:47:51 +00:00
pyproject.toml Update dependency zensical to ^0.0.66 (#95) 2026-09-29 19:47:51 +00:00
README.md align image to right 2026-08-16 19:56:18 +02:00
renovate.json update renovate.json 2026-05-15 09:56:13 +02:00
smol-k8s-lab.png v5.0.0: backup/restore apps, overhaul TTS, add new node to existing cluster + 🐛 fixes (#210) 2024-05-15 12:05:04 +02:00
zensical.toml support funkwhale and remove custom script for peertube (#87) 2026-08-25 14:01:54 +00:00

🧸 smol-k8s-lab

PyPI - Version PyPI - Downloads

A terminal based tool to install slimmer k8s distros on metal, with batteries included!

Screenshot of the smol-k8s-lab help menu

Features

  • Deploys Argo CD by default, so you can manage your entire lab using files in open source git repos
    • Argo CD ships with a dashboard with a custom theme 💙
    • Argo CD is default secured with a self hosted OIDC provider, Zitadel
The smol-k8s-lab mascot, a very simple brown bear with claws and a single fang. To his upper left he has a blue heart.
  • Uses a local password manager of your choice. Currently supported:
    • Bitwarden
    • KeyPass
    • macOS keychain
    • Freedesktop Secret Service supports many DE including GNOME (requires secretstorage)
    • KDE4 & KDE5 KWallet (requires dbus)
  • External Secerts management for your sensitive Kubernetes Secret values. Currently supported:
  • Manages all your authentication needs centrally using Zitadel, a self-hosted OIDC provider
  • Supports initialization on a range of common self-hosted apps 📱
  • Allows you to deploy multiple environments, so you can have environments for dev, testing, prod, etc.
  • Lots o' docs
  • Commitment to never monetizing this app. It will always be AGPL licensed and free 💙
  • No AI or LLM "features" and a "No AI" contribution policy

Installation

🐝 sure to check out our full installation guide, but the gist of it is smol-k8s-lab can be installed via pipx (or brew coming soon).

pipx

smol-k8s-lab requires Python 3.12+ (and pipx). If you've already got both and other pre-reqs, you should be able to:

# install the CLI
pipx install smol-k8s-lab

# Check the help menu before proceeding
smol-k8s-lab --help

Checkout our TUI docs for more info on how to get started playing with smol-k8s-lab :-)

Upgrades

Check out our upgrades guide for how to upgrade to different major versions, but in general, you can always run:

pipx upgrade smol-k8s-lab

Under the hood

Note: this project is not officially affiliated with any of the below tooling or applications.

Supported k8s distributions

We always install the latest version of Kubernetes that is available from the distro's startup script.

Distro Description

k3s
The certified Kubernetes distribution built for IoT & Edge computing

KinD
kind is a tool for running local Kubernetes clusters using Docker container “nodes”. kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI.

We tend to test first on k3s first, then the other distros. k3d support coming soon.

Default Installed Applications

All of these can be disabled with the exception of Argo CD, which is optional, but if Argo CD is not installed, smol-k8s-lab will only install: MetalLB, prometheus CRDs, Traefik, and cert-manager.

Application Description
metallb logo, blue arrow pointing up, with small line on one leg of arrow to show balance
metallb
Loadbalancer and IP Address pool manager for metal
cert manager logo
cert-manager
For SSL/TLS certificates
traefik logo, blue gopher wearing a plane director outfit
Traefik
Traefik is both an Ingress and Gateway API controller and we're currently switching to supporting it in addition to cilium since ingress-nginx is deprecated.
alloy logo, a redish orange spiraly triangular circle
alloy
For collecting metrics, logs, and traces to be forwarded to loki, tempo, and mimir and viewed in grafana.
argo CD logo, an organer squid wearing a fishbowl helmet
Argo CD
Gitops - Continuous Deployment
ESO logo, outline of robot with astricks in a screen in it's belly
ESO
external-secrets-operator integrates external secret management systems like OpenBao and Bitwarden
OpenBao logo, drawing of 3 small bao with simple eyes personifying them
OpenBao
OpenBao (Hashicorp Vault fork) - it's a Secrets Store.
Zitadel logo, an orange arrow pointing left
ZITADEL
An identity provider and OIDC provider to provide SSO
Grafana logo, an orange spiral
Grafana Stack
Grafana monitoring and logging stack (LGTM) using loki, grafana, tempo, and mimir (which includes alert manager).

For a complete list of installable applications, checkout the default apps docs. To install your own custom apps, you can check out an example via the config file or learn how to do it via the tui.

Status

Somewhat stable and being actively supported, so if you'd like to contribute or just found a 🐛, feel free to open an issue (and/or pull request) over at codeberg.org, and we'll try to take a look ASAP!