The golden rule
Section titled “The golden rule”Every extension package depends only on oridecon and oridecon-contracts. No extension ever depends on another extension.
This rule keeps the dependency graph acyclic and ensures packages can be adopted independently. The core (oridecon) provides the DI container, Application, configuration, and logging. oridecon-contracts defines the protocols extensions implement.
An import linter enforces this. A cross-extension import that type-checks will still fail CI.
Documented exceptions
Section titled “Documented exceptions”A small number of packages are orchestrators or tooling. They may list other Oridecon distributions in pyproject.toml. Application extensions still must not import each other.
| Package | May depend on | Why |
|---|---|---|
oridecon-admin | oridecon-ui (hard); auth, cache, events, web, tenancy, monitor, search, tasks as extras | Admin dashboard; extras are opt-in |
oridecon-ai (orchestrator) | oridecon-ai-*, oridecon-vector via entry points | Discovers and wires AI subsystems |
oridecon-multimedia (orchestrator) | oridecon-multimedia-* via entry points | Discovers multimedia backends |
oridecon-testing | any extension (optional) | Fakes and compliance suites |
Verified against current pyproject.toml files on branch dev:
oridecon-webdoes not depend onoridecon-ui. It depends onoridecon,oridecon-contracts, Starlette, and a few HTTP/template libraries.oridecon-eventsandoridecon-tasksdo not depend onoridecon-resilience. Retry and circuit-breaker collaboration goes through contracts inoridecon-contracts.
Adding a new cross-extension hard dependency requires a design review. Prefer a protocol in oridecon-contracts.
Python & runtime
Section titled “Python & runtime”- Python version: 3.11+ required
- Run the app:
oridecon run/oridecon dev(auto-picks granian → uvicorn → hypercorn) - ASGI servers: uvicorn, granian, and hypercorn are all valid when you already operate one — see Deployment
- Package manager: uv (recommended), pip, poetry
The public line is 0.1.1 (alpha 0.1.x). Pin the range:
uv add "oridecon>=0.1,<0.2"uv add "oridecon-cli>=0.1,<0.2"Known constraints
Section titled “Known constraints”Oridecon SQL
Section titled “Oridecon SQL”Requires an async database driver. Connection strings must use the async variant:
| Database | Driver | Connection string |
|---|---|---|
| PostgreSQL | asyncpg | postgresql+asyncpg://user:pass@host/db |
| MySQL | aiomysql | mysql+aiomysql://user:pass@host/db |
| SQLite | aiosqlite | sqlite+aiosqlite:///path/to/db |
Oridecon NoSQL — wire status
Section titled “Oridecon NoSQL — wire status”| Backend | Status |
|---|---|
| MongoDB | Wired — provider is active and configurable |
| DynamoDB | Code exists but not wired — provider class written, not registered |
| Firestore | Code exists but not wired — provider class written, not registered |
Oridecon Queue — wire status
Section titled “Oridecon Queue — wire status”| Backend | Status |
|---|---|
| Memory / Redis / RabbitMQ / Kafka / SQS | Wired — fully configurable |
| Azure Service Bus / GCP Pub/Sub | Code exists but not wired — provider classes written, not registered |
Oridecon Graph
Section titled “Oridecon Graph”| Backend | Status |
|---|---|
| Neo4j | Wired |
| In-memory | Wired — suitable for dev and testing |
Optional extras
Section titled “Optional extras”Install backend-specific dependencies via extras:
| Package | Extras |
|---|---|
oridecon-sql | [postgres], [mysql], [sqlite] |
oridecon-cache | [redis], [memcached], [semantic] |
oridecon-queue | [redis], [rabbitmq], [kafka], [sqs], [azure], [gcp] |
oridecon-search | [elasticsearch], [meilisearch], [algolia] |
oridecon-storage | [aws], [gcp], [azure] |
oridecon-vector | [pgvector], [qdrant], [pinecone], [chroma], [weaviate] |
oridecon-ai-llm | [openai], [anthropic], [ollama], [groq], [mistral], [cohere], [huggingface] |
oridecon-web | [granian], [uvicorn], [hypercorn], [security], [templates], [websocket] |
uv add "oridecon-sql[postgres]"Maturity
Section titled “Maturity”All 54 packages are alpha (0.1.x). Breaking changes may occur before 1.0. Below 1.0, SemVer treats a minor bump as the breaking signal. Product notes: Changelog. Full log: CHANGELOG.md on branch dev.
See Adoption Paths for a staged guide, and Choosing Backends for which extra to pick.