selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

Marmot logo

Self-host Marmot

v0.11.1

Open-source data catalog with an MCP server for AI agents

BetaOpen CoreMIT
curl -fsSL get.marmotdata.io | sh
Updated5 days ago
LanguageGo
Setup difficultyEasy
ThemeDark mode
Stars
627
Ports
8080 (Marmot HTTP server (UI, REST API, MCP)), 9090 (Prometheus metrics server at /metrics when metrics.enabled is true)
Requires
PostgreSQL
Docker
ghcr.io/marmotdata/marmot
Data Product details screen in the dark themeFull notifications page with filters (dark theme)

What is Marmot?

Should you self-host Marmot?

Marmot scores 50/100 on selfhost.directory (how scoring works) and ranks #9 of 10 in Data Management. It has 627 GitHub stars.

It shipped 2 stable releases in the past year. The latest, v0.11.1, came out on 11 October 2026. New versions land roughly every 3 weeks.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is MIT-licensed and written mostly in Go.

Its closest alternative on selfhost.directory is OpenBB (87/100, 74 832 stars). It scores higher overall, so compare the two before you pick. See Marmot vs OpenBB side by side.

Features

  • Asset rules
  • Built-in MCP server for AI agents
  • CLI
  • Data products
  • Full-text and structured search
  • Infrastructure-as-code management
  • Interactive data lineage
  • Metadata catalog for any asset type
  • Notifications and Webhooks
  • Ownership and team collaboration
  • Plugin-based metadata ingestion
  • REST API
  • SDKs for Python, Go and TypeScript
  • SSO with multiple OAuth/OIDC providers

Marmot README

How to install Marmot

Install Marmot with Docker

Environment variables
MARMOT_SERVER_ENCRYPTION_KEY, MARMOT_DATABASE_HOST, MARMOT_DATABASE_PORT, MARMOT_DATABASE_USER, MARMOT_DATABASE_PASSWORD, MARMOT_DATABASE_NAME, MARMOT_DATABASE_SSLMODE
docker run -d \
  --name marmot \
  -p 8080:8080 \
  -e MARMOT_SERVER_ENCRYPTION_KEY=<your-generated-key> \
  -e MARMOT_DATABASE_HOST=<your-postgres-host> \
  -e MARMOT_DATABASE_PORT=5432 \
  -e MARMOT_DATABASE_USER=<your-postgres-user> \
  -e MARMOT_DATABASE_PASSWORD=<your-postgres-password> \
  -e MARMOT_DATABASE_NAME=<your-postgres-database> \
  -e MARMOT_DATABASE_SSLMODE=disable \
  ghcr.io/marmotdata/marmot:latest

Deploy Marmot using Docker containers with your own PostgreSQL database.

