Repository navigation
Releases: pooyanazad/kube-saver
Release list
v2.0.0
kube-saver v2.0.0
Kubernetes CPU and memory cost estimation with local reports and resource-change plans.
Included in this release
- Interactive TUI for Kubernetes cost and waste visibility
- Self-contained HTML report generation
- Local notification and PR-plan output
- Read-only HTTP API endpoints
- Docker Hub publication follows successful GitHub release creation
Upgrade notes and limitations
- Generated apply scripts now require
KUBE_SAVER_APPLY_CONTEXT. Review the target cluster and every patch before execution. Scripts stop on failure; earlier successful patches are not rolled back. - A fully failed pod scan exits with code
4. Partial scans can produce degraded results; check warnings and coverage. - Review your context, namespace selection, exclusions, and custom pricing configuration before upgrading.
- Missing or invalid metrics produce estimates and suppress actionable right-sizing recommendations. Recommendations use current samples, not historical peaks.
- Costs and savings are modeled estimates, not actual cloud billing. Generating a local review plan does not change workloads or open a GitHub PR.
Installation, safety guidance, and limitations: https://pooyanazad.github.io/kube-saver/
Build artifacts
- Python wheel and source distribution attached to this release
- SHA256 checksums included
Changes in this release
- Document verified 2.0.0 installation and release evidence (#39) (aabcf08)
- Prepare kube-saver 2.0.0 version and upgrade notes (#38) (b2f0fdf)
- Type documentation search query with keyboard events (0074789)
- Add owner-provided Google Search Console verification file (#36) (7caf6ea)
- Build GitHub Pages documentation and prepare search discoverability (#35) (03aa473)
- Align documentation, onboarding, and discoverability with verified behavior (#34) (c1dbb22)
- Honor configuration and harden recommendation safety (#32) (527661e)
- Guard release version integrity and make publication explicit (#33) (7e8f656)
- Show when metrics-server is unavailable in doctor (adef5ff)
- Bring setup checks and guides in line with the CLI (dd09fa0)
- Make namespace-limited scans work with Role permissions (4a5c7a9)
- Avoid empty reports when pod scans fail (61fa113)
- Fix metrics availability and pod-name collisions across namespaces (20ba396)
- Keep workload recommendations actionable (f939dce)
- Compare metric timestamps in UTC (da870cd)
- Let pods use their service account credentials (2147032)
- Fall back safely while eBPF probes are unfinished (7a96ae7)
- Make resource patches target the right container (5fca757)
- Use real metrics for command-line reports (f443a07)
- Let the fake ApiException satisfy typed except clauses in tests (208f72e)
- Use typed catches for the node listing fallback (e3dd6e1)
- Catch ApiException and timeouts when fetching the cluster version (4b41ea2)
- Document the broad except handlers in k8s_client (dbcd212)
- Enhance contribution guidelines for pull requests (043c843)
- Prevent AI attribution trailers (33d4876)
- Keep healthy pods during partial metric gaps (b10301e)
- Verify stale metrics trigger a warning (19636e2)
- Confirm fresh metrics stay available (2b57b22)
- Test stale metric warnings (4fcdac4)
- Warn when runtime metrics go stale (a769dc9)
- Git ignore updated (c25f02c)
- Apply metric age settings to runtime scans (ddb7578)
- Export metric sample metadata (32234b3)
- Reject stale runtime metric samples (7c7f12a)
- Test metric timestamps and stale samples (0895bfb)
- Capture timestamps from metric samples (7886a46)
- Add configurable metric sample age limit (8e431d1)
- Surface degraded scan state in TUI and HTTP API (eb47cfe)
- Fix ScanResult test fallout from get_all_pods contract change (fe6057b)
- Return ScanResult from get_all_pods to preserve final API error (9a31f3a)
- Add ScanResult dataclass to surface partial scan state (ca81711)
- Wrap get_cluster_info version + node listing in retry_call (626dffa)
- Wrap get_pods in retry_call for per-namespace pod listings (d6bcb72)
- Wrap get_namespaces in retry_call so transient API failures retry (1b33c8d)
- test(retry): assert log records carry operation, attempt, and reason (8b7fe03)
- feat(retry): log structured operation, attempt, and reason on each retry (fcc92e8)
- feat(retry): add _reason helper for stable exception reasons (3413f44)
- feat(retry): add retry_call with exponential backoff and jitter (cb60c5b)
- test(retry): cover is_transient for 429, 503, 401, timeout, generic errors (08d4bfe)
- feat(collectors): add is_transient helper for retryable API errors (80e98bd)
- feat(config): wire RetryConfig into loader, env overrides, and default YAML (fa9c6c9)
- feat(config): add RetryConfig dataclass for transient API retries (ebb08c3)
- chore: gitignore security/ — keep Sn1per scan artifacts local (ffc2b94)
- fix(server): return stable JSON 503 when report builder fails instead of resetting connection (bfba2a5)
- fix(server): return 405 with Allow header for POST/PUT/DELETE/PATCH/TRACE (bb7e916)
- fix(server): handle HEAD and OPTIONS explicitly instead of default 501 (399f362)
- fix(server): send security headers on every response (b22c867)
- fix(server): static Server header, no Python/BaseHTTP version leak (b4d3bd8)
- fix(k8s_client): use urllib3.Timeout object for pool timeout, not tuple (4003928)
- docs(config): document safe timeout defaults, env overrides, and add tests (C1.3) (1b66099)
- feat(collectors): apply API timeouts consistently across K8sClient and doctor (C1.2) (9e386e5)
- feat(config): add configurable Kubernetes API timeouts (C1.1) (2abf3c2)
- fix: resolve import ordering and unused variable lint errors (b976ba5)
- feat: require --expose flag when binding API to non-loopback address (4baa94f)
- feat: add namespace and workload policy exclusions via labels and annotations (5744290)
- feat: fail fast with clear message when kubeconfig or context is invalid (393d613)
- feat: add stable exit codes for cluster connection and config failures (233d37d)
- docs: document running kube-saver inside a container with kubeconfig and in-cluster auth (92298e0)
- feat: add ready-to-apply RBAC manifests for cluster and namespace scope (f9615a1)
- docs: add minimum RBAC permissions reference and expand SAR checks (67f6d0e)
- fix: restore release and docker-publish jobs, bump to 1.3.0 (bf605fe)
- chore: rewrite PR template — cleaner sections, real commands, no Phase 7 (b5cd27e)
- consolidate CI: merge smoke workflows into ci.yml (a0b0836)
- ci: add smoke-test workflow (A5) (8cd6905)
- feat: add kube-saver doctor command (A4) (06cab5f)
- Replace em-dashes with commas across README and docs (e04e751)
- Add release-testing guide for three-environment verification (4fc8470)
- Add verify-install.sh to smoke test every install method (2120989)
- Add support matrix and link it from getting started (5a98629)
- ci: remove dockerhub-description sync step (811790b)
- ci: document token requirements for dockerhub-description step (d3cacc3)
- Improve CONTRIBUTING.md with docs links and agent section (fde5504)
- Add CODE_OF_CONDUCT and SECURITY policy (b640ebd)
- GitHub issue and PR templates for professional contribution workflow (79e1d1f)
- chore: re-ignore imporvment planning file (8ddeb82)
- docs: rewrite imporvment file as prioritized, themed checklist (41977b0)
- docs: slim README to 165 lines, move deep content to docs/ (da15f59)
- docs: remove unused SVGs, capture scripts, and artifacts table from screenshots section (bb21253)
- docs: add real TUI screenshots and CLI captures (fixes #8) (fcd3e5c)
- docs: add first run guide for local/EKS/generic clusters, add time-to-first-result guarantee (512c469)
- docs: add one-command quick start path with fast first result (261f05f)
- docs: sharpen positioning for usefulness, difference, and value (0b845dc)
- docs: define three core problems and sharpen README opening (f3a20de)
- docs: define user personas and update status badge (cb15816)
- Create local imporvment file and ignore it (3d8b65e)
- fix(release): improve notes and harden Docker publish (1ef8396)
- chore(release): centralize version source and add contributing guide (3e7db40)
Full Changelog: v1.8.0...v2.0.0
v1.8.0
kube-saver v1.8.0
Production release for kube-saver with self-contained CLI, TUI, reporting, API, and Docker delivery.
Included in this release
- Interactive TUI for Kubernetes cost and waste visibility
- Self-contained HTML report generation
- Local notification and PR-plan output
- Read-only HTTP API endpoints
- Docker image published to Docker Hub
Build artifacts
- Python wheel and source distribution attached to this release
- SHA256 checksums included
Changes in this release
- Surface degraded scan state in TUI and HTTP API (6c66cc4)
- Fix ScanResult test fallout from get_all_pods contract change (bc9afed)
- Return ScanResult from get_all_pods to preserve final API error (3cc9e56)
- Add ScanResult dataclass to surface partial scan state (9c6adf3)
Full Changelog: v1.7.0...v1.8.0
v1.7.0
kube-saver v1.7.0
Production release for kube-saver with self-contained CLI, TUI, reporting, API, and Docker delivery.
Included in this release
- Interactive TUI for Kubernetes cost and waste visibility
- Self-contained HTML report generation
- Local notification and PR-plan output
- Read-only HTTP API endpoints
- Docker image published to Docker Hub
Build artifacts
- Python wheel and source distribution attached to this release
- SHA256 checksums included
Changes in this release
- Wrap get_cluster_info version + node listing in retry_call (6a0ea4b)
- Wrap get_pods in retry_call for per-namespace pod listings (9dd01f3)
- Wrap get_namespaces in retry_call so transient API failures retry (9bfd5b1)
- test(retry): assert log records carry operation, attempt, and reason (6be01d9)
- feat(retry): log structured operation, attempt, and reason on each retry (4302428)
- feat(retry): add _reason helper for stable exception reasons (009c927)
- feat(retry): add retry_call with exponential backoff and jitter (95e5638)
- test(retry): cover is_transient for 429, 503, 401, timeout, generic errors (e75eec9)
- feat(collectors): add is_transient helper for retryable API errors (001019b)
- feat(config): wire RetryConfig into loader, env overrides, and default YAML (046cdac)
- feat(config): add RetryConfig dataclass for transient API retries (6a57875)
- chore: gitignore security/ — keep Sn1per scan artifacts local (cbd1848)
- fix(server): return stable JSON 503 when report builder fails instead of resetting connection (5126ab8)
- fix(server): return 405 with Allow header for POST/PUT/DELETE/PATCH/TRACE (a1216f1)
- fix(server): handle HEAD and OPTIONS explicitly instead of default 501 (395be1d)
- fix(server): send security headers on every response (6eafdb4)
- fix(server): static Server header, no Python/BaseHTTP version leak (d7fa5af)
- fix(k8s_client): use urllib3.Timeout object for pool timeout, not tuple (c094545)
- docs(config): document safe timeout defaults, env overrides, and add tests (C1.3) (d64f658)
- feat(collectors): apply API timeouts consistently across K8sClient and doctor (C1.2) (a329e5f)
- feat(config): add configurable Kubernetes API timeouts (C1.1) (73fc950)
Full Changelog: v1.6.0...v1.7.0
v1.6.0
kube-saver v1.6.0
Production release for kube-saver with self-contained CLI, TUI, reporting, API, and Docker delivery.
Included in this release
- Interactive TUI for Kubernetes cost and waste visibility
- Self-contained HTML report generation
- Local notification and PR-plan output
- Read-only HTTP API endpoints
- Docker image published to Docker Hub
Build artifacts
- Python wheel and source distribution attached to this release
- SHA256 checksums included
Changes in this release
- fix: resolve import ordering and unused variable lint errors (0f8854e)
- feat: require --expose flag when binding API to non-loopback address (cdc1cff)
- feat: add namespace and workload policy exclusions via labels and annotations (02cd253)
- feat: fail fast with clear message when kubeconfig or context is invalid (e0dd4bf)
- feat: add stable exit codes for cluster connection and config failures (87be340)
- docs: document running kube-saver inside a container with kubeconfig and in-cluster auth (1556fd0)
- feat: add ready-to-apply RBAC manifests for cluster and namespace scope (025ab18)
- docs: add minimum RBAC permissions reference and expand SAR checks (e23270f)
Full Changelog: v1.5.0...v1.6.0
v1.5.0
kube-saver v1.5.0
Production release for kube-saver with self-contained CLI, TUI, reporting, API, and Docker delivery.
Included in this release
- Interactive TUI for Kubernetes cost and waste visibility
- Self-contained HTML report generation
- Local notification and PR-plan output
- Read-only HTTP API endpoints
- Docker image published to Docker Hub
Build artifacts
- Python wheel and source distribution attached to this release
- SHA256 checksums included
Changes in this release
- fix: restore release and docker-publish jobs, bump to 1.3.0 (7cec698)
Full Changelog: v1.3.0...v1.5.0
v1.2.0
kube-saver v1.2.0
Production release for kube-saver with self-contained CLI, TUI, reporting, API, and Docker delivery.
Included in this release
- Interactive TUI for Kubernetes cost and waste visibility
- Self-contained HTML report generation
- Local notification and PR-plan output
- Read-only HTTP API endpoints
- Docker image publication to Docker Hub
Build artifacts
- Python wheel and source distribution attached to this release
- SHA256 checksums included
Changes in this release
- chore: re-ignore imporvment planning file (d9b2f65)
- docs: rewrite imporvment file as prioritized, themed checklist (c7d0f0f)
- docs: slim README to 165 lines, move deep content to docs/ (1df9061)
- docs: remove unused SVGs, capture scripts, and artifacts table from screenshots section (c76ef99)
- docs: add real TUI screenshots and CLI captures (fixes #8) (2ef2465)
- docs: add first run guide for local/EKS/generic clusters, add time-to-first-result guarantee (41c81c2)
- docs: add one-command quick start path with fast first result (4a3a4d7)
- docs: sharpen positioning for usefulness, difference, and value (484b8bc)
- docs: define three core problems and sharpen README opening (8f0d204)
- docs: define user personas and update status badge (e870a14)
- Create local imporvment file and ignore it (c848366)
- fix(release): improve notes and harden Docker publish (80f4ff7)
- chore(release): centralize version source and add contributing guide (3c7fb2a)
Full Changelog: v1.1.0...v1.2.0
v1.1.0
kube-saver v1.1.0
Production release for kube-saver with self-contained CLI, TUI, reporting, API, and Docker delivery.
Included in this release
- Interactive TUI for Kubernetes cost and waste visibility
- Self-contained HTML report generation
- Local notification and PR-plan output
- Read-only HTTP API endpoints
- Docker image publication to Docker Hub
Build artifacts
- Python wheel and source distribution attached to this release
- SHA256 checksums included
Changes in this release
- fix(release): improve notes and harden Docker publish (80f4ff7)
- chore(release): centralize version source and add contributing guide (3c7fb2a)
- ci(docker): sync Docker Hub description from README (209d86a)
- fix(ci): build manual releases from selected branch (2208e78)
- chore(cleanup): remove non-production local helper files (3149223)
- chore(release): finalize professional 1.0.0 versioning (8c02724)
- build(docker): add production image and Docker Hub release flow (80ef0ca)
- docs(readme): document self-contained CLI outputs and GitHub-only releases (3523731)
- test(tui): add real async Textual harness (6b1cf9b)
- feat(server): harden HTTP handlers with 405 for non-GET methods (8988222)
- feat(cli): add Click subcommands (report, pr-plan, notify, serve, version) (b5cbe50)
- feat(report): add CSS bar charts, remove pdf_supported flag (454b378)
- feat(pr-generator): add apply_plan_locally, remove GitHub/GitLab API (5de738a)
- feat(notifier): replace webhook payloads with local Markdown output (36983e2)
- fix: add types-PyYAML to dev deps for CI mypy (61ee5dc)
- fix: resolve 51 ruff errors and 48 mypy errors for CI (0f87e5b)
- fix lint (3295aa5)
- fix ci release condition (0d5586a)
- update readme docs (3d65375)
- add ci workflow (d57efec)
- add e2e tests (ccdad84)
- add integration tests (f0f9e98)
- add unit coverage (b0f8e0d)
- add json and server mode (79d8218)
- add prometheus and html reports (234ae40)
- add pr generator and notifier (a215bf1)
- add yaml and helm exporters (448d56f)
- add runtime fallback (2b999be)
- Polish TUI navigation and search UX (1abf821)
- Add phase 3 TUI dashboard (c70cb55)
- Add currency switching and easy pricing overrides (59b52fd)
- Add phase 2 analysis engine (91a3eba)
Full Changelog: v1.0.0...v1.1.0
v1.0.0 - First Public Release
kube-saver v1.0.0 is the first public release of the project.
kube-saver helps you find wasted CPU and memory in Kubernetes, estimate the cost impact, and generate practical right-sizing recommendations.
Included in this release
- Interactive terminal UI
- Resource and cost waste analysis
- Recommendation engine
- Self-contained HTML reports
- Local notification output
- Local PR/change planning output
- Read-only local HTTP API
- Test, lint, type-check, and build pipeline
Highlights
- No required webhook or external maintainer service
- No CDN dependency for reports
- Simple CLI commands for TUI, report, notify, PR planning, and server mode
- Phase 1 through Phase 6 completed as the baseline release
Notes
- This release focuses on the core app and GitHub release artifacts
- Docker publishing will be finalized separately
Thanks for checking out kube-saver.
Full Changelog: https://github.com/pooyanazad/kube-saver/commits/v1.0.0