Security
How we keep your data safe.
xrecommend is a hosted service: we run the infrastructure, you push records and search them. This page describes how we keep your data safe.
Data isolation
Every account is a row in a shared SQLite database with
account_id on every domain row. Every query in the
application layer is scoped to Current.account; the
vector and FTS5 indexes use account_id as a partition
key. There is no path from one tenant to another.
Authentication
- Web — Rails 8 session-based auth with bcrypt-hashed passwords (cost factor 12).
- API — Bearer tokens. The raw token is shown to the user once at creation and never stored; we only keep a SHA-256 digest.
- Encryption at rest — All API keys are stored as SHA-256 digests. Passwords use bcrypt. Database files can be encrypted at the filesystem level (LUKS / EBS encryption).
- Encryption in transit — TLS 1.3 only, via Caddy with automatic Let's Encrypt on hosted deployments.
Reporting a vulnerability
Email [email protected] with a description and reproduction steps. We respond within 24 hours and ship a fix within 7 days for high-severity issues. We do not run a paid bug-bounty program yet.
Compliance
We are SOC 2 Type I in progress (target: Q4 2026). We can sign DPAs on Enterprise plans.