Vynil is an installer for kubernetes intended to be used either at home or for SaaS. The goal is to build a package manager akin to dpkg/rpm but for the kubernetes.
Unlike helm, kustomize, argoCD, Flux... which all give you all the flexibility to install as you please. Vynil main goal is to help create an integrated distribution for kubernetes, so customisation come scarse but integration of everything by default. Vynil differ also from openshift since olm can only install operators. Requiering an operator to manage an app while there is already a pseudo-generic installtion operator is madness. Olm should be able to install awx and phpmyadmin, but instead, you need a tower operator to install awx (as if the main use case is running many instances AWX instances). You even need an operator to install kube-virt while there can only be a single instance of kubevirt installed on a k8s cluster. Yet again, this design is madness... Redhat used to known how to install things properly /rant off
Stop configuring. Start distributing.
Every generic chart answers every use case — so it answers none of yours. Vynil flips the model: your distribution makes the integration decisions once, your users install in minutes with options they actually understand.
- Your platform, your rules — packages bake in your resources, storage, network and security decisions.
- Trust what you run — packages are signed, immutable OCI images you can open and read, line by line. Audit teams love it; so do one-person ops teams.
- Works where internet doesn't — air-gapped by design: mirror, scan, install. Nothing phones home.
- Your DR plan, executable — registry + manifests = the whole platform, rebuildable on demand.
- One engine, every scale — homelab, enterprise platform, SaaS tenant orchestration, self-service PaaS.
Dive in: Building a distribution · The OCI package
kubectl create ns vynil-system
kubectl apply -k github.com/sebt3/vynil//deploy
Full documentation lives in docs/ (French). It can be browsed as plain
Markdown on the forge, or built into a static site with mkdocs serve (see
mkdocs.yml). A machine-readable index for LLMs is provided at
llms.txt following the llmstxt.org convention.
Start here:
- Concepts — jukebox / package / instance model
- Installation
- Architecture & Reconciliation
- Authoring packages
- Security & threat model
- Troubleshooting
Analyzes a Vynil package statically without deployment. This command performs comprehensive linting of package structure, templates, and scripts.
Options:
-p / --package-dir: Package directory (default:/tmp/package)-c / --config-dir: Directory for additional Rhai scripts (default:.)--format: Output format (default:text, options:text,junit)--level: Minimum severity level to display (default:all, options:error,warn,all)--junit-output-filename: Write JUnit XML report to file
Checks Performed:
Package Structure (package/):
- Validates
package.yamlpresence and format - Checks required directory structure
- Verifies resource definitions
Handlebars Templates (hbs/):
- Syntax validation
- Unknown helper detection
- Unknown partial detection
- Context variable consistency with
package.yaml - Resource and image key validation
- Correct package type usage
Rhai Scripts (rhai/):
- Syntax validation
- Unresolved import detection
- Dead code detection
- Unused variable detection
- Shadowed variable detection
- Unused parameter detection
- Unused function detection
- API mode validation (no full-API in core scripts)
- Package type validation (no tenant access in system packages)
- Context hook return validation
Configuration:
Create a .vynil-lint.yaml file in the package root to customize linting behavior:
disable:
- rhai/unused-variable
- hbs/unused-helper
override:
rhai/unused-function: error
hbs/unknown-helper: warn
files:
- glob: "handlebars/helpers/**"
disable:
- rhai/unused-function
- glob: "scripts/context_*.rhai"
override:
rhai/context-hook-no-return: errorInline Disable:
Disable a specific rule on a single line:
- Rhai:
// vynil-lint-disable rhai/unused-variable - Handlebars:
{{!-- vynil-lint-disable hbs/unknown-helper --}}
Exit Codes:
0: No issues found1: Errors detected2: Only warnings detected