MCPcopy Index your code
hub / github.com/eng-floe/floecat

github.com/eng-floe/floecat @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
16,173 symbols 96,539 edges 1,284 files 1,069 documented · 7%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Floecat logo

Floecat is a catalog-of-catalogs for modern data lakehouses. It federates metadata harvested from Delta Lake and Iceberg sources, stores a canonical view in append-only blob storage, and exposes the resulting hierarchy over gRPC for discovery, authorization, and query planning.

The repository is purposely modular. Each top-level directory corresponds to an operational component (service runtime, connector packages, storage backends, CLI, etc.). Detailed, component-specific documentation lives under docs/.

Quick Start (Docker + LocalStack)

Baseline requirements for quickstart: Docker Engine + Docker Compose v2.

Run Floecat using published GHCR images (currently :main) and a LocalStack backend:

FLOECAT_SERVICE_IMAGE=ghcr.io/eng-floe/floecat-service:main \
FLOECAT_ICEBERG_REST_IMAGE=ghcr.io/eng-floe/floecat-iceberg-rest:main \
FLOECAT_CLI_IMAGE=ghcr.io/eng-floe/floecat-cli:main \
FLOECAT_PULL_POLICY=always \
FLOECAT_ENV_FILE=./env.localstack \
COMPOSE_PROFILES=localstack \
docker compose -f docker/docker-compose.yml up -d

This starts:

  • ghcr.io/eng-floe/floecat-service:main
  • ghcr.io/eng-floe/floecat-iceberg-rest:main
  • ghcr.io/eng-floe/floecat-cli:main
  • LocalStack (COMPOSE_PROFILES=localstack)

Stop the stack:

FLOECAT_SERVICE_IMAGE=ghcr.io/eng-floe/floecat-service:main \
FLOECAT_ICEBERG_REST_IMAGE=ghcr.io/eng-floe/floecat-iceberg-rest:main \
FLOECAT_CLI_IMAGE=ghcr.io/eng-floe/floecat-cli:main \
FLOECAT_PULL_POLICY=always \
FLOECAT_ENV_FILE=./env.localstack \
COMPOSE_PROFILES=localstack \
docker compose -f docker/docker-compose.yml down --remove-orphans

Use the CLI after the stack is up:

# attach to the running cli container
FLOECAT_SERVICE_IMAGE=ghcr.io/eng-floe/floecat-service:main \
FLOECAT_ICEBERG_REST_IMAGE=ghcr.io/eng-floe/floecat-iceberg-rest:main \
FLOECAT_CLI_IMAGE=ghcr.io/eng-floe/floecat-cli:main \
FLOECAT_PULL_POLICY=always \
FLOECAT_ENV_FILE=./env.localstack \
COMPOSE_PROFILES=localstack \
docker compose -f docker/docker-compose.yml attach cli

# or start a fresh one-off CLI session
FLOECAT_SERVICE_IMAGE=ghcr.io/eng-floe/floecat-service:main \
FLOECAT_ICEBERG_REST_IMAGE=ghcr.io/eng-floe/floecat-iceberg-rest:main \
FLOECAT_CLI_IMAGE=ghcr.io/eng-floe/floecat-cli:main \
FLOECAT_PULL_POLICY=always \
FLOECAT_ENV_FILE=./env.localstack \
COMPOSE_PROFILES=localstack \
docker compose -f docker/docker-compose.yml run --rm --use-aliases cli

In the CLI, set the demo account t-0001 before issuing catalog queries:

floecat> account t-0001
account set: 5eaa9cd5-7d08-3750-9457-cfe800b0b9d2
floecat> catalogs
CATALOG_ID                                CREATED_AT                DISPLAY_NAME              DESCRIPTION
ab5bcc89-fcad-3574-935f-b5249eacf700      2026-02-25T13:29:00.947Z  examples                  Examples catalog
floecat>

Detach without stopping the CLI container:

Ctrl+P, Ctrl+Q

Optional Make shortcuts:

make quickstart-up
make quickstart-down

# override owner/tag
make quickstart-up QUICKSTART_OWNER=<owner> QUICKSTART_TAG=<tag>

DuckDB (host) with LocalStack

From the repository root, start DuckDB with the LocalStack bootstrap script:

duckdb -init tools/duckdb-localstack-init.sql

The init script installs/loads required DuckDB extensions, configures S3 to use LocalStack, and attaches the Floecat Iceberg REST catalog as iceberg_floecat.

Example sanity checks:

SHOW DATABASES;
SELECT COUNT(*) FROM iceberg_floecat.delta.call_center;
INSERT INTO iceberg_floecat.iceberg.barf VALUES (1);

If you launch DuckDB outside the repo root, pass the absolute init script path.

Build, Test, and Run

Contributor requirements: Java 25+, Maven, Make.

make build
make test
make run

Seed data is enabled by default (floecat.seed.enabled=true); the service starts with a demo account, catalogs, namespaces, tables, and snapshots.

