{"id":39498190,"url":"https://github.com/barrelmaker97/obscura-server","last_synced_at":"2026-03-01T16:05:37.321Z","repository":{"id":301943009,"uuid":"1010720172","full_name":"barrelmaker97/obscura-server","owner":"barrelmaker97","description":"Minimalist, secure relay server for the Signal Protocol","archived":false,"fork":false,"pushed_at":"2026-02-12T22:51:11.000Z","size":1202,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-13T08:10:59.530Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/barrelmaker97.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-29T17:02:18.000Z","updated_at":"2026-02-12T22:51:14.000Z","dependencies_parsed_at":"2025-06-29T18:45:35.185Z","dependency_job_id":"77a1beea-c493-4a05-a13e-6f7397aeea64","html_url":"https://github.com/barrelmaker97/obscura-server","commit_stats":null,"previous_names":["barrelmaker97/obscura-server"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/barrelmaker97/obscura-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrelmaker97%2Fobscura-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrelmaker97%2Fobscura-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrelmaker97%2Fobscura-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrelmaker97%2Fobscura-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/barrelmaker97","download_url":"https://codeload.github.com/barrelmaker97/obscura-server/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrelmaker97%2Fobscura-server/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29597852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T22:25:43.180Z","status":"ssl_error","status_checked_at":"2026-02-18T22:25:42.766Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-18T05:44:14.500Z","updated_at":"2026-02-26T20:20:22.275Z","avatar_url":"https://github.com/barrelmaker97.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Obscura Server\n\n**Obscura Server** is a minimalist, secure relay server for the Signal Protocol. It facilitates end-to-end encrypted asynchronous messaging while maintaining a zero-knowledge architecture.\n\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n[![CI](https://github.com/barrelmaker97/obscura-server/actions/workflows/ci.yml/badge.svg)](https://github.com/barrelmaker97/obscura-server/actions/workflows/ci.yml)\n\n## Features\n\n- **Zero-Knowledge Architecture**: The server stores opaque encrypted blobs. It cannot read message content or access private keys.\n- **Signal Protocol Support**: Native support for PreKeys (Identity, Signed, One-Time) to enable X3DH key exchanges.\n- **Asynchronous Delivery**: Stores encrypted messages until the recipient comes online to fetch them via WebSockets.\n- **Encrypted Attachments**: Secure file uploads via S3-compatible storage with automated TTL-based expiry.\n- **Strict Privacy Limits**: Automatic garbage collection of old messages and global inbox limits to prevent metadata buildup.\n- **Observability Native**: Built-in support for Traces, Metrics, and Structured Logging via OTLP.\n\n---\n\n## Security \u0026 Privacy\n\n### Threat Model\nObscura is designed to protect the **content** of communications even if the server is fully compromised.\n\n- **What the Server Sees**:\n    - User IDs and Usernames.\n    - Public Keys (Identity, Signed PreKeys, One-Time PreKeys).\n    - Metadata: Message timestamps, sizes, and recipient/sender IDs.\n    - IP Addresses (unless connected via Tor/VPN).\n- **What the Server CANNOT See**:\n    - Message plaintext (content).\n    - Attachment plaintext.\n    - Private keys (they never leave the client).\n- **Non-Goals**: Obscura does not currently implement padding or mix-net techniques to protect against advanced traffic analysis or metadata correlation.\n\n---\n\n## Quick Start\n\n### 1. Run with Docker Compose\nA `docker-compose.yml` is provided for a complete local stack (Postgres + Valkey + MinIO + Server):\n\n```bash\ndocker compose up -d\n```\n\n### 2. Interaction Example\nOnce the server is running on port `3000`, you can verify it's working:\n\n```bash\n# Check Health (Management Port 9090)\ncurl http://localhost:9090/readyz\n\n# View OpenAPI Spec\ncurl http://localhost:3000/openapi.yaml\n```\n\n---\n\n## Configuration\n\nObscura can be configured via command-line flags or environment variables. **Essential configurations** include:\n\n| Option | Environment Variable | Default |\n|--------|----------------------|---------|\n| `--db-url` | `OBSCURA_DATABASE_URL` | `postgres://user:password@localhost/signal_server` |\n| `--pubsub-url` | `OBSCURA_PUBSUB_URL` | `redis://localhost:6379` |\n| `--jwt-secret` | `OBSCURA_AUTH_JWT_SECRET` | `change_me_in_production` |\n| `--storage-bucket` | `OBSCURA_STORAGE_BUCKET` | `obscura-storage` |\n\nSee [**docs/CONFIGURATION.md**](./docs/CONFIGURATION.md) for the full list of over 50 configuration options.\n\n---\n\n## Development\n\n### Prerequisites\n- Rust 1.83+\n- PostgreSQL 16+\n- Valkey 8+ (or Redis)\n- `protoc` (Protocol Buffers compiler)\n\n### Running Locally\n1. Start infrastructure: `docker compose up -d db minio valkey`\n2. Run migrations and start:\n   ```bash\n   export OBSCURA_DATABASE_URL=postgres://user:password@localhost/signal_server\n   export OBSCURA_PUBSUB_URL=redis://localhost:6379\n   export OBSCURA_AUTH_JWT_SECRET=test\n   export OBSCURA_STORAGE_BUCKET=test\n   cargo run\n   ```\n\n### Testing\n```bash\ncargo test\n```\n\n---\n\n## Documentation\n\n- **API Reference**: [openapi.yaml](./openapi.yaml)\n- **Configuration Guide**: [docs/CONFIGURATION.md](./docs/CONFIGURATION.md)\n- **Release Process**: [docs/RELEASING.md](./docs/RELEASING.md)\n- **System Architecture**: [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)\n- **Design Docs**: [docs/design/](./docs/design/)\n\n# License\n\nCopyright (c) 2026 Nolan Cooper\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarrelmaker97%2Fobscura-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbarrelmaker97%2Fobscura-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarrelmaker97%2Fobscura-server/lists"}