Skip to content

Moss client library for JavaScript

@inferedge/moss enables private, on-device semantic search in your web, mobile, and edge applications — without cloud dependencies.

Built for developers who want instant, memory-efficient, privacy-first AI features inside their apps.


Features

  • On-device vector search — Sub-millisecond retrieval with zero network latency
  • Semantic search and hybrid search — Beyond keyword matching
  • Multi-index support — Manage multiple isolated search spaces
  • Tiny SDK — Optimized for edge deployments
  • Privacy-first by design — No server-side cloud calls required to perform searches

Installation

bash
npm install @inferedge/moss

Quick start

typescript
import { MossClient, DocumentInfo } from "@inferedge/moss";

async function main() {
  // Initialize search client with project credentials
  const mossClient = new MossClient(
    "your-project-id",
    "your-project-key"
  );

  // Prepare documents to index
  const documents: DocumentInfo[] = [
    {
      id: "doc1",
      text: "How do I track my order? You can track your order by logging into your account.",
    },
    {
      id: "doc2",
      text: "What is your return policy? We offer a 30-day return policy for most items.",
    },
    {
      id: "doc3",
      text: "How can I change my shipping address? Contact our customer service team.",
    },
  ];

  // Create an index with documents
  const indexName = "faqs";
  const created = await mossClient.createIndex(indexName, documents);
  // Defaults to moss-minilm when model is omitted
  console.log("Index created:", created);

  // Load the index before searching
  await mossClient.loadIndex(indexName);

  // Search the index
  const result = await mossClient.query(
    indexName,
    "How do I return a damaged product?",
    { topK: 3 }
  );

  // Display results
  console.log(`Query: ${result.query}`);
  result.docs.forEach((match) => {
    console.log(`Score: ${match.score.toFixed(4)}`);
    console.log(`ID: ${match.id}`);
    console.log(`Text: ${match.text}`);
    console.log("---");
  });
}

main().catch(console.error);

Example use cases

  • Smart knowledge base search
  • Realtime voice AI agents
  • Personal note-taking search
  • Private in-app AI features (recommendations, retrieval)
  • Local semantic search in edge devices, AR/VR, mobile apps

Providing custom embeddings

Already using your own embedding model? Supply vectors directly when managing indexes:

typescript
const documents = [
  {
    id: "doc-1",
    text: "Attach a caller-provided embedding",
    embedding: myEmbeddingModel("doc-1"),
  },
  {
    id: "doc-2",
    text: "Fallback to the built-in model when the field is omitted.",
  },
];

await mossClient.createIndex("custom-embeddings", documents);

await mossClient.loadIndex("custom-embeddings");

const results = await mossClient.query("custom-embeddings", "", {
  embedding: myEmbeddingModel("query"),
  topK: 10,
});

Leaving modelId undefined defaults to moss-minilm. You can still pass { modelId: "moss-mediumlm" } or another supported identifier if you want the service to generate embeddings for documents without the optional embedding field.


License

This package is licensed under the PolyForm Shield License 1.0.0.

  • Free for testing, evaluation, internal use, and modifications.
  • Not permitted for production or competing commercial use.
  • For commercial licenses, contact: contact@moss.dev

Contact

For support, commercial licensing, or partnership inquiries: contact@moss.dev