# ADR-004: Injectable clients, no module-level side effects ## Status Accepted ## Context Module-level side effects (auto-connections, env-based configuration) make testing difficult and conflict with containerized deployment patterns. The hub needs to create database instances with different configurations. ## Decision `createSqliteDatabase(client)` receives a pre-created client. Module-level side effects are forbidden. The factory enables in-memory testing (`createClient({ url: ":memory:" })`) and custom client configuration. ## Consequences - No global database state — each consumer explicitly creates and injects - Testing with in-memory databases is straightforward - Containerized deployment patterns are supported - Consumer controls client lifecycle (connections, cleanup) ## References - [sqlite-host.md](../sqlite-host.md)