The Problem
Teams running analytics workloads on Modal often need a way to visualize the data they process. Standing up a BI tool like Metabase typically means provisioning a separate server, managing its lifecycle, and wiring it into existing infrastructure. This repo packages Metabase as a serverless Modal app, so the BI layer runs alongside the compute it visualizes.
What This Does
modal-metabase deploys the Metabase JAR as a Modal function. The core logic lives in app/main.py, which defines the Modal app and its entry point. The bin/deploy-modal script handles the deployment, and bin/install bootstraps the environment with uv.
The pyproject.toml declares the Modal dependency, and uv.lock pins the dependency tree for reproducible installs. The README explicitly warns this is a proof of concept, not tuned for production. It recommends provisioning a separate Postgres database and setting environment variables per Metabase's official docs.
How To Use It
Setup: Install uv, then run bin/install to create a virtual environment and install dependencies.
Configuration: No config file exists in the repo. The README directs you to Metabase's environment variable documentation for database and connection settings. You set these at deploy time, likely via Modal secrets or environment variables, though the repo gives no explicit mechanism.
Running it: Deploy with bin/deploy-modal, then visit the URL printed by the deploy command. The README shows the expected format: https://YOURMODALPROFILE--modal-metabase-metabase.modal.run.
git clone https://github.com/anthonycorletti/modal-metabase.git && cd modal-metabase bin/install source .venv/bin/activate bin/deploy-modal
Real-World Use
A data engineering team runs nightly ETL jobs on Modal that write results to a warehouse. They deploy this Metabase app once, point it at the warehouse via environment variables, and give analysts a URL to build dashboards against the fresh data. The Metabase instance stays warm on Modal's infrastructure, so it's available on demand without a dedicated server.
Code Health & Issues
Med – No tests: No test files exist. The app is a thin wrapper around Metabase's JAR, so the risk is low, but there's no automated verification that the Modal function deploys correctly. Med – No CI/CD: No .github/ or CI config. Deploys are manual via bin/deploy-modal. A regression in the Modal API or Metabase version would go unnoticed until deploy time. Med – No LICENSE: Usage and redistribution rights are unclear. This matters if you plan to fork or embed it in a product. Low – No lockfile for Python deps: uv.lock exists, which is good. The warning is about the absence of a pinned Metabase version; the JAR version is not specified in the repo, so behavior can drift between deploys. Low – Untested production path: The README's own warning is the honest assessment. The default H2 database is fine for a demo but will not survive container restarts.
The Bottom Line
This is a minimal, working proof of concept for running Metabase on Modal. It does one thing and does it simply, with clear setup instructions. It is not production-ready out of the box — you need a real database, pinned versions, and a CI gate before relying on it. Suitable for a quick demo or internal tooling, not a customer-facing analytics platform.