QuickDID is a high-performance AT Protocol identity resolution service written in Rust. It provides handle-to-DID resolution with Redis-backed caching and queue processing.
Changelog#
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]#
1.0.0-rc.5 - 2025-09-10#
Added#
- Bidirectional caching support for handle-to-DID and DID-to-handle lookups in Redis resolver
purgemethod to HandleResolver trait for removing entries by handle or DIDsetmethod to HandleResolver trait for manual cache updates- Jetstream consumer integration for real-time cache updates from AT Protocol firehose
- QuickDidEventHandler module for processing Account and Identity events
- Static file serving with www directory support for landing page and well-known files
- Comprehensive test coverage for new bidirectional cache operations
Changed#
- Handle normalization to lowercase throughout the system for consistency
- Updated all resolver implementations to chain
purgeandsetcalls through the stack - Enhanced documentation to reflect Jetstream configuration and bidirectional caching
- Improved production deployment guide with real-time sync recommendations
Fixed#
- Handle case sensitivity issues - all handles now normalized to lowercase
- Cache consistency between handle and DID lookups
- Event processing error handling in Jetstream consumer
1.0.0-rc.4 - 2025-09-08#
Added#
- Metrics system with pluggable adapters (StatsD support) for monitoring and observability
- Proactive refresh resolver for keeping cached entries fresh before expiration
- Redis queue deduplication to prevent duplicate handle resolution work items
- Configurable bind address for StatsD UDP socket supporting both IPv4 and IPv6
- CORS headers support for cross-origin requests
- OPTIONS method handling for preflight requests
- Resolution timing measurements for performance monitoring
- Comprehensive metrics tracking including counters, gauges, and timings
- Telegraf and TimescaleDB integration guide for metrics aggregation
- Railway deployment resources for production environments
Changed#
- Replaced chrono with httpdate for more efficient HTTP date formatting
- Refactored handle resolver to include resolution time measurements
- Improved handle resolution view architecture
- Enhanced documentation with metrics configuration and deployment guides
Fixed#
- Minor typo in feature commit message ("fesature" corrected to "feature")
1.0.0-rc.3 - 2025-09-06#
Added#
- SQLite support for persistent caching and queue processing
- Rate limiting with semaphore-based concurrency control (
RESOLVER_MAX_CONCURRENT) - Timeout support for rate limit permit acquisition (
RESOLVER_MAX_CONCURRENT_TIMEOUT_MS) - SQLite queue adapter with work shedding capabilities (
QUEUE_SQLITE_MAX_SIZE) - Comprehensive error system with unique identifiers (e.g.,
error-quickdid-config-1) - 12-factor app compliance with environment-only configuration
Changed#
- Configuration now exclusively uses environment variables (removed clap dependency)
- Command-line arguments limited to
--versionand--helponly - Improved error handling with strongly-typed errors using
thiserrorthroughout - Enhanced documentation with accurate configuration defaults and examples
- Updated README with complete architecture overview and deployment strategies
- Cache priority system: Redis → SQLite → Memory (first available)
Fixed#
- Error messages now consistently follow
error-quickdid-<domain>-<number>format - Configuration validation for all TTL and timeout values
- Documentation inconsistencies in CLAUDE.md development guide
- Queue adapter validation to include 'sqlite' option
Removed#
clapcrate dependency (replaced with simple argument handling)anyhow!()macro usage in favor of proper error types- Command-line configuration options (following 12-factor methodology)
1.0.0-rc.2 - 2025-09-05#
Changed#
- Updated documentation to reflect current worker ID defaults and queue adapter options
- Synchronized configuration documentation with actual implementation
- Improved production deployment examples with accurate defaults
Fixed#
- Configuration documentation inconsistencies between docs and code
- Queue adapter validation to properly support 'none' alias for 'noop'
1.0.0-rc.1 - 2025-09-04#
Added#
- AT Protocol identity resolution service with handle-to-DID resolution
- Multi-layer caching with in-memory and Redis-backed persistent storage
- Binary serialization using bincode for 40% cache size reduction
- Queue processing system with MPSC, Redis, and no-op adapters
- XRPC endpoints for AT Protocol compatibility
- Health check endpoint with service status monitoring
- Comprehensive configuration validation with descriptive error messages
- Docker deployment support with production-ready configuration
- Graceful shutdown handling with proper signal management
Changed#
- Replaced UUID-based worker IDs with predictable "worker1" default
- Optimized dependency tree by removing unused crates (atproto-xrpcs, deadpool, chrono, uuid)
- Reduced tokio features to only required subset for faster compilation
- Replaced chrono timestamps with std::time::SystemTime
- Made code visibility minimal with trait-based public APIs
- Consolidated test helpers to eliminate duplicate Redis setup code
Fixed#
- Clippy warnings for enum variant naming conventions
- Memory cache expiration logic for proper TTL handling
- Redis connection pooling with proper error handling
- Queue adapter type validation to support all documented values
Removed#
- Unused error variants (ResolutionFailed, ResolutionTimeout)
- Redundant WorkItem enum from queue system
- Unnecessary feature flags (axum macros, deadpool-redis script)
- 4 unused dependencies reducing compilation time