A self-hosted note and knowledge base for development teams
Cartographer helps teams organize, discover, and share notes, links, operational context, and structured data about their environments, applications, and infrastructure. It is built for fast filtering across large collections, with a human-friendly web UI and API access for automation.
Cartographer is a work in progress and should not be considered stable at this point.
Cartographer delivers rapid, searchable access to markdown notes and URL-backed resources through a web interface. Links are treated as notes with an optional URL, so the same search, tags, metadata, and rendering behavior applies to both.
- Note-first model with markdown bodies, optional URLs, tags, metadata, and structured data.
- Fast search across note titles, bodies, URLs, tags, and structured data.
- Namespace tabs for separating collections of notes.
- Live note creation and editing from the web UI.
- Reusable markdown templates managed from the admin panel.
- Standalone note pages at
/note?id=<note-id>&namespace=<namespace>for sharing one exact note. - REST API under
/v1/and Swagger documentation at/docs/. - Optional MCP server for agent access to a live Cartographer instance.
- Single Go binary with a built-in web UI and backend.
To get a feel for Cartographer, the easiest way is to use Docker Compose. See the Docker Compose section below for detailed instructions.
| Type | Description | Example |
|---|---|---|
| Note | Markdown content with optional URL, tags, metadata, and structured data | An incident note, runbook entry, or URL-backed resource |
| Link | A note with a URL | https://staging.myapp.com with tags [staging, frontend, api] |
| Tag | A label used to organize related notes | monitoring, staging, documentation |
| Namespace | A collection boundary for notes | default, platform, production |
| Template | Reusable markdown inserted into new notes | Incident review, meeting notes, deploy checklist |
Cartographer reads YAML config files from example/ or another supplied config path. Notes can be configured directly:
apiVersion: v1beta
namespace: default
notes:
- id: deploy-checklist
title: Deploy checklist
body: |-
## Deploy checklist
- Check dashboards
- Watch logs
tags: ["deploy", "runbook"]
source: "config"
author: "platform"Legacy links: entries are still supported and are normalized into notes.
The admin panel is used for operational controls such as markdown templates and namespace deletion. Admin actions require a token.
Configure the token in YAML:
cartographer:
web:
auth:
adminToken: "change-me"Or use an environment variable:
CARTOGRAPHER_ADMIN_TOKEN="change-me" ./cartographer serve -c exampleA Helm chart is provided for easy Kubernetes deployment.
Requirements:
- Persistent volume for data storage (if adding links outside of GitOps flow)
- Ingress controller for external access
The easiest way to get started with Cartographer is using Docker Compose:
-
Start Cartographer:
docker-compose up -d
-
Access the application:
- Web UI: http://localhost:8081
-
Stop the application:
docker-compose down
Configuration:
- The example configuration is automatically mounted from
./example/directory - To use your own config, replace the volume mount in
docker-compose.yml
Ports:
8081- Web interface (main access point)8080- gRPC API server
Cartographer exposes a REST API under /v1/ for programmatic access. Interactive API documentation is available via Swagger UI at /docs/.
Swagger Documentation: http://localhost:8081/docs/
Common endpoints:
GET /v1/get- query notes by namespace, tag, term, or exact IDPOST /v1/notes- create or update a live noteGET /v1/get/namespaces- list namespacesGET /v1/admin/templates- list reusable markdown templatesPOST /v1/admin/templates- create or update templates, admin only
Standalone note pages are available at:
/note?id=<note-id>&namespace=<namespace>
Cartographer includes an MCP server command for agent access to a live Cartographer instance:
./cartographer mcp --address 127.0.0.1 --port 8080The MCP server can list namespaces, search notes, fetch exact notes, and add notes.
See the TaskFile for development setup and required tools.
Quick Start:
task serve
# or
./cartographer serve -c example
