Integration
Migration
April 13, 2026
Migrate from Weaviate to REM Labs
Weaviate gives you vector search with GraphQL. REM Labs gives you AI memory -- vector search plus full-text retrieval, entity graphs, temporal decay, and neural reranking. This guide covers exporting your Weaviate collections and importing them into REM Labs.
What You Gain
- No schema management -- REM handles indexing automatically; no class definitions needed
- Multi-signal fusion -- vector + FTS5 + entity graph retrieval in a single query
- Memory semantics -- temporal decay, consolidation, namespaces, and Dream Engine
- Simpler API --
remember() and recall() instead of GraphQL mutations
Step 1: Export from Weaviate
Use the Weaviate client to export all objects from a collection:
import weaviate from "weaviate-client";
import fs from "fs";
const client = await weaviate.connectToLocal();
const collection = client.collections.get("Document");
const exported = [];
for await (const item of collection.iterator()) {
exported.push({
id: item.uuid,
properties: item.properties,
text: item.properties.content || item.properties.text || ""
});
}
fs.writeFileSync("weaviate-export.json", JSON.stringify(exported, null, 2));
console.log(`Exported ${exported.length} objects`);
Step 2: Import into REM Labs
import { RemClient } from "@remlabs/sdk";
import fs from "fs";
const rem = new RemClient({ apiKey: process.env.REMLABS_API_KEY });
const data = JSON.parse(fs.readFileSync("weaviate-export.json", "utf-8"));
let count = 0;
for (const obj of data) {
if (!obj.text) continue;
await rem.remember({
content: obj.text,
namespace: "weaviate-import",
metadata: {
weaviate_id: obj.id,
...obj.properties
},
tags: obj.properties.category ? [obj.properties.category] : []
});
count++;
if (count % 50 === 0) console.log(`${count}/${data.length}`);
}
console.log(`Imported ${count} memories`);
Step 3: Replace Query Code
Weaviate queries use GraphQL with nearText or hybrid operators. REM uses a single recall method that runs all retrieval strategies automatically:
// Before (Weaviate GraphQL)
const result = await client.graphql.get()
.withClassName("Document")
.withNearText({ concepts: ["refund policy"] })
.withLimit(5)
.withFields("content category _additional { distance }")
.do();
// After (REM Labs)
const results = await rem.recall({
query: "refund policy",
namespace: "weaviate-import",
limit: 5
});
// Results include content, score, metadata, and tags
results.forEach(m => console.log(m.score, m.content.slice(0, 80)));
Step 4: Verify Results
Run side-by-side comparisons on your most common queries to confirm REM returns equivalent or better results:
const testQueries = [
"How do I reset my password?",
"What are the pricing tiers?",
"When was the last API outage?"
];
for (const q of testQueries) {
const results = await rem.recall({ query: q, limit: 3 });
console.log(`\nQuery: "${q}"`);
results.forEach((m, i) => {
console.log(` ${i + 1}. [${m.score.toFixed(3)}] ${m.content.slice(0, 60)}...`);
});
}
Hybrid search built in: Unlike Weaviate where you must choose between nearText, BM25, or hybrid mode per query, REM Labs always runs multi-signal fusion. Every recall query gets vector + full-text + entity graph retrieval automatically.
Upgrade from vector search to AI memory
Free tier. No GraphQL. Multi-signal fusion on every query.
Get Started