# ADR 0001: Default to Valkey with Redis Alternative **Status:** Accepted **Date:** 2025-10-22 **Decision Makers:** TYPO3 DDEV Skill Maintainers **Tags:** #caching #infrastructure #licensing #future-proofing --- ## Context ### The Redis Licensing Change (March 2024) Redis changed its license from BSD-3-Clause (open source) to a dual RSALv2/SSPLv1 license, which is NOT OSI-approved open source. This change: - Restricts commercial use of Redis as a managed service - Creates legal compliance concerns for cloud providers and hosting companies - Prevents offering Redis-as-a-service without Redis Ltd licensing agreements ### The Valkey Fork (March 2024) In response, the Linux Foundation launched Valkey, a fork of Redis 7.2.4, with backing from: - Amazon Web Services (AWS) - Google Cloud - Oracle Cloud - Ericsson - Snap Inc. - 40+ additional companies Valkey maintains BSD-3-Clause licensing (true open source) and wire-protocol compatibility with Redis. ### Cloud Provider Adoption **AWS ElastiCache** (October 2024): - Added Valkey 7.2 support - Added Valkey 8.0 support (November 2024) - Pricing: 20% lower for node-based, 33% lower for serverless vs Redis - Performance: Claims 230% higher throughput, 70% better latency (Valkey 8.0 vs 7.2) **Industry Trajectory:** - AWS MemoryDB supports Valkey - Google Cloud and Oracle are Valkey project sponsors - Economic pressure (20-33% cost savings) will drive hosting provider migration ### TYPO3 Caching Requirements TYPO3's Redis cache backend uses basic operations: - `GET`, `SET`, `DEL`, `EXPIRE` - Key-value operations - `FLUSHDB` - Cache clearing - `KEYS` pattern matching - Cache inspection These operations are **identical** in Redis and Valkey (wire-protocol compatible). TYPO3 does not use advanced Redis features (Streams, JSON, Search, etc.). ### DDEV Development Environment Context The TYPO3 DDEV Skill provides a reference implementation for local development environments. Developers using this skill: - Test TYPO3 extensions locally before production deployment - Do not control production infrastructure (clients/hosting providers do) - Need development environments that match future production reality - Benefit from faster Docker image pulls (smaller images = faster `ddev start`) --- ## Decision **Default to Valkey 8-alpine for new TYPO3 DDEV projects, with Redis 7-alpine as a documented alternative.** ### Implementation Details #### Default Configuration ```yaml # .ddev/docker-compose.services.yaml (new projects) services: valkey: container_name: ddev-${DDEV_SITENAME}-valkey image: valkey/valkey:8-alpine restart: unless-stopped ports: - "6379" volumes: - valkey-data:/data environment: - VALKEY_MAXMEMORY=256mb - VALKEY_MAXMEMORY_POLICY=allkeys-lru command: valkey-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru volumes: valkey-data: name: "${DDEV_SITENAME}-valkey-data" ``` #### Alternative: Redis 7-alpine ```yaml # Alternative for legacy production parity services: redis: container_name: ddev-${DDEV_SITENAME}-redis image: redis:7-alpine # ... same configuration structure ``` #### Auto-Detection Logic For existing projects with `.ddev/docker-compose.services.yaml`: - **Preserve existing choice**: If Redis is detected, keep Redis - **Preserve existing choice**: If Valkey is detected, keep Valkey - **Inform user**: Log which cache service was detected and preserved For new projects: - **Default to Valkey 8-alpine** - **Document Redis alternative**: Show how to switch in generated README - **Provide rationale**: Explain why Valkey is the forward-looking choice --- ## Consequences ### Positive ✅ **Future-Proof Development Environments** - Matches the production trajectory (AWS/Google/Oracle adoption) - Prepares developers for 2025-2027 hosting landscape - Reduces future migration friction when hosting providers switch ✅ **Cost Awareness** - Educates developers about cost-effective infrastructure choices - Aligns with hosting provider economic incentives (20-33% savings) - Demonstrates modern cloud architecture patterns ✅ **True Open Source** - BSD-3-Clause license with no commercial restrictions - No legal compliance concerns for hosting providers - Community-driven governance (Linux Foundation) ✅ **Smaller Docker Images** - Valkey 8-alpine: **69.7 MB** - Redis 8-alpine: 100 MB (30% larger) - Redis 7-alpine: 60.6 MB - Faster `ddev start` cycles during development ✅ **Drop-In Compatibility** - Wire-protocol identical to Redis - TYPO3's PHP redis extension works without modification - Zero code changes required for TYPO3 extensions - Easy rollback to Redis if needed (one-line change) ### Negative ⚠️ **Newer Codebase** - Valkey fork is only 1 year old (since March 2024) - Less Stack Overflow content compared to Redis - Potential for undiscovered edge-case bugs **Mitigation:** - Based on Redis 7.2.4 (stable, battle-tested codebase) - AWS/Google/Oracle using in production validates stability - DDEV makes switching back to Redis trivial (one-line change) - Redis documentation applies due to protocol compatibility ⚠️ **Learning Curve** - Developers familiar with "Redis" terminology need to learn "Valkey" - Some confusion about naming/branding **Mitigation:** - Comprehensive ADR and documentation explains context - Clear instructions for both Valkey and Redis alternatives - Educational opportunity to teach open source licensing issues ⚠️ **Current Production Mismatch** - Some existing TYPO3 hosting environments still use Redis 7.x - Development-production parity temporarily impacted **Mitigation:** - Redis 7-alpine documented as alternative for production parity - Auto-detection preserves existing Redis choice in projects - Easy to switch (one-line change in docker-compose) - Trade-off: Match today's production vs prepare for tomorrow's ### Risks and Mitigations | Risk | Severity | Likelihood | Mitigation | |------|----------|------------|------------| | Valkey compatibility issues with TYPO3 | Low | Very Low | Wire-protocol identical, PHP redis extension works transparently | | Valkey bugs in production use | Medium | Low | AWS/Google production usage validates stability; easy rollback | | Developer confusion/resistance | Low | Medium | Clear documentation, explain rationale, provide Redis alternative | | Community backlash for being "too progressive" | Low | Low | Document decision thoroughly, auto-preserve existing choices | --- ## Alternatives Considered ### Alternative 1: Redis 7-alpine Default (Conservative) **Reasoning:** - Most existing TYPO3 hosting uses Redis 7.x - Maximum development-production parity today - Battle-tested, 15 years of production use - Familiar to developers **Rejected Because:** - Optimizes for yesterday's production, not tomorrow's - Ignores industry trajectory (AWS/Google/Oracle Valkey adoption) - Creates educational debt (developers learn old patterns) - Proprietary licensing creates compliance concerns - Misses opportunity to lead the transition ### Alternative 2: Redis 8-alpine Default **Reasoning:** - Latest Redis version - Performance improvements over Redis 7 **Rejected Because:** - Proprietary licensing (same as Redis 7.4+) - Larger image size (100 MB vs 69.7 MB Valkey) - More expensive on cloud providers vs Valkey - Not the strategic direction of major cloud platforms ### Alternative 3: No Caching Service by Default **Reasoning:** - Simpler default setup - Developers add only if needed **Rejected Because:** - Redis/Valkey caching is common in TYPO3 production - Reference implementation should include production-realistic services - DDEV skill aims to provide complete development environment - Adding later is more friction than having it by default ### Alternative 4: Offer Both Redis and Valkey as Equal Choices **Reasoning:** - Maximum flexibility - No opinionated defaults **Rejected Because:** - Adds complexity to setup process - Forces developers to make decision without context - Reference implementations should have opinionated best practices - Still need to pick ONE as default for generation - Documentation burden increases (maintain two equal paths) --- ## References ### Technical Documentation - [Valkey Official Site](https://valkey.io/) - [Valkey GitHub Repository](https://github.com/valkey-io/valkey) - [AWS ElastiCache for Valkey Announcement](https://aws.amazon.com/about-aws/whats-new/2024/10/amazon-elasticache-valkey/) - [TYPO3 Redis Cache Backend Documentation](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/CachingFramework/Backends/Index.html) ### Benchmarks and Analysis - AWS ElastiCache Valkey 8.0: 230% throughput improvement, 70% latency improvement vs Valkey 7.2 - AWS Cost Comparison: Valkey 20% cheaper (node-based), 33% cheaper (serverless) vs Redis - Docker Image Sizes: - `valkey/valkey:8-alpine` - 69.7 MB - `redis:8-alpine` - 100 MB - `redis:7-alpine` - 60.6 MB ### Licensing - Redis License Change: [Redis Announcement (March 2024)](https://redis.io/blog/redis-adopts-dual-source-available-licensing/) - Valkey License: BSD-3-Clause (OSI-approved open source) - Linux Foundation Valkey Announcement: [TechCrunch Article](https://techcrunch.com/2024/03/31/why-aws-google-and-oracle-are-backing-the-valkey-redis-fork/) --- ## Decision Rationale Summary This decision is **strategic and forward-looking** rather than purely technical: 1. **Technical Equivalence**: For TYPO3 use cases, Redis and Valkey are functionally identical 2. **Strategic Positioning**: Major cloud providers (AWS, Google, Oracle) are adopting Valkey 3. **Economic Reality**: 20-33% cost savings will drive hosting provider migration 4. **Licensing Safety**: True open source (BSD-3) vs proprietary licensing concerns 5. **Educational Leadership**: Skill should teach future patterns, not legacy patterns 6. **Risk Mitigation**: Easy rollback, auto-preservation of existing choices, clear documentation **The default to Valkey is a bet on the industry trajectory being correct, backed by Linux Foundation + AWS + Google + Oracle. The risk is minimal (easy rollback), and the educational benefit is high (teaching developers about open source licensing, cost-effective infrastructure, and future-proof choices).** --- ## Valkey 9.0 Consideration (October 2025) **Release Information:** - **Valkey 9.0 GA:** Released October 21, 2025 - **Status:** Stable production release - **Docker Image:** `valkey/valkey:9-alpine` available ### Performance Improvements **Throughput:** - **40% higher throughput** compared to Valkey 8.1 - Supports **over 1 billion requests per second** in cluster configurations - Memory prefetching for pipelined commands - Zero-copy responses for large requests - SIMD optimizations (up to 200% faster BITCOUNT, hyperloglog) - Multipath TCP support (up to 25% lower latency) ### Major New Features **Hash Field Expiration:** - TTL on individual fields within a hash - Automatic expired data removal - Improved memory efficiency **Atomic Slot Migration:** - Snapshot-based migration for horizontal scaling - Zero-downtime scaling - Source and target nodes remain active during transfer **Multiple Databases in Cluster Mode:** - Multiple logical namespaces on single cluster - Better keyspace organization - Reduced memory waste ### Production Adoption Status **Cloud Provider Support (as of October 2025):** - ❌ **AWS ElastiCache:** Not yet supported (latest: Valkey 8.1 - July 2025) - ❌ **Google Cloud:** No announcement - ❌ **Oracle Cloud:** No announcement **Docker Hub:** - ✅ Official images available: `valkey/valkey:9.0-alpine` - ✅ Wire-protocol compatible with Valkey 8.x and Redis 7.x ### Decision: Stay with Valkey 8 for Now **Rationale:** This differs from the original Valkey vs Redis decision: - **Valkey vs Redis (Original):** Industry was MIGRATING → Lead with Valkey 8 - **Valkey 8 vs 9 (Now):** Industry STABLE on 8 → Follow production **Why wait for Valkey 9:** 1. **Production Parity:** AWS ElastiCache only supports up to Valkey 8.1 2. **Very New:** Released October 21, 2025 (1 day old at time of writing) 3. **Hosting Adoption:** No TYPO3 hosting providers using Valkey 9 yet 4. **Upgrade Urgency:** GitHub release notes state "LOW" urgency 5. **Battle-Testing:** Valkey 8.x more production-proven **Benefits of Staying on Valkey 8:** - ✅ Cloud provider support (AWS ElastiCache available) - ✅ Production-aligned (matches hosting environments) - ✅ Battle-tested (in production since November 2024) - ✅ Conservative approach (let others find bugs first) **When to Upgrade to Valkey 9:** Monitor for these signals: 1. **AWS ElastiCache announces Valkey 9 support** 2. **3+ months of production stability reports** 3. **Major TYPO3 hosting providers adopt Valkey 9** 4. **Performance improvements become critical for use case** ### Upgrade Path **Seamless Migration (when ready):** Valkey 8 → 9 upgrade is simple (wire-compatible): ```yaml # Change from: image: valkey/valkey:8-alpine # To: image: valkey/valkey:9-alpine ``` No configuration changes required. No data migration needed. Restart container. **Trade-offs:** - **Wait:** Production parity, battle-tested, conservative (recommended) - **Upgrade Now:** 40% faster, cutting-edge, slightly risky **Recommendation:** Wait for AWS ElastiCache support before defaulting to Valkey 9 in skill templates. --- ## Review and Updates **Next Review Date:** 2026-04-01 (6 months from October 2025) **Trigger for Re-evaluation:** - Major TYPO3 hosting providers publicly announce Redis-only support policies - Valkey compatibility issues discovered affecting TYPO3 - Valkey project loses major sponsor backing - Cloud provider pricing changes making Redis competitive again **Success Metrics:** - Developer feedback on Valkey default (GitHub issues, discussions) - Number of projects switching from Valkey to Redis (indicates friction) - Hosting provider announcements about Valkey adoption - TYPO3 community discussion about cache backends --- **Approved By:** TYPO3 DDEV Skill Project **Implementation:** v2.0.0 (target release)