Weaviate

Lightweight, dependency-free, in-memory Weaviate REST + GraphQL fake for testing code that uses the real weaviate-client / weaviate-ts-client SDK. Stores vectors in memory and performs a real cosine nearest-neighbor search.

Default port: 4859

Quick start

import { WeaviateServer } from "./services/weaviate/src/server.js";

const server = new WeaviateServer(4859);
await server.start();
// ... run your app/tests ...
await server.stop();

REST usage:

// Create a class
await fetch("http://127.0.0.1:4859/v1/schema", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ class: "Article", vectorizer: "none" }),
});

// Add an object with a vector
await fetch("http://127.0.0.1:4859/v1/objects", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ class: "Article", properties: { title: "hi" }, vector: [1, 0, 0] }),
});

// nearVector search via GraphQL
await fetch("http://127.0.0.1:4859/v1/graphql", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    query: `{ Get { Article(nearVector: { vector: [0.9, 0.1, 0] }, limit: 3) { title _additional { id distance certainty } } } }`,
  }),
});

Access via MCP / preview URL

Implemented operations

Service & inspection operations (parlel extensions)

Surface coverage

This emulator faithfully replicates the API surface most application code and agents exercise. Anything below the supported lines is either an intentional design choice for a fast, zero-cost local emulator (✓ By design) or a candidate for a future release (⟳ Roadmap) — never a silent inaccuracy.

Legend: ✅ fully supported · ◐ accepted (stored, not strictly enforced) · ✓ by design · ⟳ on the roadmap.

FeatureStatus
Schema CRUD (class create/list/get/delete)✅ Supported
Object CRUD with explicit vectors✅ Supported
GraphQL Get + nearVector cosine NN search✅ Supported (real cosine)
_additional { id distance certainty }✅ Supported
Module-based vectorization (text2vec)⟳ Roadmap — supply explicit vectors
nearVector similarity search (cosine)✅ Supported
bm25 keyword search (term-frequency ranking, properties scope, _additional { score })✅ Supported
where filters (Equal/NotEqual/GreaterThan(Equal)/LessThan(Equal)/Like, And/Or operands)✅ Supported
nearText / nearObject / hybrid✓ By design — require a vectorizer module; supply explicit vectors with nearVector instead
Aggregation (Aggregate {})⟳ Roadmap
Cross-references / multi-tenancy⟳ Roadmap
Auth / RBAC◐ Anonymous; any bearer accepted

Error codes & shapes

REST errors use { "error": [{ "message": "..." }] }. GraphQL errors use { "data": null, "errors": [{ "message": "..." }] }.

StatusWhen
422missing class name
404unknown class / object / endpoint
400invalid JSON body

Manifest

See services/weaviate/manifest.json:

<!-- parlel:testenv:start -->

Configuration — test.env

Copy these into your test.env (used by the bridge sidecar flow). Tokens are Parlel's seeded test credentials — any non-empty value is accepted by the emulator, so you rarely need to change them. Swap in real credentials only when pointing at the live service in prod.env.

WEAVIATE_API_KEY=parlel_weaviate
WEAVIATE_BASE_URL=http://parlel-bridge:4859
<!-- parlel:testenv:end -->