Thanks for your interest in contributing to Memoryport! This document covers the basics of how to build, test, and submit changes.
- Rust stable (1.91+)
protoc(Protocol Buffers compiler) —brew install protobufon macOS- Node.js 18+ and pnpm (for the UI)
- Ollama (optional, for local embeddings)
# Clone the repo
git clone https://github.com/t8/memoryport.git
cd memoryport
# Build everything
cargo build
# Run tests
cargo test --workspace
# Build + run the UI
cd ui && pnpm install && pnpm devUse the dev script to manage all services:
./dev.sh start # Build and start server, proxy, UI
./dev.sh stop # Stop all services
./dev.sh restart # Rebuild and restart everything
./dev.sh status # Show what's running
./dev.sh logs proxy # Tail proxy logsSee CLAUDE.md for detailed architecture notes, conventions, and technical decisions.
The workspace has 9 crates:
| Crate | Purpose |
|---|---|
uc-arweave |
Arweave client (JWK wallet, ANS-104, Turbo uploads) |
uc-embeddings |
Embedding + LLM providers (OpenAI, Ollama) |
uc-core |
Core engine: chunker, indexer, retriever, writer, gating |
uc-cli |
CLI binary with setup wizard |
uc-mcp |
MCP server for Claude Code / Cursor |
uc-proxy |
Multi-protocol API proxy (Anthropic, OpenAI, Ollama) |
uc-server |
Multi-tenant HTTP API server |
uc-tauri |
Tauri desktop app |
Frontend: ui/ — React 19 + Vite + Tailwind.
- Errors:
thiserrorderive macros, one error enum per module - Async:
tokioeverywhere - Logging:
tracingcrate (neverprintln!oreprintln!in library/server code) - Config: TOML files parsed with
serde+toml - Tests: unit tests in
#[cfg(test)]modules, integration tests intests/
- Fork the repo and create a branch from
main - Make your changes
- Run
cargo test --workspaceandcargo clippy --workspace - Submit a pull request against
main
Keep PRs focused — one feature or fix per PR. Include a clear description of what changed and why.
File issues at github.com/t8/memoryport/issues. Include:
- What you expected to happen
- What actually happened
- Steps to reproduce
- Your OS and Rust version (
rustc --version)
By contributing, you agree that your contributions will be licensed under the Apache-2.0 License.