| Crates.io | sherpack |
| lib.rs | sherpack |
| version | 0.3.0 |
| created_at | 2025-12-20 16:50:20.617676+00 |
| updated_at | 2025-12-23 13:29:02.732999+00 |
| description | The Kubernetes package manager with Jinja2 templates |
| homepage | https://alegeay.github.io/Sherpack/ |
| repository | https://github.com/alegeay/sherpack |
| max_upload_size | |
| id | 1996720 |
| size | 350,011 |
The Kubernetes package manager with Jinja2 templates.
Sherpack is a modern Kubernetes package manager that uses Jinja2 templating instead of Go templates. It provides a simpler, more readable syntax while maintaining full lifecycle management capabilities including install, upgrade, rollback, and dependency management.
# Download latest release
curl -LO https://github.com/myorg/sherpack/releases/latest/download/sherpack-linux-amd64
chmod +x sherpack-linux-amd64
sudo mv sherpack-linux-amd64 /usr/local/bin/sherpack
git clone https://github.com/myorg/sherpack
cd sherpack
cargo build --release
sudo cp target/release/sherpack /usr/local/bin/
# Create a new pack
sherpack create my-app
# Edit templates and values
cd my-app
vim values.yaml
vim templates/deployment.yaml
# Render templates (dry-run)
sherpack template my-release .
# Install to cluster
sherpack install my-release . --namespace production
# Upgrade
sherpack upgrade my-release . --set image.tag=v2.0
# Rollback
sherpack rollback my-release --revision 1
# Uninstall
sherpack uninstall my-release --namespace production
sherpack templateRender templates without installing.
# Render to stdout
sherpack template my-release ./my-pack
# With custom values
sherpack template my-release ./my-pack \
--values custom-values.yaml \
--set image.tag=v2.0 \
--set replicas=3
# Output to directory
sherpack template my-release ./my-pack --output-dir ./manifests
# Show only specific template
sherpack template my-release ./my-pack --show-only deployment.yaml
sherpack lintValidate pack structure and templates.
sherpack lint ./my-pack
# With schema validation
sherpack lint ./my-pack --strict
# Skip schema validation
sherpack lint ./my-pack --skip-schema
sherpack validateValidate values against schema.
# Validate with default values
sherpack validate ./my-pack
# With custom values file
sherpack validate ./my-pack --values production.yaml
# JSON output (for CI/CD)
sherpack validate ./my-pack --json
sherpack showDisplay pack information.
# Show pack metadata
sherpack show pack ./my-pack
# Show values
sherpack show values ./my-pack
# Show computed values (with defaults)
sherpack show computed-values ./my-pack --values override.yaml
sherpack createCreate a new pack from template.
# Basic pack
sherpack create my-app
# With options
sherpack create my-app --starter web-service
sherpack convertConvert Helm chart to Sherpack pack.
# Basic conversion
sherpack convert ./helm-chart ./sherpack-pack
# Force overwrite
sherpack convert ./helm-chart ./sherpack-pack --force
# Dry run (show what would change)
sherpack convert ./helm-chart ./sherpack-pack --dry-run
# Verbose output
sherpack convert ./helm-chart ./sherpack-pack --verbose
sherpack packageCreate a distributable archive.
# Create archive
sherpack package ./my-pack
# Output: my-pack-1.0.0.tgz
# Custom destination
sherpack package ./my-pack --destination ./dist/
# Include dependencies
sherpack package ./my-pack --include-deps
sherpack inspectShow archive contents.
sherpack inspect my-pack-1.0.0.tgz
# Output:
# my-pack-1.0.0/
# ├── Pack.yaml
# ├── values.yaml
# ├── MANIFEST
# └── templates/
# ├── deployment.yaml
# └── service.yaml
sherpack verifyVerify archive integrity.
# Verify manifest checksums
sherpack verify my-pack-1.0.0.tgz
# Verify signature
sherpack verify my-pack-1.0.0.tgz --signature my-pack-1.0.0.tgz.sig
sherpack keygenGenerate signing keypair.
sherpack keygen
# Output:
# Generated keypair:
# Private key: ~/.config/sherpack/keys/sherpack.key
# Public key: ~/.config/sherpack/keys/sherpack.pub
# Custom path
sherpack keygen --output ./my-keys/
sherpack signSign a package archive.
# Sign with default key
sherpack sign my-pack-1.0.0.tgz
# Output: my-pack-1.0.0.tgz.sig
# With specific key
sherpack sign my-pack-1.0.0.tgz --key ./my-key.key
sherpack installInstall a pack to the cluster.
# Basic install
sherpack install my-release ./my-pack
# With namespace
sherpack install my-release ./my-pack --namespace production
# Create namespace if missing
sherpack install my-release ./my-pack --namespace production --create-namespace
# With values
sherpack install my-release ./my-pack \
--values production.yaml \
--set image.tag=v2.0
# Wait for resources
sherpack install my-release ./my-pack --wait --timeout 5m
# Dry run (show manifests)
sherpack install my-release ./my-pack --dry-run
sherpack upgradeUpgrade an existing release.
# Upgrade with new values
sherpack upgrade my-release ./my-pack --set image.tag=v3.0
# Reuse previous values
sherpack upgrade my-release ./my-pack --reuse-values
# Reset to pack defaults
sherpack upgrade my-release ./my-pack --reset-values
# Force upgrade (recreate resources)
sherpack upgrade my-release ./my-pack --force
# Install if not exists
sherpack upgrade my-release ./my-pack --install
sherpack uninstallRemove a release.
# Basic uninstall
sherpack uninstall my-release
# With namespace
sherpack uninstall my-release --namespace production
# Keep history
sherpack uninstall my-release --keep-history
# Dry run
sherpack uninstall my-release --dry-run
sherpack rollbackRollback to a previous revision.
# Rollback to previous
sherpack rollback my-release
# Rollback to specific revision
sherpack rollback my-release --revision 3
# With wait
sherpack rollback my-release --wait
sherpack listList installed releases.
# All namespaces
sherpack list --all-namespaces
# Specific namespace
sherpack list --namespace production
# Filter by status
sherpack list --status deployed
# Output formats
sherpack list --output json
sherpack list --output yaml
sherpack historyShow release history.
sherpack history my-release --namespace production
# Output:
# REVISION STATUS DESCRIPTION DATE
# 1 superseded Install complete 2024-01-15 10:00:00
# 2 superseded Upgrade to v2.0 2024-01-16 11:00:00
# 3 deployed Upgrade to v3.0 2024-01-17 12:00:00
sherpack statusShow release status.
sherpack status my-release --namespace production
# Output:
# NAME: my-release
# NAMESPACE: production
# STATUS: deployed
# REVISION: 3
#
# RESOURCES:
# Deployment/my-app: 3/3 ready
# Service/my-app: ClusterIP
# Ingress/my-app: my-app.example.com
sherpack recoverRecover a stale release.
# Find stale releases
sherpack list --status pending
# Recover (mark as failed)
sherpack recover my-release --namespace production
sherpack repo addAdd a repository.
# HTTP repository
sherpack repo add bitnami https://charts.bitnami.com/bitnami
# OCI registry
sherpack repo add myorg oci://ghcr.io/myorg/charts
# With credentials
sherpack repo add private https://charts.example.com \
--username user \
--password pass
sherpack repo listList configured repositories.
sherpack repo list
# Output:
# NAME URL TYPE
# bitnami https://charts.bitnami.com/bitnami http
# myorg oci://ghcr.io/myorg/charts oci
sherpack repo updateUpdate repository indexes.
# Update all
sherpack repo update
# Update specific
sherpack repo update bitnami
sherpack repo removeRemove a repository.
sherpack repo remove bitnami
sherpack searchSearch for packs.
# Search in all repos
sherpack search nginx
# Search in specific repo
sherpack search nginx --repo bitnami
# Show all versions
sherpack search nginx --versions
sherpack pullDownload a pack.
# Pull latest
sherpack pull bitnami/nginx
# Pull specific version
sherpack pull bitnami/nginx --version 15.0.0
# Extract to directory
sherpack pull bitnami/nginx --untar --untardir ./nginx
sherpack pushPush to OCI registry.
sherpack push my-pack-1.0.0.tgz oci://ghcr.io/myorg/charts
sherpack dependency listList dependencies.
sherpack dependency list ./my-pack
# Output:
# NAME VERSION REPOSITORY STATUS
# redis ^17.0.0 https://charts.bitnami.com/bitnami [condition: true]
# postgresql ^12.0.0 https://charts.bitnami.com/bitnami [disabled]
sherpack dependency updateResolve and lock dependencies.
sherpack dependency update ./my-pack
# Output:
# Resolving dependencies for my-app...
#
# Skipping 1 dependencies:
# postgresql (enabled: false)
#
# Resolved 2 dependencies:
# redis @ 17.0.0
# common @ 2.0.0
#
# Dependency tree:
# └── redis@17.0.0
# └── common@2.0.0
#
# Wrote Pack.lock.yaml with 2 locked dependencies
sherpack dependency buildDownload locked dependencies.
sherpack dependency build ./my-pack
# With integrity verification
sherpack dependency build ./my-pack --verify
sherpack dependency treeShow dependency tree.
sherpack dependency tree ./my-pack
# Output:
# my-app@1.0.0
# ├── redis@17.0.0
# │ └── common@2.0.0
# └── nginx@15.0.0
my-pack/
├── Pack.yaml # Package metadata (required)
├── values.yaml # Default values (required)
├── values.schema.yaml # JSON Schema for validation (optional)
├── Pack.lock.yaml # Locked dependencies (generated)
├── packs/ # Downloaded dependencies
│ ├── redis/
│ └── postgresql/
└── templates/ # Jinja2 templates (required)
├── deployment.yaml
├── service.yaml
├── ingress.yaml
└── _helpers.tpl # Shared macros
apiVersion: sherpack/v1
kind: application
metadata:
name: my-app
version: 1.0.0
description: My awesome application
appVersion: "2.0"
keywords:
- web
- api
maintainers:
- name: John Doe
email: john@example.com
home: https://myapp.example.com
sources:
- https://github.com/myorg/myapp
dependencies:
- name: redis
version: "^17.0.0"
repository: https://charts.bitnami.com/bitnami
condition: redis.enabled
- name: postgresql
version: "^12.0.0"
repository: https://charts.bitnami.com/bitnami
enabled: false
resolve: never
# Application settings
name: my-app
replicas: 3
image:
repository: myorg/myapp
tag: latest
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
ingress:
enabled: true
host: myapp.example.com
redis:
enabled: true
postgresql:
enabled: false
{# templates/deployment.yaml #}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ release.name }}
labels:
app.kubernetes.io/name: {{ values.name }}
app.kubernetes.io/instance: {{ release.name }}
spec:
replicas: {{ values.replicas | default(1) }}
selector:
matchLabels:
app.kubernetes.io/name: {{ values.name }}
app.kubernetes.io/instance: {{ release.name }}
template:
metadata:
labels:
app.kubernetes.io/name: {{ values.name }}
app.kubernetes.io/instance: {{ release.name }}
spec:
containers:
- name: {{ values.name }}
image: {{ values.image.repository }}:{{ values.image.tag }}
imagePullPolicy: {{ values.image.pullPolicy }}
ports:
- containerPort: {{ values.service.port }}
{%- if values.env %}
env:
{{ values.env | toyaml | indent(12) }}
{%- endif %}
Located at ~/.config/sherpack/config.yaml:
# Default namespace
namespace: default
# Storage driver: secrets, configmap, file
storage:
driver: secrets
namespace: sherpack-system # Optional override
# Default timeout
timeout: 5m
# Output format: table, json, yaml
output: table
| Variable | Description |
|---|---|
KUBECONFIG |
Kubernetes config path |
SHERPACK_NAMESPACE |
Default namespace |
SHERPACK_DEBUG |
Enable debug output |
SHERPACK_NO_COLOR |
Disable colored output |
| Code | Description |
|---|---|
| 0 | Success |
| 1 | General error |
| 2 | Invalid arguments |
| 3 | Pack not found |
| 4 | Template error |
| 5 | Validation error |
| 6 | Kubernetes error |
| 7 | Repository error |
| 8 | Dependency error |
| Feature | Helm | Sherpack |
|---|---|---|
| Template syntax | Go templates | Jinja2 |
| Learning curve | Steep | Gentle |
| Error messages | Cryptic | Contextual with suggestions |
| Schema validation | JSON Schema | JSON Schema + simplified |
| Dependencies | Auto-resolve | Explicit resolution |
| Conflict handling | Silent | Error with solutions |
| Signature format | PGP | Minisign |
clap - CLI argument parsingsherpack-core - Core typessherpack-engine - Template renderingsherpack-kube - Kubernetes operationssherpack-repo - Repository managementsherpack-convert - Helm conversionmiette - Error reportingconsole / indicatif - Terminal UIminisign - Signaturestokio - Async runtimeMIT OR Apache-2.0