A modern Kubernetes package manager written in Rust with Jinja2 templating
Sherpack is a simpler, faster alternative to Helm that replaces Go templates with the intuitive Jinja2 syntax. This initial release includes full lifecycle management for Kubernetes applications.
- 43,500+ lines of Rust across 6 crates
- 600 tests with cross-platform support (Linux, macOS, Windows)
- Complete Helm feature parity with significant improvements
- Automatic Helm chart conversion to Sherpack packs
25+ Helm-compatible filters:
- String:
quote,squote,upper,lower,title,trim,trimPrefix,trimSuffix,replace,split,join - Case conversion:
camelcase,snakecase,kebabcase - Encoding:
b64encode,b64decode,sha256,sha1,md5 - YAML/JSON:
toyaml,tojson,fromyaml,fromjson - Formatting:
indent,nindent,wrap - Type:
int,float,string,list,dict,default - Collections:
keys,values,first,last,sortAlpha,uniq,compact,reverse,slice
Template functions:
get(object, key, default)- Safe nested access with defaultsternary(condition, true_val, false_val)- Inline conditionalsnow()- Current timestampuuidv4()- Generate UUIDsfail(message)- Abort with errortostring(),toint(),tofloat()- Type conversionsinclude(template, context)- Include other templateslookup(apiVersion, kind, namespace, name)- K8s resource lookup
Files API (sandboxed):
files.get(path)- Read file contentfiles.glob(pattern)- Match files by globfiles.lines(path)- Read as linesfiles.exists(path)- Check existence
Dual format support:
- JSON Schema (draft-07)
- Sherpack simplified YAML format
Features:
- Automatic default value extraction
- Type validation with detailed errors
sherpack validatecommand with JSON output- Integration with
lintandtemplatecommands --skip-schemaflag to bypass validation
- Fuzzy matching with Levenshtein distance for typo suggestions
- Context-aware suggestions for undefined variables
- Available keys display when property not found
- Multi-error collection - continues after errors, shows all issues
- Grouped errors by template file
sherpack package- Create.tar.gzarchives with SHA256 MANIFESTsherpack inspect- Show archive contents and checksumssherpack verify- Verify integrity and signatures- Reproducible builds (deterministic timestamps)
sherpack keygen- Generate Ed25519 keypairsherpack sign- Sign archives with private keysherpack verify -k pubkey- Verify signatures- Trusted comments with signer info
sherpack install- Deploy to clustersherpack upgrade- Update existing releasesherpack uninstall- Remove releasesherpack rollback- Revert to previous revisionsherpack list- List installed releasessherpack history- Show release historysherpack status- Show release statussherpack recover- Recover stale release
- Uses Kubernetes Server-Side Apply for safer updates
- Automatic resource discovery
- Correct creation ordering (Namespace → RBAC → Workloads → Services)
- Secrets (default) - Store release data in K8s Secrets
- ConfigMap - Store in ConfigMaps
- File - Local filesystem storage
- Mock - For testing without cluster
- Chunked storage for large releases (>1MB)
pre-install,post-installpre-upgrade,post-upgradepre-rollback,post-rollbackpre-delete,post-deletetest,test-success,test-failure- Weight-based ordering
- Delete policies:
before-hook-creation,hook-succeeded,hook-failed
- Deployment/StatefulSet readiness monitoring
- HTTP probes
- Command probes
- Configurable timeouts
- Automatic CRD detection
- Safe upgrade strategies (Replace, ServerSideApply, Skip)
- Protection against accidental deletion
- Schema validation and migration analysis
- Dry-run support
- Visual diff between current, desired, and live states
- Color-coded output
- Conflict detection
- HTTP - Standard HTTP repositories with ETag caching
- OCI - OCI registry support via
oci-distribution - File - Local filesystem repositories
sherpack repo add/list/update/remove- Manage repositoriessherpack search- Search for packs (FTS5 full-text search)sherpack pull- Download pack from repositorysherpack push- Push to OCI registry
sherpack dependency list- List dependenciessherpack dependency update- Update dependenciessherpack dependency build- Download all dependenciessherpack dependency tree- Show dependency tree
- Version policies: Strict, Version, SemverPatch, SemverMinor
- Diamond dependency conflict detection
- Reproducible builds
- Secure credential storage
- Cross-origin redirect protection
- SQLite cache with WAL mode
sherpack convert <chart> -o <output>- Convert Helm chart to Sherpack- Three-pass macro handling for complex templates
- PEG grammar parser for Go templates
{{ .Values.x }}→{{ values.x }}{{ if }}...{{ else }}...{{ end }}→{% if %}...{% else %}...{% endif %}{{ range }}...{{ end }}→{% for %}...{% endfor %}{{ with }}...{{ end }}→ Context handling{{ define "name" }}→{% macro name() %}{{ include "name" . }}→{{ name() }}{{ template "name" . }}→{{ name() }}- Pipeline syntax:
| quote,| indent 4 - Helm functions:
default,required,toYaml,include, etc.
- Automatic metadata conversion
- Dependency mapping
- API version handling
- Beautiful error messages with
miette - Progress indicators with
indicatif - Colored output
- JSON output for CI/CD (
--jsonflag)
sherpack template <release> <pack>- Render templatessherpack lint <pack>- Validate pack structuresherpack validate <pack>- Validate against schemasherpack show <pack>- Display pack infosherpack create <name>- Scaffold new pack
-f values.yaml- Override with file--set key=value- Override individual values--set-string key=value- Force string type--set-json key='{"a":1}'- JSON values
- Complete documentation in English and French
- Getting started guides
- API reference
- Architecture overview
docs/ARCHITECTURE.md- System architecturedocs/CLI_REFERENCE.md- Command referencedocs/TUTORIAL.md- Step-by-step tutorialdocs/HELM_COMPARISON.md- Helm vs Sherpackdocs/CONVERSION.md- Chart conversion guide
- Linux (x86_64, aarch64)
- macOS (x86_64, aarch64/Apple Silicon)
- Windows (x86_64)
- MSRV: Rust 1.88
sherpack/
├── crates/
│ ├── sherpack-core/ # Core types, values, schema, archive
│ ├── sherpack-engine/ # Jinja2 template engine
│ ├── sherpack-convert/ # Helm chart converter
│ ├── sherpack-kube/ # Kubernetes integration
│ ├── sherpack-repo/ # Repository management
│ └── sherpack-cli/ # CLI application
├── docs/ # Documentation
├── fixtures/ # Test fixtures
└── website/ # Docusaurus site
cargo install --path crates/sherpack-cliDownload from GitHub Releases for your platform.
# Create a new pack
sherpack create my-app
# Edit templates and values
cd my-app
# ... edit files ...
# Lint and validate
sherpack lint .
sherpack validate .
# Render templates
sherpack template my-release .
# Install to cluster
sherpack install my-release .
# Package for distribution
sherpack package . -o my-app-1.0.0.tar.gz
sherpack sign my-app-1.0.0.tar.gz -k ~/.sherpack/sherpack.keyMIT License
Built with: