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
  • purge method to HandleResolver trait for removing entries by handle or DID
  • set method 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 purge and set calls 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 --version and --help only
  • Improved error handling with strongly-typed errors using thiserror throughout
  • 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#

  • clap crate 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