Skip to main content

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
)

Themes

Pick a built-in theme with Deck(theme=...). The default matches the documentation site (a clean light look; "docs-dark" is its dark counterpart). The Montin brand palette lives in "montin" (Sand light) and "ink" (Ink dark); "midnight" is the original navy + pink-red theme — plus light, dark, light-blue, academic, and sobrio.

deck = Deck(title="Report", theme="montin")

Reskin any deck by overriding the CSS colour variables via custom_css (an inline string or a .css file):

deck = Deck(title="Report", custom_css=":root { --color-accent: #E07A3F; }")

See the Themes guide for the full list, the variable reference, and how to build your own theme.

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

Metadata

Release files for montin 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for montin 0.7.0
File Size Uploaded
montin-0.7.0.tar.gz 3.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for montin 0.7.0
File Interpreter ABI Platform
montin-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 6.1 MB

Release files / montin-0.7.0.tar.gz

Download URL montin-0.7.0.tar.gz
Size 3.1 MB
Tags Source
SHA-256 checksum
How to use checksums
8e14770e4f27d8fe4653483304806f69db31c4ab1d8cc3ee22a8df332fb6d36a
BLAKE2b-256 checksum
How to use checksums
9e5a17799647ec58a30ed5286b9bc42c521b80773bdd367407fc3947cc6b697e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.14

Release files / montin-0.7.0-py3-none-any.whl

Download URL montin-0.7.0-py3-none-any.whl
Size 3.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
b4e9085354cdf66c93f095d160e79a24e664b33a8aa2d960db8331eb6058a945
BLAKE2b-256 checksum
How to use checksums
30eed67fbf26a2c99236e5dc4e9bf1bf1d80819c4279042af7e67ea91a002dcd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 release files

0.6.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page