Skip to content

Dependency Graph

Arrows point from dependent to dependency (A --> B means "A depends on B").

graph TD
    J[meadows-jsonlogic]
    C[meadows-client]
    B[meadows-bot]
    S[meadows-server]
    W[meadows-web]
    T[meadows-tui]
    P[meadows-protocol]

    J --> P
    C --> P
    C --> J
    S --> P
    S --> J
    W --> P
    T --> P
    T --> C
    B --> C
    B --> P

Rules

  1. meadows-protocol is the only leaf — everyone depends on it; it depends on nothing.
  2. meadows-server and meadows-bot never import each other — they meet only via protocol types.
  3. meadows-web does not depend on meadows-client — it is a dumb HTTP host; the browser is the Socket.IO client.
  4. meadows-client makes the second implementation cheap — bots and (future non-browser) clients share transport.

Import paths

Package Import path
meadows-protocol meadows.protocol
meadows-client meadows.client
meadows-bot meadows.bot
meadows-server meadows.server
meadows-web meadows.web
meadows-tui meadows.tui

Dependency details

Package Depends on Install
meadows-protocol pydantic only uv pip install -e .
meadows-jsonlogic meadows-protocol uv pip install -e .
meadows-client meadows-protocol, meadows-jsonlogic, python-socketio uv pip install -e .
meadows-bot meadows-client, meadows-protocol uv pip install -e .
meadows-server meadows-protocol, meadows-jsonlogic, python-socketio, endow uv pip install -e ".[dev]"
meadows-web meadows-protocol, starlette uv pip install -e ".[dev]"
meadows-tui meadows-client, meadows-protocol uv pip install -e ".[dev]"

Editable dependencies

Each pyproject.toml maps sibling packages to editable paths:

[tool.uv.sources]
meadows-protocol = { path = "../meadows-protocol", editable = true }

This ensures local development uses the latest sibling code without publishing.