Monorepo approach All SDKs and extensions live in a single repository with CI/CD that builds and publishes to each platform's package registry. One repo, one set of tests, one release cycle.

Client SDKs

Official client libraries for connecting to Loka from any language. Each SDK provides:

LanguagePackage NameRegistryInstallStatus
Python loka PyPI pip install loka Published
TypeScript / JavaScript loka npm npm install loka Published
Rust loka crates.io cargo add loka Planned
Java dev.loka:loka-java Maven Central Maven/Gradle dependency Planned
C# / .NET Loka.Client NuGet dotnet add package Loka.Client Planned
Go loka pkg.go.dev go get github.com/EmmaLeonhart/Loka/sdks/go Planned

SDK Usage Pattern

All SDKs follow the same pattern regardless of language:

Python

from loka import LokaClient

db = LokaClient("http://localhost:3030")

# Insert triples
db.insert_triples("""
  :Alice :knows :Bob .
  :Bob :knows :Carol .
""")

# Declare vector predicate
db.declare_vector("ex:embedding", 1024)

# Insert vector
db.insert_vector("ex:embedding",
  "ex:Alice", [0.1, 0.2, ...])

# Query with VECTOR_SIMILAR
results = db.sparql("""
  SELECT ?person WHERE {
    VECTOR_SIMILAR(?person ex:embedding
      "0.1 0.2 ..."^^loka:f32vec, 0.8)
  }
""")

TypeScript

import { LokaClient } from "loka";

const db = new LokaClient('http://localhost:3030');

// Insert triples
await db.insertTriples(`
  :Alice :knows :Bob .
  :Bob :knows :Carol .
`);

// Declare vector predicate
await db.declareVector('ex:embedding', 1024);

// Insert vector
await db.insertVector('ex:embedding',
  'ex:Alice', [0.1, 0.2, ...]);

// Query with VECTOR_SIMILAR
const results = await db.sparql(`
  SELECT ?person WHERE {
    VECTOR_SIMILAR(?person ex:embedding
      "0.1 0.2 ..."^^loka:f32vec, 0.8)
  }
`);

Extensions & Integrations

ExtensionDescriptionStatus
Protégé Plugin Connect the Protégé OWL ontology editor to Loka. Author ontologies visually, query the live database, browse inferred triples. Since Loka supports OWL reasoning (planned), Protégé becomes a natural companion for schema design. Planned
Docker Image Official Docker image on Docker Hub. docker run loka/loka --port 3030 for instant deployment. Complete
Jupyter Integration Python magics for SPARQL queries in Jupyter notebooks. %%sparql cell magic, inline result rendering, vector visualization. Complete
LangChain / LlamaIndex Loka as a vector store + knowledge graph for RAG pipelines. Combined retrieval: semantic similarity + graph context in one call. Complete

Monorepo Structure

All SDKs and extensions are developed in a single monorepo with shared CI:

Loka/
  sdks/
    python/         # loka (PyPI)
    typescript/     # loka (npm)
    rust/           # loka (crates.io)
    java/           # dev.loka:loka-java (Maven Central)
    dotnet/         # Loka.Client (NuGet)
    go/             # github.com/EmmaLeonhart/Loka/sdks/go
  extensions/
    protege/        # Protégé plugin (Java)
    jupyter/        # Jupyter magics (Python)
    langchain/      # LangChain integration (Python)
    docker/         # Dockerfile + Docker Hub CI
  .github/
    workflows/
      publish-pypi.yml
      publish-npm.yml
      publish-crates.yml
      publish-nuget.yml
      publish-maven.yml
      publish-docker.yml

GitHub Actions automatically builds and publishes each SDK when a release tag is pushed. All SDKs share the same version number and are released together.

Contributing

SDKs are thin HTTP clients — they wrap the REST API (/sparql, /triples, /vectors). Adding a new language SDK is straightforward:

  1. Implement the HTTP client (GET/POST to the Loka endpoints)
  2. Add SPARQL result parsing (JSON format)
  3. Add type-safe wrappers for vector operations
  4. Write tests against a running Loka instance
  5. Add a CI workflow for the language's package registry

All SDKs test against the same Loka binary, ensuring consistency across languages.