Documentation

All additional component docs live under docs/.

Contributing

Contribution workflow, review policy, and contributor expectations are documented in:

All participants are expected to follow:

Extension points exported contracts — how you extend this code

ReconcileExecutor (Interface)
Executes a leased reconcile job. The scheduler owns lease management and terminal state writes. Executors only execu [6 …
reconciler/src/main/java/ai/floedb/floecat/reconciler/impl/ReconcileExecutor.java
ArrowBatchSink (Interface)
Protocol-neutral sink for Arrow batch streaming. Implementations write the schema and batches to a specific wire pro [7 …
core/arrow/src/main/java/ai/floedb/floecat/arrow/ArrowBatchSink.java
GraphNode (Interface)
Base type for every immutable metadata node tracked by the query graph. Nodes mirror the logical catalog objects des [8 …
core/metagraph/src/main/java/ai/floedb/floecat/metagraph/model/GraphNode.java
KvStore (Interface)
Minimal KV surface area for entity storage. This interface is intentionally CAS-only for writes: all puts and delete [12 …
core/storage-spi/src/main/java/ai/floedb/floecat/storage/kv/KvStore.java
Expr (Interface)
Logical expression tree for system scan predicates. [9 implementers]
core/scanner/src/main/java/ai/floedb/floecat/scanner/expr/Expr.java
SystemObjectDef (Interface)
Common contract for all builtin catalog definitions (functions, operators, types, casts, collations, aggregates). Th [9 …
core/catalog/src/main/java/ai/floedb/floecat/systemcatalog/def/SystemObjectDef.java
TelemetryContributor (Interface)
Allows modules to register metric definitions into the shared TelemetryRegistry. [8 implementers]
telemetry-hub/core/src/main/java/ai/floedb/floecat/telemetry/TelemetryContributor.java
ProfilingCaptureStarter (Interface)
Allows callers to request a profiling capture with optional policy details. [6 implementers]
telemetry-hub/integration-profiling/src/main/java/ai/floedb/floecat/telemetry/profiling/ProfilingCaptureStarter.java

Core symbols most depended-on inside this repo

of
called by 8531
core/scanner/src/main/java/ai/floedb/floecat/scanner/spi/MetadataResolutionContext.java
build
called by 3826
service/src/main/java/ai/floedb/floecat/service/error/impl/GrpcErrors.java
isEmpty
called by 1992
core/storage-spi/src/main/java/ai/floedb/floecat/storage/kv/KvStore.java
get
called by 1802
core/storage-spi/src/main/java/ai/floedb/floecat/storage/kv/KvStore.java
get
called by 1553
service/src/main/java/ai/floedb/floecat/service/query/QueryContextStore.java
getId
called by 1237
telemetry-hub/integration-profiling/src/main/java/ai/floedb/floecat/telemetry/profiling/CaptureMetadata.java
add
called by 1168
telemetry-hub/core/src/main/java/ai/floedb/floecat/telemetry/PhaseDiagnostics.java
size
called by 1133
service/src/main/java/ai/floedb/floecat/service/query/QueryContextStore.java

Shape

Method 14,009
Class 1,912
Interface 158
Enum 71
Function 23

Languages

Java100%
TypeScript1%

Modules by API surface

service/src/main/java/ai/floedb/floecat/service/repo/model/Keys.java161 symbols
reconciler/src/test/java/ai/floedb/floecat/reconciler/impl/ReconcilerServiceTest.java158 symbols
service/src/main/java/ai/floedb/floecat/service/reconciler/jobs/DurableReconcileJobStore.java142 symbols
protocol-gateway/iceberg-rest/src/main/java/ai/floedb/floecat/gateway/iceberg/rest/services/compat/DeltaManifestMaterializer.java125 symbols
service/src/test/java/ai/floedb/floecat/service/reconciler/jobs/DurableReconcileJobStoreTest.java116 symbols
service/src/main/java/ai/floedb/floecat/service/query/catalog/UserObjectBundleService.java105 symbols
service/src/test/java/ai/floedb/floecat/service/it/ConnectorIT.java92 symbols
protocol-gateway/iceberg-rest/src/it/java/ai/floedb/floecat/gateway/iceberg/rest/IcebergRestFixtureIT.java91 symbols
reconciler/src/main/java/ai/floedb/floecat/reconciler/impl/GrpcReconcilerBackend.java88 symbols
service/src/main/java/ai/floedb/floecat/service/query/catalog/PlannerStatsBundleService.java83 symbols
flight/src/main/java/ai/floedb/floecat/flight/SystemTableFlightProducerBase.java82 symbols
reconciler/src/main/java/ai/floedb/floecat/reconciler/impl/GrpcRemoteReconcileExecutorClient.java80 symbols

Datastores touched

POLARISDatabase · 1 repos

For agents

$ claude mcp add floecat \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact