diff --git a/.github/workflows/pull-request.yaml b/.github/workflows/pull-request.yaml
index 48154284..87963eda 100644
--- a/.github/workflows/pull-request.yaml
+++ b/.github/workflows/pull-request.yaml
@@ -22,7 +22,7 @@ jobs:
uses: actions/checkout@v3
- name: Setup packages
- run: make update-package-versions VERSION=2.0.999
+ run: make update-package-versions VERSION=2.1.999
- name: Setup environment
run: python3 -m venv env
diff --git a/README.md b/README.md
index 61a03cc7..d1db4ffd 100644
--- a/README.md
+++ b/README.md
@@ -13,9 +13,17 @@
# The context backend for reliable AI
+
+
+# The context backend for AI agents
+
-LLMs alone hallucinate and diverge from ground truth. [TrustGraph](https://trustgraph.ai) is a context system that stores, enriches, and delivers context to LLMs to enable reliable AI agents. Think like [Supabase](https://github.com/supabase/supabase) but AI-native and powered by context graphs.
+Durable agent memory you can trust. Build, version, and retrieve grounded context from a context graph.
+
+- Give agents **memory** that persists across sessions and deployments.
+- Reduce hallucinations with **grounded context retrieval**
+- Ship reusable, portable [Context Cores](#context-cores) (packaged context you can move between projects/environments).
The context backend:
- [x] Multi-model and multimodal database system
@@ -45,21 +53,6 @@ The context backend:
- [x] Websocket API [Docs](https://docs.trustgraph.ai/reference/apis/websocket.html)
- [x] Python API [Docs](https://docs.trustgraph.ai/reference/apis/python)
- [x] CLI [Docs](https://docs.trustgraph.ai/reference/cli/)
-
-## No API Keys Required
-
-How many times have you cloned a repo and opened the `.env.example` to see the dozens of API keys for 3rd party dependencies needed to make the services work? There are only 3 things in TrustGraph that might need an API key:
-
-- 3rd party LLM services like Anthropic, Cohere, Gemini, Mistral, OpenAI, etc.
-- 3rd party OCR like Mistral OCR
-- The API key *you set* for the TrustGraph API gateway
-
-Everything else is included.
-- [x] Managed Multi-model storage in [Cassandra](https://cassandra.apache.org/_/index.html)
-- [x] Managed Vector embedding storage in [Qdrant](https://github.com/qdrant/qdrant)
-- [x] Managed File and Object storage in [Garage](https://github.com/deuxfleurs-org/garage) (S3 compatible)
-- [x] Managed High-speed Pub/Sub messaging fabric with [Pulsar](https://github.com/apache/pulsar)
-- [x] Complete LLM inferencing stack for open LLMs with [vLLM](https://github.com/vllm-project/vllm), [TGI](https://github.com/huggingface/text-generation-inference), [Ollama](https://github.com/ollama/ollama), [LM Studio](https://github.com/lmstudio-ai), and [Llamafiles](https://github.com/mozilla-ai/llamafile)
## Quickstart
@@ -76,8 +69,6 @@ TrustGraph downloads as Docker containers and can be run locally with Docker, Po
width="80%" controls>
-For a browser based quickstart, try the [Configuration Terminal](https://config-ui.demo.trustgraph.ai/).
-
Table of Contents
@@ -181,24 +172,28 @@ TrustGraph provides component flexibility to optimize agent workflows.
-Multi-model storage
+Graph Storage
+
+
+- Apache Cassandra (default)
+- Neo4j
+- Memgraph
+- FalkorDB
+
+
+
+VectorDBs
- Apache Cassandra
-
-
-VectorDB
-
-
-- Qdrant
-
File and Object Storage
-- Garage
+- Garage (default)
+- MinIO
diff --git a/docs/api-gateway-changes-v1.8-to-v2.1.md b/docs/api-gateway-changes-v1.8-to-v2.1.md
new file mode 100644
index 00000000..099dadb0
--- /dev/null
+++ b/docs/api-gateway-changes-v1.8-to-v2.1.md
@@ -0,0 +1,108 @@
+# API Gateway Changes: v1.8 to v2.1
+
+## Summary
+
+The API gateway gained new WebSocket service dispatchers for embeddings
+queries, a new REST streaming endpoint for document content, and underwent
+a significant wire format change from `Value` to `Term`. The "objects"
+service was renamed to "rows".
+
+---
+
+## New WebSocket Service Dispatchers
+
+These are new request/response services available through the WebSocket
+multiplexer at `/api/v1/socket` (flow-scoped):
+
+| Service Key | Description |
+|-------------|-------------|
+| `document-embeddings` | Queries document chunks by text similarity. Request/response uses `DocumentEmbeddingsRequest`/`DocumentEmbeddingsResponse` schemas. |
+| `row-embeddings` | Queries structured data rows by text similarity on indexed fields. Request/response uses `RowEmbeddingsRequest`/`RowEmbeddingsResponse` schemas. |
+
+These join the existing `graph-embeddings` dispatcher (which was already
+present in v1.8 but may have been updated).
+
+### Full list of WebSocket flow service dispatchers (v2.1)
+
+Request/response services (via `/api/v1/flow/{flow}/service/{kind}` or
+WebSocket mux):
+
+- `agent`, `text-completion`, `prompt`, `mcp-tool`
+- `graph-rag`, `document-rag`
+- `embeddings`, `graph-embeddings`, `document-embeddings`
+- `triples`, `rows`, `nlp-query`, `structured-query`, `structured-diag`
+- `row-embeddings`
+
+---
+
+## New REST Endpoint
+
+| Method | Path | Description |
+|--------|------|-------------|
+| `GET` | `/api/v1/document-stream` | Streams document content from the library as raw bytes. Query parameters: `user` (required), `document-id` (required), `chunk-size` (optional, default 1MB). Returns the document content in chunked transfer encoding, decoded from base64 internally. |
+
+---
+
+## Renamed Service: "objects" to "rows"
+
+| v1.8 | v2.1 | Notes |
+|------|------|-------|
+| `objects_query.py` / `ObjectsQueryRequestor` | `rows_query.py` / `RowsQueryRequestor` | Schema changed from `ObjectsQueryRequest`/`ObjectsQueryResponse` to `RowsQueryRequest`/`RowsQueryResponse`. |
+| `objects_import.py` / `ObjectsImport` | `rows_import.py` / `RowsImport` | Import dispatcher for structured data. |
+
+The WebSocket service key changed from `"objects"` to `"rows"`, and the
+import dispatcher key similarly changed from `"objects"` to `"rows"`.
+
+---
+
+## Wire Format Change: Value to Term
+
+The serialization layer (`serialize.py`) was rewritten to use the new `Term`
+type instead of the old `Value` type.
+
+### Old format (v1.8 — `Value`)
+
+```json
+{"v": "http://example.org/entity", "e": true}
+```
+
+- `v`: the value (string)
+- `e`: boolean flag indicating whether the value is a URI
+
+### New format (v2.1 — `Term`)
+
+IRIs:
+```json
+{"t": "i", "i": "http://example.org/entity"}
+```
+
+Literals:
+```json
+{"t": "l", "v": "some text", "d": "datatype-uri", "l": "en"}
+```
+
+Quoted triples (RDF-star):
+```json
+{"t": "r", "r": {"s": {...}, "p": {...}, "o": {...}}}
+```
+
+- `t`: type discriminator — `"i"` (IRI), `"l"` (literal), `"r"` (quoted triple), `"b"` (blank node)
+- Serialization now delegates to `TermTranslator` and `TripleTranslator` from `trustgraph.messaging.translators.primitives`
+
+### Other serialization changes
+
+| Field | v1.8 | v2.1 |
+|-------|------|------|
+| Metadata | `metadata.metadata` (subgraph) | `metadata.root` (simple value) |
+| Graph embeddings entity | `entity.vectors` (plural) | `entity.vector` (singular) |
+| Document embeddings chunk | `chunk.vectors` + `chunk.chunk` (text) | `chunk.vector` + `chunk.chunk_id` (ID reference) |
+
+---
+
+## Breaking Changes
+
+- **`Value` to `Term` wire format**: All clients sending/receiving triples, embeddings, or entity contexts through the gateway must update to the new Term format.
+- **`objects` to `rows` rename**: WebSocket service key and import key changed.
+- **Metadata field change**: `metadata.metadata` (a serialized subgraph) replaced by `metadata.root` (a simple value).
+- **Embeddings field changes**: `vectors` (plural) became `vector` (singular); document embeddings now reference `chunk_id` instead of inline `chunk` text.
+- **New `/api/v1/document-stream` endpoint**: Additive, not breaking.
diff --git a/docs/api.html b/docs/api.html
index 201771ec..7cbddd32 100644
--- a/docs/api.html
+++ b/docs/api.html
@@ -12,413 +12,417 @@
margin: 0;
}
-
-