Roadmap
Current Status
Beta. Core features are functional and tested. Spooky can terminate HTTP/3 connections, forward to HTTP/2 backends, and perform load balancing with health checks. It is pre-GA and should be deployed with production guardrails (see Release Maturity and Technical Debt below).
Completed
- HTTP/3 termination via quiche
- HTTP/2 backend connectivity
- Path and host-based routing
- Multiple load balancing algorithms (random, round-robin, consistent hash, least-connections, latency-aware, sticky-cid)
- Active health checking with automatic backend management
- Per-upstream configuration and routing
- Connection ID management and QUIC packet routing
- TLS 1.3 with certificate chain loading
- Upstream TLS peer verification enabled by default via
upstream_tls.verify_certificates - Downstream mTLS (client certificate authentication) via
listen.tls.client_auth.enabled,listen.tls.client_auth.require_client_cert, andlisten.tls.client_auth.ca_file - Structured logging with multiple levels
- Configuration validation at startup
- Graceful shutdown with connection draining
Phase 1: Operational Hardening
Goal: Expand operational and scalability capabilities for production deployments.
Performance
- Async data plane: Move backend forwarding off the main poll thread
- Streaming bodies: Implement incremental request/response streaming instead of full buffering
- Multi-threading: Support multi-threaded QUIC packet processing
- Connection pooling optimizations: Reduce allocation overhead in HTTP/2 pool
Observability
- Metrics export: Prometheus endpoint live — per-route counters, latency percentiles, active-connection and queue-size gauges, full drop counter coverage across all ingress paths
- Resilience metrics: Per-feature counters for retries (attempt + denial by reason), hedges (triggered/won/wasted/latency), circuit breaker rejections, and brownout state gauge
- Distributed tracing: OpenTelemetry integration
- Request logging: Per-request structured logs with correlation IDs
- Connection metrics: Track QUIC RTT, packet loss, stream count
Operational
- Configuration hot reload: Reload config on SIGHUP without dropping connections
- Health check improvements: Separate client pool for probes to avoid contention
- TLS certificate reload: Automatic reload on certificate rotation
- Admin API: HTTP endpoint for runtime statistics and control
Reliability
- Circuit breaker: Per-backend circuit breakers to prevent cascading failures
- Retry logic: Configurable request retry with exponential backoff
- Request timeouts: Per-route timeout configuration
- Rate limiting: Per-IP and per-route rate limits
Phase 2: Advanced Features
Goal: Add advanced traffic management and operational capabilities.
Traffic Management
- Weighted routing: Route percentage of traffic to different upstreams
- Header-based routing: Route by arbitrary request headers
- Request rewriting: URL rewriting and header manipulation
- Compression: Automatic response compression
Load Balancing
- Weighted least connection: Combine weights with connection count
- Cached consistent hash: Cache hash ring to avoid rebuilds
Security
- mTLS operational tooling: Certificate rotation/revocation workflows and deployment guidance
- Request validation: Size limits, header validation
- IP allowlist/blocklist: Simple access control
Deployment
- Dynamic backend discovery: Service discovery integration (DNS SRV, Consul, etcd)
- Backend metadata: Tags and labels for flexible routing
- A/B testing support: Route subset of traffic to experimental backends
- Canary deployments: Gradually shift traffic to new backend versions
Phase 3: Enterprise Features
Goal: Support large-scale deployments with advanced requirements.
Multi-Tenancy
- Namespace isolation: Separate routing tables per tenant
- Resource limits: Per-tenant connection and request limits
- Tenant routing: Route by tenant ID or subdomain
Advanced Observability
- APM integration: Datadog, New Relic, etc.
- Custom metrics: User-defined metric collection
- Traffic replay: Record and replay production traffic
- Query logs: SQL-like queries over request logs
Protocol Features
- gRPC support: Native gRPC proxying
- WebSocket support: WebSocket over HTTP/3
High Availability
- Connection migration: Support QUIC connection migration
- State replication: Share connection state across instances
- Zero-downtime updates: Binary updates without connection loss
- Multi-region support: Geographic routing and failover
Phase 4: Protocol Extensions
Goal: Support emerging protocols and optimizations.
HTTP/3 Features
- 0-RTT support: Enable 0-RTT with proper anti-replay measures
- QUIC multipath: Support multiple network paths
- Datagram support: QUIC DATAGRAM frames for low-latency data
- Priority trees: HTTP/3 priority and scheduling
Additional Protocols
- HTTP/1.1 support: Serve HTTP/1.1 clients
- TCP proxy mode: Layer 4 TCP proxying
- UDP proxy: Forward UDP traffic
- MQTT support: IoT protocol support
Optimizations
- Zero-copy: Eliminate unnecessary data copies
- Kernel bypass: AF_XDP or DPDK integration
- Hardware offload: TLS offload to NICs
- eBPF: Use eBPF for packet filtering and routing
Implementation Priorities
High Priority (Next 3 months)
- Async data plane - unblock main thread
- Configuration hot reload - reduce operational friction
- Streaming bodies - reduce memory usage
- mTLS operational tooling - certificate lifecycle automation
Medium Priority (3-6 months)
- Circuit breakers - improve reliability
- Distributed tracing - debugging complex issues
- Rate limiting - protect backends
- Health check improvements - reduce contention
- Admin API - operational visibility
Low Priority (6+ months)
- Dynamic backend discovery - integration complexity
- Advanced load balancing - diminishing returns
- Advanced protocol features - adds complexity
- Protocol extensions - limited immediate value
- Multi-tenancy - niche use case
Technical Debt
Current Known Issues
- Blocking backend calls: Main thread blocks during HTTP/2 requests
- Full body buffering: High memory usage for large requests/responses
- Configuration hot reload missing: Runtime config updates still require restart
- Dual-ingress operational complexity: Runtime serves HTTP/3 (native) plus HTTP/1.1/2 TLS bootstrap, so operators must secure and observe both paths consistently
- Method-based route matching constraints: keep route precedence and method tie-break semantics covered by integration tests as routing rules evolve
- Control/metrics endpoint hardening is operator-dependent: endpoints should remain network-isolated unless explicitly protected
Refactoring Needs
- Error handling: Unify error types across crates
- Configuration: Type-safe config builders
- Testing: Expand integration test coverage
- Documentation: API documentation and examples
- Logging: Reduce debug log verbosity in hot path
Non-Goals
Features explicitly not planned:
- Full service mesh: Focus remains on edge proxying
- Content caching: Use CDN or dedicated cache
- WAF capabilities: Use dedicated security tools
- Database proxying: Use specialized database proxies
- Custom protocols: Stick to HTTP family
- In-process plugin/extension ABI: No WASM/eBPF/Lua middleware model until a safe isolation and lifecycle model is defined
Contributing
Contributions are welcome. See contributing guide for development setup and guidelines.
Priority areas for contributions:
- Streaming request/response bodies
- Configuration hot reload
- Distributed tracing (OpenTelemetry)
- Integration tests
- Documentation and examples