Skip to main content

Generate self-contained, interactive HTML reports from data in Python

Project description

Montin

See the whole.

CI

Build self-contained, interactive HTML reports from Python — one file you can commit, or serve, with no runtime and no dependencies on the viewer's machine. Designed for batch-generated data and ML output: loop over your experiments, runs, or segments and emit a report per iteration.

Content is laid out on a grid of typed cells (charts, tables, metrics, code, images, diagrams), and the whole deck embeds into a single .html.

Documentation

https://montin.readthedocs.io/

Installation

pip install montin

Quick start

from montin import Deck

deck = Deck(
    title="My Report",
)

deck.add_title("My Report", subtitle="Subtitle here")
deck.add_section("1 — Introduction")

slide = deck.add_slide("Results", ncols=2)

slide.add_metric(value=98.7, label="Efficiency (%)", delta=+2.3)
slide.add_text("Text with **markdown** and LaTeX: $E = mc^2$")

deck.write("report", open_browser=True)

Batch generation

The core use case — one report per run, generated in a loop:

deck = Deck(title=f"Experiment Results", author="Company name", date="Jun 20th, 2026")

for run in experiment_runs:
    
    deck.add_section(title=f"Run #{run.id}")    
    
    slide = deck.add_slide("Metrics", nrows=1, ncols=3)
    
    slide.add_metric(value=run.accuracy, label="Accuracy", delta=run.delta)
    slide.add_plotly(run.loss_curve)
    slide.add_table(run.results_table, caption="Results")

deck.write("report")

Cell types

Method Cell Description
add_text TextCell Markdown + LaTeX (MathJax)
add_metric MetricCell KPI card with value, label and delta
add_table TableCell CSV, dict, list or DataFrame
add_image ImageCell Image with lightbox and zoom/pan
add_image_slider ImageSliderCell Image carousel
add_list ListCell Bullet or numbered list
add_code CodeCell Code with syntax highlighting
add_plotly PlotlyCell Interactive Plotly chart
add_mermaid MermaidCell Declarative diagram (flowchart, etc.)
add_html HtmlCell Raw HTML without escaping
add_iframe IframeCell Embed external content
add_empty EmptyCell Reserves space in the grid

Common cell options

All add_* methods accept:

slide.add_text(
    "content",
    colspan=2,          # spans 2 columns
    rowspan=1,
    caption="Caption",
    overflow=True,      # internal scroll
    expand_button=True, # expand to fullscreen button
    copy_button=True,   # copy button (CodeCell)
    transparent=True,   # hides cell border and background
)

About the name

Montin fuses two roots:

  • Muntin — the slender bar that divides a window's panes into one composed whole. It maps directly onto the library's CSS Grid: the structure that organizes cells and panels across a report.
  • Monte — a heap of raw data (simulations, DOE iterations, notebooks) waiting to be processed and understood.

Montin is the structure that turns a heap of data into understanding — and, from above, you see the whole.

Palette

Name Hex Use
Ink #0F1F2E Primary text, dark background
Slate #35546B Secondary colour, UI elements
Stone #9AA6B2 Neutral, secondary text
Sand #E9ECEF Light background, borders
Accent #E07A3F Highlight (logo sun, CTAs, links)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

montin-0.6.0.tar.gz (3.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

montin-0.6.0-py3-none-any.whl (3.0 MB view details)

Uploaded Python 3

File details

Details for the file montin-0.6.0.tar.gz.

File metadata

  • Download URL: montin-0.6.0.tar.gz
  • Upload date:
  • Size: 3.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.14

File hashes

Hashes for montin-0.6.0.tar.gz
Algorithm Hash digest
SHA256 38587781c261366a28d484e0e49d736280a6a292fa1c3d4beaca4ebecb23a9ca
MD5 58d8947a708c4c76257d47c8aedce31d
BLAKE2b-256 7795635ccd73e21aae961018286aa472efb36ff21bd261e0e174c73c03be7c8d

See more details on using hashes here.

File details

Details for the file montin-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: montin-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 3.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.14

File hashes

Hashes for montin-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8bb9e6b370640451b31d86d6addc2a6cfb39a299a8dbf869ddf7ac3e07dfc8a3
MD5 6dfc06bf47bb806d379a3781aff4ce59
BLAKE2b-256 28c4225f87c4f59780dada5ed521225ebd1171677ab39f86dc0edb81f1c9da68

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page