
Security News
Software Engineering Daily Podcast: Feross on AI, Open Source, and Supply Chain Risk
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.
colab-print
Advanced tools
Colab Print is a Python library that enhances the display capabilities of Jupyter and Google Colab notebooks, providing beautiful, customizable HTML outputs for text, lists, dictionaries, tables, pandas DataFrames, progress bars, and interactive elements.
pip install colab-print
from colab_print import Printer, header, success, progress, button, pdf_
import pandas as pd
import time
# Use pre-configured styling functions
header("Colab Print Demo")
success("Library loaded successfully!")
# Create a printer with default styles
printer = Printer()
# Display styled text
printer.display("Hello, World!", style="highlight")
# Display a list with nested elements (automatically detected and styled)
my_list = ['apple', 'banana', ['nested', 'item'], 'cherry', {'key': 'value'}]
printer.display_list(my_list, ordered=True, style="info")
# Interactive button with callback
def on_click_handler():
print("Button clicked!")
return "__UPDATE_BUTTON_TEXT__: Clicked!"
button("Click Me", on_click=on_click_handler, animate="pulse")
# Show a progress bar
for i in progress(range(10), desc="Processing"):
time.sleep(0.2) # Simulate work
# Display a dictionary
my_dict = {
'name': 'Alice',
'age': 30,
'address': {'street': '123 Main St', 'city': 'Anytown'}
}
printer.display_dict(my_dict, style="success")
# Display a simple table
headers = ["Name", "Age", "City"]
rows = [
["Alice", 28, "New York"],
["Bob", 34, "London"],
["Charlie", 22, "Paris"]
]
printer.display_table(headers, rows, style="default")
# Display a pandas DataFrame with styling
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [28, 34, 22],
'City': ['New York', 'London', 'Paris']
})
printer.display_df(df,
highlight_cols=['Name'],
highlight_cells={(0, 'Age'): "background-color: #FFEB3B;"},
caption="Sample DataFrame")
# Display a PDF file
pdf_("path/to/document.pdf", animate="fadeIn")
Colab Print provides a variety of specialized display functions for different content types and purposes.
Text styling functions help you format and display text with various emphasis styles, borders, and visual treatments to create structured, visually appealing documents.
from colab_print import header, title, subtitle
# Simple examples
header("Main Section")
title("Document Title", animate="fadeIn")
subtitle("Supporting information", color="#9C27B0")
Content display functions provide specialized formatting for different types of content, such as code blocks, cards, quotes, and other structured elements.
from colab_print import code, card, quote, badge
# Content examples
code("def hello():\n print('Hello world!')")
card("This is a card with content", box_shadow="0 4px 8px rgba(0,0,0,0.2)")
quote("The best way to predict the future is to invent it.")
badge("New Feature", background_color="#9C27B0", color="white")
Status feedback functions provide visual cues about operation status, from informational messages to warnings and errors, each with appropriate styling.
from colab_print import info, success, warning, error
# Status examples
info("Loading data...", animate="fadeIn")
success("Operation completed successfully!")
warning("Proceed with caution", background_color="#FFF9C4")
error("An error occurred", font_weight="bold")
Data visualization functions help you display structured data like tables, DataFrames, lists, dictionaries, and diagrams with enhanced styling and interactivity.
from colab_print import dfd, table, list_, dict_, mermaid
import pandas as pd
# DataFrame example
df = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Score': [95, 82]
})
dfd(df, highlight_cols=['Score'], caption="Test Scores")
# Table example
table(
headers=["Name", "Score"],
rows=[["Alice", 95], ["Bob", 82]],
highlight_rows=[0]
)
# List example
list_([1, 2, [3, 4]], matrix_mode=True)
# Dictionary example
dict_({'user': 'Alice', 'data': {'score': 95, 'rank': 1}})
# Mermaid diagram
mermaid('''
graph TD;
A-->B;
A-->C;
B-->D;
C-->D;
''', theme='forest')
from colab_print import button, progress, P
import time
# Button with callback
def on_click():
print("Button clicked!")
return "__UPDATE_BUTTON_TEXT__: Clicked!"
btn_id = button("Click Me",
on_click=on_click,
animate="pulse",
position="mid",
width="200px")
# Update button programmatically
P.update_button_text(btn_id, "New Text")
P.enable_button(btn_id, False) # Disable button
# Progress bar
for i in progress(range(10), desc="Processing", color="#9C27B0"):
time.sleep(0.2) # Simulate work
TextBox component allows you to create styled containers with titles, captions, and progress bars. It's particularly useful for presenting information in a structured, visually appealing format, with support for dynamic updates.
from colab_print import text_box
# Simple text box with just a title
text_box("Simple Information Box")
# Text box with captions and a specific style
text_box(
"Warning Notice",
captions=[
"This operation cannot be undone.",
"Please proceed with caution."
],
style="warning"
)
# Text box with progress bar
text_box(
"Download Status",
captions=["Downloading important files..."],
progress={"value": 75, "max": 100, "label": "Progress"},
style="primary"
)
# Custom styled text box
text_box(
"Custom Box",
captions=["This box uses custom styling."],
background_color="#f5f5f5",
border="1px solid #ddd",
border_radius="10px",
box_shadow="0 4px 8px rgba(0,0,0,0.1)"
)
TextBoxes support dynamic updates, making them perfect for displaying real-time information or continuous data:
import time
from colab_print import text_box, update_text_box
# Create a text box and store its ID
timer_box_id = text_box(
"Task Timer",
captions=["Task started just now"],
progress={"value": 0, "max": 60, "label": "Duration"},
style="info"
)
# Update the text box with new information every second
start_time = time.time()
for i in range(1, 11):
time.sleep(1) # Wait for 1 second
elapsed = int(time.time() - start_time)
# Update both captions and progress
update_text_box(
timer_box_id,
captions=[f"Task running for {elapsed} seconds"],
progress={"value": elapsed, "max": 60, "label": "Duration"}
)
# Final update with changed title
update_text_box(
timer_box_id,
title="Task Complete",
captions=["Task finished successfully!"],
progress={"value": int(time.time() - start_time), "max": 60, "label": "Total Time"}
)
This example creates a real-time timer that updates both text and progress bar, demonstrating how TextBoxes can be used for monitoring ongoing processes or displaying continuously changing data.
| Function | Description | Example |
|---|---|---|
pdf_(source, *, is_url=False, **options) | Display interactive PDF viewer | pdf_("document.pdf", animate="fadeIn") |
from colab_print import pdf_, P
# Display PDF from local file
pdf_("path/to/document.pdf")
# Display PDF from URL
pdf_("https://example.com/sample.pdf", is_url=True)
# PDF with animation and styling
pdf_("path/to/document.pdf",
animate="fadeIn",
background_color="#f5f5f5",
border_radius="10px")
# Use file picker (no source)
pdf_()
# Using the Printer class
P.display_pdf("path/to/document.pdf")
The PDF viewer includes:
Colab Print includes a variety of built-in styles for different display needs:
| Style | Description |
|---|---|
default | Clean, professional styling |
header | Large text with top/bottom borders |
title | Large centered title |
subtitle | Medium-sized italic title |
highlight | Stand-out text with emphasis |
info | Informational blue text |
success | Positive green message |
warning | Attention-grabbing yellow alert |
error | Critical red message |
muted | Subtle gray text |
primary | Primary blue-themed text |
secondary | Secondary purple-themed text |
code_block | Code-like display with monospace font |
card | Card-like container with shadow |
quote | Styled blockquote |
notice | Attention-drawing notice |
badge | Compact badge-style display |
interactive_button | Clickable button style |
You can add your own styles or override existing ones:
from colab_print import Printer
printer = Printer()
# Add a new style
printer.add_style("custom", "color: purple; font-size: 20px; font-weight: bold;")
printer.display("Custom styled text", style="custom")
# Override styles inline
printer.display("Inline styled text", style="default",
color="teal", font_size="18px", text_decoration="underline")
# Create a reusable styled display function
my_header = printer.create_styled_display("header", color="#FF5722", font_size="24px")
my_header("First Section")
my_header("Second Section")
The display_df method and dfd() function support numerous customization options:
from colab_print import dfd
import pandas as pd
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [28, 34, 22],
'City': ['New York', 'London', 'Paris']
})
dfd(df,
style='default', # Base style
max_rows=20, # Max rows to display
max_cols=10, # Max columns to display
precision=2, # Decimal precision for floats
header_style="...", # Custom header styling
odd_row_style="...", # Custom odd row styling
even_row_style="...", # Custom even row styling
index=True, # Show index
width="100%", # Table width
caption="My DataFrame", # Table caption
highlight_cols=["col1"], # Highlight columns
highlight_rows=[0, 2], # Highlight rows
highlight_cells={(0,0): "..."}, # Highlight specific cells
font_size="14px", # Custom font size for all cells
text_align="center") # Text alignment for all cells
Create interactive buttons with Python callbacks (introduced in v0.5.0):
from colab_print import button, P
# Define a callback function
def on_button_click():
print("Button was clicked!")
# Return a special string to update button text
return "__UPDATE_BUTTON_TEXT__: Clicked!"
# Create a basic button
btn_id = button("Click Me", on_click=on_button_click)
# Update button programmatically
P.update_button_text(btn_id, "New Button Text")
# Disable the button
P.enable_button(btn_id, False)
# Create a styled button with animation
button("Fancy Button",
on_click=on_button_click,
animate="pulse",
position="mid", # 'left', 'mid', or 'right'
width="200px",
background_color="linear-gradient(135deg, #3498db, #9b59b6)",
color="white",
border_radius="30px",
box_shadow="0 4px 8px rgba(0,0,0,0.2)")
Colab Print offers powerful progress tracking with tqdm compatibility:
from colab_print import progress, Printer
import time
# Simple progress bar using iterable
for i in progress(range(100), desc="Processing"):
time.sleep(0.01) # Do some work
# Manual progress
printer = Printer()
progress_id = printer.display_progress(total=50, desc="Manual progress")
for i in range(50):
time.sleep(0.05) # Do some work
printer.update_progress(progress_id, i+1)
# Progress with customization
for i in progress(range(100),
desc="Custom progress",
color="#9C27B0",
height="25px",
style="card"):
time.sleep(0.01)
# Undetermined progress (loading indicator)
progress_id = printer.display_progress(total=None, desc="Loading...", animated=True)
time.sleep(3) # Do some work with unknown completion time
printer.update_progress(progress_id, 100, 100) # Mark as complete
Apply animations to any displayed element using Animate.css:
from colab_print import header, info, success, error, button
# Simple animations
header("Fade In Header", animate="fadeIn")
info("Slide Down Info", animate="slideInDown")
success("Bounce Success", animate="bounceIn")
error("Shake Error", animate="shakeX")
# Animation with duration and delay
header("Custom Animation",
animate="zoomIn",
animation_duration="1.5s",
animation_delay="0.5s")
# Button with animation
button("Pulse Button", animate="pulse", animation_iteration="infinite")
The Printer class is the main entry point for the library's functionality:
from colab_print import Printer
# Create a printer instance
printer = Printer()
# Text display methods
printer.display(text, style="default", animate=None, **inline_styles)
printer.display_code(code, style="code_block", animate=None, **inline_styles)
# Data display methods
printer.display_list(items, ordered=False, style="default", **list_options)
printer.display_dict(data, style="default", **dict_options)
printer.display_table(headers, rows, style="default", **table_options)
printer.display_df(df, style="default", **df_options)
# Interactive elements
printer.display_progress(total, desc="", style="default", **progress_options)
printer.update_progress(progress_id, current, total=None)
printer.display_button(text, on_click=None, style="interactive_button", **button_options)
printer.update_button_text(button_id, new_text)
printer.enable_button(button_id, enabled)
# Visualization
printer.display_mermaid(diagram, theme="default", style="default", **options)
printer.display_md(source, is_url=False, style="default", animate=None, **options)
printer.display_pdf(source, is_url=False, style="default", animate=None, **options)
# Styling methods
printer.add_style(style_name, style_definition)
printer.create_styled_display(style, **default_style_overrides)
Colab Print includes a comprehensive exception hierarchy for robust error handling:
from colab_print.exception import (
ColabPrintError, # Base exception
StyleNotFoundError, # When a style isn't found
DataFrameError, # DataFrame-related issues
InvalidParameterError, # Parameter validation failures
HTMLRenderingError, # HTML rendering problems
ButtonError, # Button-related issues
PDFError, # PDF-related issues
# ... # Import More As Needed
)
try:
printer.display("Some text", style="non_existent_style")
except StyleNotFoundError as e:
print(f"Style error: {e}")
try:
button("Test", on_click=123) # Invalid callback
except InvalidParameterError as e:
print(f"Parameter error: {e}")
Contributions are welcome! Please feel free to submit a Pull Request.
We maintain a detailed changelog following semantic versioning (e.g., v1.0.0, v1.1.0-beta) that documents all notable changes to this project. Changes are categorized as:
See the CHANGELOG.md file for the full version history.
This project is licensed under the MIT License - see the LICENSE file for details.
FAQs
Enhanced display utilities for Jupyter/Colab notebooks with customizable styles
We found that colab-print demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.

Security News
GitHub has revoked npm classic tokens for publishing; maintainers must migrate, but OpenJS warns OIDC trusted publishing still has risky gaps for critical projects.

Security News
Rustβs crates.io team is advancing an RFC to add a Security tab that surfaces RustSec vulnerability and unsoundness advisories directly on crate pages.