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.
···2233QuickDID is a high-performance AT Protocol identity resolution service written in Rust. It provides blazing-fast handle-to-DID resolution with intelligent caching strategies, supporting both in-memory and Redis-backed persistent caching with binary serialization for optimal storage efficiency.
4455+Built with minimal dependencies and optimized for production use, QuickDID delivers exceptional performance while maintaining a lean footprint.
66+57## ⚠️ Production Disclaimer
6879**This project is a release candidate and has not been fully vetted for production use.** While it includes comprehensive error handling and has been designed with production features in mind, more thorough testing is necessary before deploying in critical environments. Use at your own risk and conduct appropriate testing for your use case.
···1113- **Fast Handle Resolution**: Resolves AT Protocol handles to DIDs using DNS TXT records and HTTP well-known endpoints
1214- **Multi-Layer Caching**: In-memory caching with configurable TTL and Redis-backed persistent caching (90-day TTL)
1315- **Binary Serialization**: Compact storage format reduces cache size by ~40% compared to JSON
1414-- **Queue Processing**: Asynchronous handle resolution with support for MPSC and Redis queue adapters
1616+- **Queue Processing**: Asynchronous handle resolution with support for MPSC, Redis, and no-op queue adapters
1517- **AT Protocol Compatible**: Implements XRPC endpoints for seamless integration with AT Protocol infrastructure
1618- **Comprehensive Error Handling**: Includes health checks and graceful shutdown support
1919+- **Minimal Dependencies**: Optimized dependency tree for faster compilation and reduced attack surface
2020+- **Predictable Worker IDs**: Simple default worker identification for distributed deployments
17211822## Building
1923···58625963This will start QuickDID with:
6064- HTTP server on port 8080 (default)
6161-- In-memory caching only
6565+- In-memory caching only (300-second TTL)
6266- MPSC queue adapter for async processing
6767+- Default worker ID: "worker1"
6368- Connection to plc.directory for DID resolution
64696570### Optional Configuration
···68736974- `HTTP_PORT`: Server port (default: 8080)
7075- `REDIS_URL`: Redis connection URL for persistent caching (e.g., `redis://localhost:6379`)
7171-- `QUEUE_ADAPTER`: Queue type - 'mpsc' or 'redis' (default: mpsc)
7676+- `QUEUE_ADAPTER`: Queue type - 'mpsc', 'redis', or 'noop' (default: mpsc)
7777+- `QUEUE_WORKER_ID`: Worker identifier for distributed queue processing (default: worker1)
7278- `PLC_HOSTNAME`: PLC directory hostname (default: plc.directory)
7379- `RUST_LOG`: Logging level (e.g., debug, info, warn, error)
7480···8086HTTP_PORT=3000 \
8187REDIS_URL=redis://localhost:6379 \
8288QUEUE_ADAPTER=redis \
8989+QUEUE_WORKER_ID=prod-worker-1 \
8390RUST_LOG=info \
8491./target/release/quickdid
8592```
+7-3
docs/configuration-reference.md
···241241**Required**: No
242242**Type**: String
243243**Default**: `mpsc`
244244-**Values**: `mpsc`, `redis`, `noop`
244244+**Values**: `mpsc`, `redis`, `noop`, `none`
245245246246The type of queue adapter for background handle resolution.
247247···249249- `mpsc`: In-memory multi-producer single-consumer queue (default)
250250- `redis`: Redis-backed distributed queue
251251- `noop`: Disable queue processing (testing only)
252252+- `none`: Alias for `noop`
252253253254**Examples**:
254255```bash
···260261261262# Testing without background processing
262263QUEUE_ADAPTER=noop
264264+265265+# Alternative syntax for disabling
266266+QUEUE_ADAPTER=none
263267```
264268265269### `QUEUE_REDIS_URL`
···325329326330**Required**: No
327331**Type**: String
328328-**Default**: Auto-generated UUID
332332+**Default**: `worker1`
329333330334Worker identifier for queue operations. Used in logs and monitoring.
331335···420424QUEUE_ADAPTER=redis
421425QUEUE_REDIS_URL=redis://queue-redis:6379/0
422426QUEUE_REDIS_PREFIX=prod:queue:
423423-QUEUE_WORKER_ID=${HOSTNAME}
427427+QUEUE_WORKER_ID=${HOSTNAME:-worker1}
424428QUEUE_REDIS_TIMEOUT=10
425429426430# Performance
+4-3
docs/production-deployment.md
···9494# QUEUE CONFIGURATION
9595# ----------------------------------------------------------------------------
96969797-# Queue adapter type: 'mpsc', 'redis', or 'noop' (default: mpsc)
9797+# Queue adapter type: 'mpsc', 'redis', 'noop', or 'none' (default: mpsc)
9898# - 'mpsc': In-memory queue for single-instance deployments
9999# - 'redis': Distributed queue for multi-instance or HA deployments
100100# - 'noop': Disable queue processing (testing only)
101101+# - 'none': Alias for 'noop'
101102QUEUE_ADAPTER=redis
102103103104# Redis URL for queue adapter (uses REDIS_URL if not set)
···114115# Higher = less polling overhead, slower shutdown
115116QUEUE_REDIS_TIMEOUT=5
116117117117-# Worker ID for Redis queue (auto-generated UUID if not set)
118118+# Worker ID for Redis queue (defaults to "worker1")
118119# Set this for predictable worker identification in multi-instance deployments
119120# Examples: worker-001, prod-us-east-1, $(hostname)
120120-# QUEUE_WORKER_ID=worker-001
121121+QUEUE_WORKER_ID=prod-worker-1
121122122123# Buffer size for MPSC queue (default: 1000)
123124# Range: 100-100000
+3-2
src/config.rs
···9494 CACHE_TTL_REDIS TTL for Redis cache in seconds (default: 7776000 = 90 days)
95959696 QUEUE CONFIGURATION:
9797- QUEUE_ADAPTER Queue adapter: 'mpsc', 'redis', 'noop' (default: mpsc)
9797+ QUEUE_ADAPTER Queue adapter: 'mpsc', 'redis', 'noop', 'none' (default: mpsc)
9898 QUEUE_REDIS_URL Redis URL for queue adapter (uses REDIS_URL if not set)
9999 QUEUE_REDIS_PREFIX Redis key prefix for queues (default: queue:handleresolver:)
100100 QUEUE_REDIS_TIMEOUT Queue blocking timeout in seconds (default: 5)
101101- QUEUE_WORKER_ID Worker ID for Redis queue (auto-generated UUID if not set)
101101+ QUEUE_WORKER_ID Worker ID for Redis queue (default: worker1)
102102 QUEUE_BUFFER_SIZE Buffer size for MPSC queue (default: 1000)
103103"
104104)]
···180180 /// - "mpsc": In-memory multi-producer single-consumer queue
181181 /// - "redis": Redis-backed distributed queue
182182 /// - "noop": Disable queue processing (for testing)
183183+ /// - "none": Alias for "noop"
183184 ///
184185 /// Default: "mpsc" for single-instance deployments
185186 #[arg(long, env = "QUEUE_ADAPTER", default_value = "mpsc")]