Python & TypeScript SDKs
Building · Q3 2026, GA end of quarter

Typed, idiomatic, auto-generated.

Python and TypeScript SDKs. Every endpoint, every type, every example. Generated from the same OpenAPI spec that drives the API — so the SDK is never behind. Promoted to GA this quarter.

Install
One line. Both languages.

Publish target: PyPI and npm. Zero peer-dependency footprint, strict types, tree-shakeable on the TS side.

Python
pip install remlabs
TypeScript
npm install @remlabs/sdk
# private beta -- request access in Discord
Quick start
Four calls. Same shape in both languages.

Remember, ask, dream, graph — the building blocks of the REM continuity layer. Sign in to auto-inject your API key into the snippets.

1 · Remember
Python
from remlabs import REM

rem = REM(api_key="sk_live_…")

mem = rem.remember(
    text="Shipped Dream Engine v2 on April 1.",
    namespace="engineering",
    tags=["release", "dream-engine"],
)
print(mem.id, mem.confidence)
TypeScript
import { REM } from "@remlabs/sdk";

const rem = new REM({ apiKey: "sk_live_…" });

const mem = await rem.remember({
  text: "Shipped Dream Engine v2 on April 1.",
  namespace: "engineering",
  tags: ["release", "dream-engine"],
});
console.log(mem.id, mem.confidence);
2 · Ask
Python
answer = rem.ask(
    "What did we ship in April?",
    namespace="engineering",
)
print(answer.text)
for cite in answer.citations:
    print(cite.id, cite.score)
TypeScript
const answer = await rem.ask({
  query: "What did we ship in April?",
  namespace: "engineering",
});
console.log(answer.text);
for (const cite of answer.citations) {
  console.log(cite.id, cite.score);
}
3 · Dream
Python
run = rem.dream(
    strategy="contradiction",
    namespace="engineering",
)
print(run.status, run.insights_found)
for ins in run.insights:
    print(ins.summary)
TypeScript
const run = await rem.dream({
  strategy: "contradiction",
  namespace: "engineering",
});
console.log(run.status, run.insightsFound);
for (const ins of run.insights) {
  console.log(ins.summary);
}
4 · Graph
Python
graph = rem.graph.query(
    entity="Dream Engine",
    depth=2,
)
for edge in graph.edges:
    print(edge.source, edge.relation, edge.target)
TypeScript
const graph = await rem.graph.query({
  entity: "Dream Engine",
  depth: 2,
});
for (const edge of graph.edges) {
  console.log(edge.source, edge.relation, edge.target);
}
Feature parity
Every endpoint. Both languages.

Generated from the OpenAPI spec every release. If it lands in the API, it lands in both SDKs in the same cut.

Endpoint Python TypeScript
rem.remember() Write memories with metadata, tags, and source.
rem.recall() Hybrid retrieval with ranking, filters, and confidence scores.
rem.forget() Tombstoned deletion by id, tag, or filter. Reversible for 30 days.
rem.ask() Natural-language Q&A with typed citations and streaming.
rem.dream() Run any of nine Dream Engine strategies over a namespace.
rem.graph.query() Traverse entities and relations with depth and filter controls.
rem.channels.subscribe() Live WebSocket stream for memory events, reactively typed.
rem.webhooks.send() HMAC-signed outbound events, with retry and idempotency keys.
rem.namespaces.create() Multi-tenant scopes with RBAC and per-scope configuration.
rem.federate() A2A-protocol handoff of scoped memory to another REM node.
Generated from our OpenAPI spec at /.well-known/openapi.yaml
Commitment

This page flips from Building to Shipped the day both SDKs hit GA on PyPI and npm — no vaporware, no private-beta forever. Track progress on the roadmap, see changes in the changelog, or grab the source on GitHub.