Releases: msalinas92/CacheBolt
v0.7.1
Summary
This version introduces several reliability and compatibility improvements to the proxy, focused on HTTPS support, config robustness, and downstream interoperability.
Key Changes
-
HTTPS support without OpenSSL
Migrated the HTTP client to use a Rust-native TLS backend (hyper-rustlsor equivalent), removing the dependency on OpenSSL. This greatly improves build portability, especially for Alpine and musl-based containers, and eliminates the need for system OpenSSL libraries. -
Robust config:
path_rulesis now optional
Fixed a bug where omitting thepath_rulessection inconfig.yamlcaused a panic or crash at startup. The config loader now defaults to an empty list if not specified, using only the default latency threshold when no rules are present. -
Header filtering for downstream compatibility
Requests forwarded by the proxy now exclude certain headers such asaccept-encoding. This avoids issues with downstream servers that may not support compressed response streams (such as "Empty reply from server" errors), ensuring better compatibility with a broader range of HTTP backends.
Additional Improvements
- Enhanced tracing and error reporting for debugging and operations.
v0.6.0
🚀 CacheBolt v0.6.0 - Admin Port Separation & Config Enhancements
This release introduces multi-port server separation for better isolation between the proxy logic and the admin/metrics interface, along with configuration improvements that enhance maintainability and deployment flexibility.
✨ Features
🧩 Admin UI & Metrics on a Separate Port
CacheBolt now exposes the admin panel (/admin) and Prometheus metrics (/metrics) on a dedicated HTTP server and port, separate from the main proxy.
✅ Benefits:
- Isolate internal endpoints from public traffic
- Allow firewalled/internal-only access to admin tools
- Enable separate monitoring via sidecars or scrape configs
🔧 Configuration (in config.yaml):
proxy_port: 3000 # Main proxy port
admin_port: 3001 # Admin UI and /metricsv0.5.0
🚀 CacheBolt v0.5.0 — Client-Controlled Cache Bypass
✨ New Features
- Header-based Cache Bypass
Clients can now force bypass of all cache layers by including either of the following headers:Cache-Control: no-cacheX-Bypass-Cache: true
When present:- The cache is skipped (no memory or backend read).
- The response is still stored unless explicitly disabled.
- Useful for debugging, cache revalidation, or time-sensitive requests.
📈 Observability
- Added log:
⏩ Cache bypass activated for '/path' due to client header - New Prometheus metric:
cachebolt_bypass_cache_total
🛠️ Internal Improvements
- Normalized
ignored_headersnow includes bypass-related headers to avoid polluting cache keys:cache-controlx-bypass-cachex-refresh-cache
v0.4.2
Fix to the version v0.4.0
v0.4.0
This release introduces a lightweight and elegant Web UI to inspect the in-memory cache of CacheBolt. It's built as a static site and intended as a minimal dashboard for visibility and inspection.
✨ Features
🌐 Web Admin Panel (/cb-admin)
- Built using Astro
- Zero backend dependencies – purely static frontend
🗂️ Structure
- Accessible at:
/cb-admin - Custom styling with no UI frameworks for maximum performance
v0.3.1
Added
GET /admin/status-memory: new endpoint to inspect in-memory cache entries. Returnskey,path,inserted_at,size_bytes, andexpires_in_secs.- TTL-based expiry metadata is now computed and exposed from memory cache entries using
cache.ttl_secsfrom config.
Changed
- Moved cache invalidation endpoint from
DELETE /cachetoDELETE /admin/cachefor consistency with admin operations. - Cleaned up redundant
timeoutlogic in proxy layer. Latency-based failover now exclusively relies onlatency_failoverrules from the config.
Fixed
- Corrected config field inconsistencies to ensure TTL and memory thresholds are parsed and enforced properly.
v0.3.0
✨ Features
- Probabilistic Cache Refreshing (
cache.refresh_percentage)- New configuration option under the
cachesection:cache: refresh_percentage: 10
- Allows a percentage of requests to bypass the cache and fetch a fresh response from the backend.
- Example:
10means ~1 in every 10 requests to the same key will force a refresh. - Helps prevent stale data and reduces the need for manual invalidation.
- Automatically re-stores the refreshed result in memory and persistent storage.
- New configuration option under the
🐛 Fixes
- Fixed handling of root path
/- The proxy now correctly forwards requests to
/(previously may have failed or misrouted). - Fully compatible with downstream services expecting root-level access.
- The proxy now correctly forwards requests to
📊 Metrics & Internals
- Added debug logs and counters for refresh-triggered requests.
cachebolt_memory_hits_totalno longer counts requests that triggered a refresh.- Refresh logic respects concurrency limits and latency-based failover rules.
🔄 Behavior
- If
refresh_percentageis set to0or omitted, the cache will behave deterministically (no automatic refresh). - Refresh logic is key-specific and probabilistic based on request counts.
v0.2.0
📦 CacheBolt v0.2.0 (2025-06-11)
✨ Added
- Global cache invalidation via
DELETE /cache?backend=true- Clears all in-memory entries
- Deletes all objects from the configured persistent backend (S3, GCS, Azure, Local)
- Support for structured JSON error responses on invalid query usage
- Prometheus metrics now reflect full deletion operations when backends are flushed
🔧 Changed
- Removed pattern-based deletion from the
/cacheendpoint- Simplified the behavior: you now either clear everything, or nothing
- Backend deletion only triggers if
?backend=trueis explicitly set
📝 Documentation
- Updated
README.md:- Added new section: 🧹 Cache Invalidation
- Described usage of
DELETE /cache?backend=trueand example scenarios
🧪 Internal
- Improved logging around deletion success/failure per storage provider
- Hardened concurrency and error handling in backend deletion routines
🚀 CacheBolt continues to evolve as a high-performance reverse proxy with multi-cloud caching support.
v0.1.0
Merge pull request #3 from msalinas92/feature/prometheus-metrics feat: prometheus-metrics