Overview
Iris implements a zero-persistence privacy model designed to process facial recognition requests without storing any user data, biometric information, or personally identifiable information (PII). All processing happens entirely in RAM with no database or filesystem storage.Core Privacy Principles
1. Zero Data Persistence
Iris does not store any data beyond the lifecycle of a single API request:- No database: The application has no database connection or storage backend
- No file storage: Images are never written to disk
- No logging of PII: Request logs contain no facial data, embeddings, or user identifiers
- In-memory only: All processing occurs in RAM and is discarded immediately after response
The only persistent data is aggregate statistics (request counts) with no user-identifiable information.
2. Ephemeral Image Processing
Images are processed transiently and never retained:- Images are decoded directly from HTTP responses or data URIs into memory
- OpenCV
Matobjects exist only for the duration of the request - Rust’s ownership system ensures automatic memory cleanup when variables go out of scope
- No temporary files are created during decoding
3. Biometric Embedding Lifecycle
Facial embeddings (the numerical representation of faces) are never stored:- Embeddings are stored only in local function variables
- They are deallocated immediately when the function returns
- No embeddings are passed outside the request handler
- The comparison score is computed and returned, but embeddings are discarded
Data Flow Diagram
What Gets Processed vs. Stored
| Data Type | Processing | Storage | Retention |
|---|---|---|---|
| Input images | ✅ Yes (in RAM) | ❌ No | Request duration only |
| Facial embeddings | ✅ Yes (in RAM) | ❌ No | Request duration only |
| Match scores | ✅ Yes (computed) | ❌ No | Returned in response only |
| Person names | ✅ Yes (passed through) | ❌ No | Request duration only |
| IP addresses | ✅ Yes (rate limiting) | ❌ No | ~1 second (rate limit window) |
| Request counts | ✅ Yes (aggregated) | ✅ Yes | In-memory statistics only |
Application State
The only persistent state in the application:engine: Contains only the pre-trained AI models (static, no user data)limiter: Tracks request counts per IP for rate limiting (automatically expires)stats: Aggregate statistics with no user-identifiable information
The rate limiter stores IP addresses temporarily in memory to enforce rate limits, but these are automatically pruned and not associated with any request content.
Privacy by Design Features
Automatic Memory Management
Rust’s ownership system provides compile-time guarantees:No PII in Request Logs
The API accepts only:- Image URLs or data URIs (external references, not logged)
- Display names (user-provided labels, not logged)
Stateless Request Processing
Each request is completely independent:- No session state between requests
- No user accounts or authentication (can be added separately)
- No request history or analytics per user
Compliance Considerations
GDPR Compliance
- Data Minimization: ✅ Only processes data necessary for comparison
- Storage Limitation: ✅ No data retained beyond request processing
- Right to Erasure: ✅ N/A (no data stored)
- Data Portability: ✅ N/A (no data stored)
BIPA Compliance (Illinois Biometric Privacy Act)
- Biometric Storage: ✅ No biometric identifiers stored
- Retention Policy: ✅ Immediate deletion (end of request)
- Written Policy: ⚠️ You must provide consent and policy to end users
Verifying Privacy Claims
You can verify Iris’s privacy model by:- Reviewing the source code: All code is open source on GitHub
- Network analysis: Monitor network traffic - only image downloads occur
- File system monitoring: Watch for file writes - none occur during processing
- Memory profiling: Observe memory release after requests complete
Comparison with Cloud Services
| Feature | Iris (Self-Hosted) | Typical Cloud API |
|---|---|---|
| Data storage | ❌ None | ✅ Often stored for “service improvement” |
| Third-party access | ❌ Impossible | ⚠️ Vendor has access |
| Data residency | ✅ Your server | ❌ Vendor’s datacenter |
| Privacy control | ✅ Complete | ⚠️ Limited by ToS |
| Audit transparency | ✅ Full source access | ❌ Black box |
Best Practices for Deployers
- Deploy behind HTTPS to encrypt image data in transit
- Configure reverse proxy logging to exclude request bodies
- Implement authentication if restricting access to the API
- Document your privacy policy explaining how you use Iris
- Obtain user consent before processing facial images
- Monitor resource usage to ensure proper memory cleanup
Technical Security Measures
See related documentation:- Rate Limiting - Prevents abuse and resource exhaustion
- CORS Configuration - Controls cross-origin access