The Catalogue API (catalogue) is the high-performance GraphQL catalogue backend powering Destination Home. It indexes and serves over 87,000+ preservation items (spaces, clothing, furniture, apartments, rewards, and clubhouse assets) with instant typo tolerance, multilingual queries, and Relay-compliant cursor pagination.
- @zeph (that's me!)
- 🏎️ Sub-5ms Typo-Tolerant Search: Built on Meilisearch with native typo tolerance (
hodie$\rightarrow$ Hoodie,sceme$\rightarrow$ Scene,scrne$\rightarrow$ Scene). - 🌍 Multilingual Localized Indexing: Search across all 8+ PlayStation Home localization languages simultaneously (English, Italian, Spanish, French, German, Japanese, Korean, and Chinese) with automatic diacritic and accent normalization (
città$\leftrightarrow$ citta). - 🔒 Zero-Trust Network Isolation: Pre-configured Docker Compose architecture using internal networks. Neither Meilisearch nor MongoDB expose any open ports to the host or internet.
- 🪶 Zero-OS Scratch Container: Statically compiled against
musland packaged in a pureFROM scratchruntime container with zero OS attack surface and minimal memory footprint.
[ Web Browser / Client ]
|
(Port 8080)
|
v
+---------------+
| catalogue-api | <--- Actix Web + Async-GraphQL (Rust)
+---------------+
/ \
/ \ (internal_net: internal: true, 0 open host ports)
v v
+---------+ +-------------+
| MongoDB | | Meilisearch |
+---------+ +-------------+
To start the complete stack (API, MongoDB, and isolated Meilisearch):
# Launch background services
docker compose up -dThis starts:
catalogue-api: Listening on port8080mongodb: Secure internal network (port27017not exposed to host)meilisearch: Secure internal network (port7700not exposed to host)
If running MongoDB and Meilisearch locally:
- Copy
.env.exampleto.env:cp .env.example .env
- Edit
.envwith your database and search URLs - Run the server:
cargo run --release --bin catalogue
| Variable | Description | Default / Example |
|---|---|---|
HOST |
Server bind host address | 0.0.0.0 |
PORT |
Server HTTP port | 8080 |
MONGO_URI |
MongoDB connection URI with default database | mongodb://localhost:27017/destination_home |
JWT_PRIVATE_KEY |
HMAC SHA-512 private key for JWT authentication | your_secret_key |
MEILI_URL |
(Optional) Meilisearch server endpoint URL | http://localhost:7700 |
RUST_LOG |
Logging verbosity filter | info,catalogue=debug |
# Run strict Clippy linter
cargo clippy --bins --release -- -D warnings -D clippy::nursery
# Run automated unit test suite
cargo test --bin catalogue- The Meilisearch team for building the fastest instant search engine.
- The Rust, Actix, and Async-GraphQL communities.
- Claude and Gemini for autonomous pair-programming and refactoring support.
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
What this means:
- ✅ You can run, modify, and build upon this catalogue service.
- ✅ You can use this service for open-source preservation projects.
- 🛑 If you host or modify this network service, you must provide the complete corresponding source code to users under the AGPL-3.0.
See LICENSE for more details.