The Problem
Organizations need a self‑service analytics layer that lets non‑technical users explore data while giving developers the ability to embed charts, run complex SQL, and extend the platform. Managing separate BI tools, custom dashboards, and ad‑hoc query pipelines creates operational overhead and inconsistent governance.
What This Does
The repository is a fork of Metabase, an open‑source BI and embedded‑analytics server written primarily in Clojure with a React/TypeScript frontend. Core server code lives under src/ (not listed but implied by the Clojure linter files) and is exercised by the extensive test suite in .clj-kondo/test/ and the 58 test files detected.
The Dockerfile in .devcontainer/Dockerfile builds a development container that installs the Clojure toolchain, Node, and all runtime dependencies. CI pipelines are defined in .github/workflows/ (e.g., backend.yml, e2e-download-uberjar.yml), which compile the Clojure code, run unit tests, and produce an Uberjar for deployment. Configuration examples are provided in .env.example, and the project ships a ready‑to‑run Docker image (metabase/metabase) referenced in the README badges.
How To Use It
Clone the fork git clone https://github.com/<your‑org>/metabase.git cd metabase Build the Docker image (the devcontainer Dockerfile works for local builds) docker build -f .devcontainer/Dockerfile -t metabase-fork:latest . Create a runtime environment file cp .env.example .env Edit .env to set at least: MBDBFILE=/metabase-data/metabase.db MBJETTYHOST=0.0.0.0 MBJETTYPORT=3000 Run the container docker run -d \ -p 3000:3000 \ --env-file .env \ -v $(pwd)/metabase-data:/metabase-data \ metabase-fork:latest
The official README points to the same Docker workflow; the repo does not contain a custom docker-compose.yml, so the docker run command is the only documented entry point.*
Real‑World Use
A SaaS product can embed Metabase dashboards by configuring the Embedding API (see docs/embedding/introduction.md in the upstream repo). After the container is running, the product calls POST /api/session to obtain a JWT, then loads a signed embed URL in an iframe. The same instance can serve internal users via the web UI at http://localhost:3000.
Example: create an embed token (requires Metabase admin API key) curl -X POST http://localhost:3000/api/session \ -H "Content-Type: application/json" \ -d '{"username":"admin@company.com","password":"<pwd>"}'
Code Health & Issues
Medium – Missing LICENSE – No LICENSE file; downstream users lack clear redistribution rights. Low – Large Clojure codebase without explicit project.clj in the view – Build relies on hidden Leiningen/CLI config; newcomers may struggle to locate the entry point. Low – Secrets in CI – .github/workflows/ reference actions that may require tokens; no .env sample for production secrets, only a placeholder .env.example. Low – Test coverage – 58 test files and CI workflows (backend-cloverage.yml) suggest good coverage, but no coverage badge in the fork’s README. Low – Dockerfile only for devcontainer – No production‑oriented Dockerfile; the devcontainer image is repurposed for runtime builds, which may include unnecessary dev tools.
Overall the repository shows a mature CI pipeline, extensive linting (.clj-kondo/), and a clear Docker entry point, but the missing license and lack of production Dockerfile are the primary concerns.
The Bottom Line
The fork provides a fully functional Metabase server that can be built and run via Docker, with a solid test suite and CI automation. It is ready for teams that need an on‑premise or self‑hosted analytics stack, provided they add a proper license file and may create a leaner production Dockerfile. Organizations comfortable with Clojure/Java ecosystems will find it straightforward to extend; other teams should evaluate the licensing gap before adoption.