How to configure Marmot

  • auth.anonymous.enabledfalseAllow browsing without logging in

    Allow browsing without logging in

  • auth.anonymous.roleuserRole assigned to anonymous users

    Role assigned to anonymous users

  • auth.dcr.allowed_redirect_hostsHosts allowed in https redirect URIs for dynamically registered OAuth clients; empty keeps registration loopback-only

    Hosts allowed in https redirect URIs for dynamically registered OAuth clients; empty keeps registration loopback-only

  • database.conn_lifetime5Connection lifetime in minutes

    Connection lifetime in minutes

  • database.hostlocalhostPostgreSQL host

    PostgreSQL host

  • database.idle_conns25Minimum idle connections

    Minimum idle connections

  • database.max_conns50Maximum open connections

    Maximum open connections

  • database.namemarmotDatabase name

    Database name

  • database.passwordpostgresDatabase password

    Database password

  • database.port5432PostgreSQL port

    PostgreSQL port

  • database.sslmodedisableSSL mode (disable, require, verify-full)

    SSL mode (disable, require, verify-full)

  • database.userpostgresDatabase username

    Database username

  • experimental.table_previewfalseShow sample rows on asset detail pages

    Show sample rows on asset detail pages

  • logging.formatjsonOutput format (json, console)

    Output format (json, console)

  • logging.levelinfoLog level (trace, debug, info, warn, error, fatal, panic)

    Log level (trace, debug, info, warn, error, fatal, panic)

  • metrics.enabledfalseServe Prometheus metrics on a separate port at /metrics

    Serve Prometheus metrics on a separate port at /metrics

  • metrics.owner_metadata_fieldsowner, ownedBy, owningTeamMetadata fields used to attribute asset ownership in catalog metrics

    Metadata fields used to attribute asset ownership in catalog metrics

  • metrics.port9090Port for the metrics server

    Port for the metrics server

  • metrics.schemas.excluded_asset_typesServiceAsset types excluded from schema coverage metrics

    Asset types excluded from schema coverage metrics

  • metrics.schemas.excluded_providersProviders excluded from schema coverage metrics

    Providers excluded from schema coverage metrics

  • openlineage.auth.enabledtrueRequire authentication for the OpenLineage endpoint

    Require authentication for the OpenLineage endpoint

  • operator.enabledfalseSynchronise scheduled pipelines with the Marmot operator

    Synchronise scheduled pipelines with the Marmot operator

  • operator.namespaceNamespace the operator manages pipeline resources in

    Namespace the operator manages pipeline resources in

  • operator.service_accountmarmot-ingestService account used for pipeline resources

    Service account used for pipeline resources

  • pipelines.claim_expiry30Seconds before an unstarted run claim expires

    Seconds before an unstarted run claim expires

  • pipelines.lease_expiry300Seconds before an abandoned run lease is reclaimed

    Seconds before an abandoned run lease is reclaimed

  • pipelines.max_workers10Maximum concurrent pipeline runs processed by this instance

    Maximum concurrent pipeline runs processed by this instance

  • pipelines.scheduler_interval60Seconds between scheduler checks for due pipeline runs

    Seconds between scheduler checks for due pipeline runs

  • plugins.autoinstalltruePull missing core plugins from the registry at startup

    Pull missing core plugins from the registry at startup

  • plugins.registryOCI registry namespace to install core plugins from, e.g. an internal mirror

    OCI registry namespace to install core plugins from, e.g. an internal mirror

  • rate_limit.enabledfalseEnable in-memory API rate limiting

    Enable in-memory API rate limiting

  • search.timeout10Search query timeout in seconds

    Search query timeout in seconds

  • server.allow_unencryptedfalseAllow running without an encryption key, storing credentials unencrypted

    Allow running without an encryption key, storing credentials unencrypted

  • server.custom_response_headersExtra HTTP headers added to every response (config file only)

    Extra HTTP headers added to every response (config file only)

  • server.encryption_keyKey used to encrypt stored credentials at rest, generate one with marmot generate-encryption-key

    Key used to encrypt stored credentials at rest, generate one with marmot generate-encryption-key

  • server.host0.0.0.0Bind address

    Bind address

  • server.port8080HTTP port

    HTTP port

  • server.root_urlPublic URL of this Marmot instance

    Public URL of this Marmot instance

  • server.tls.ca_cert_pathPath to CA cert for client verification (mTLS)

    Path to CA cert for client verification (mTLS)

  • server.tls.cert_pathPath to server TLS certificate

    Path to server TLS certificate

  • server.tls.key_pathPath to server TLS private key

    Path to server TLS private key

  • telemetry.enabledtrueSend anonymous usage telemetry

    Send anonymous usage telemetry

  • telemetry.endpointhttps://telemetry.marmotdata.io/v1/ingestTelemetry ingest endpoint

    Telemetry ingest endpoint

  • telemetry.interval86400Seconds between telemetry reports

    Seconds between telemetry reports

  • ui.banner.dismissibletrueAllow users to dismiss the banner

    Allow users to dismiss the banner

  • ui.banner.enabledfalseShow the banner

    Show the banner

  • ui.banner.idbanner-1Identifier used to remember dismissals

    Identifier used to remember dismissals

  • ui.banner.messageBanner text

    Banner text

  • ui.banner.variantinfoStyle (info, warning, error, success)

    Style (info, warning, error, success)

  • ui.default_languageLanguage tag for visitors with no preference, empty detects the browser

    Language tag for visitors with no preference, empty detects the browser

Marmot releases & version history

FAQ

Where Can I Get Help?

In the documentation, on the Discord community server, or through GitHub Issues.

How Can I Contribute?

By reporting bugs or suggesting features in GitHub Issues, improving documentation, or building new plugins for additional data sources.

Is Marmot Free?

Yes — it is MIT-licensed open source, and self-hosting carries no licensing cost.

What Data Sources Can I Catalog?

Many asset types via the plugin system: tables, topics, queues, APIs and dashboards.

How Does Marmot Integrate with AI Agents?

Through its built-in MCP (Model Context Protocol) server, so AI agents can query real metadata, trace lineage and base decisions on actual catalog data.

What is Marmot?

An open-source data catalog that indexes every data asset (tables, topics, queues, APIs), enriches it with context and exposes it to both people and AI tools, shipped as a single binary with a UI.

More in Data Management

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…