AG Grid component for Streamlit — interactive tables, editing, filtering & more.
Project description
streamlit-aggrid-v2
AG Grid component for Streamlit - interactive tables, editing, filtering, sorting, grouping & more.
Built on AG Grid v35.3.0 with Streamlit Custom Components v2.
Acknowledgments
This project is a continuation of streamlit-aggrid, originally created by Pablo Fonseca. Huge thanks to Pablo for building and maintaining the first version that the Streamlit community relied on for years.
Install
pip install streamlit-aggrid-v2
Note: The Python import stays
st_aggrid- only thepip installname changed.
Quick Start
from st_aggrid import AgGrid
import pandas as pd
df = pd.read_csv(
"https://raw.githubusercontent.com/fivethirtyeight/data/master/airline-safety/airline-safety.csv"
)
AgGrid(df)
streamlit run your_app.py
Why v2?
The original streamlit-aggrid is built on Streamlit's legacy iframe-based component model (CCv1). Migrating to CCv2 is a significant architectural change - this rewrite does that while keeping the same Python API.
| streamlit-aggrid (original) | streamlit-aggrid-v2 | |
|---|---|---|
| Component model | CCv1 - iframe + postMessage | CCv2 - direct DOM rendering |
| AG Grid version | v34 | v35.3.0 |
| Themes | 3 themes, no dark mode for quartz | 4 themes, automatic dark/light detection |
| Build toolchain | webpack / CRA | Vite + ESM |
| React | React 17 | React 18 |
| Known bugs | 25 open issues in codebase | All 25 fixed |
| Event listener cleanup | Leaks on unmount | Proper cleanup via componentWillUnmount |
| State management | Direct this.state.api mutation |
gridApiRef pattern (React-safe) |
| Style/script injection | Duplicates on re-render | Deduplicated |
| Mutable defaults | grid_response={}, update_on=[] |
Fixed with None + inline init |
| Path handling | Wrong variable, missing method | Corrected |
| Custom themes | Not supported | StAggridTheme with color schemes, icon sets, params |
| Maintenance | Active, but on the CCv1 / AG Grid 34 line | Active, semantic versioning, CI/CD |
| Python API | from st_aggrid import AgGrid |
Same - fully backward compatible |
Migration: Change pip install streamlit-aggrid to pip install streamlit-aggrid-v2. No code changes needed.
Features
- No iframes - AG Grid renders directly in the Streamlit DOM via CCv2, eliminating postMessage overhead.
- Theming - All four AG Grid themes (quartz, alpine, balham, material) with automatic dark/light mode detection and automatic font matching to Streamlit's theme (
--st-font). Custom themes viaStAggridThemewith color schemes, icon sets, and param overrides. - Editing - Cell editing with
singleClickEdit, value parsers, and change detection. - Row selection - Single, multiple, and checkbox selection with pre-selected rows.
- Filtering & sorting - Column filters, floating filters, quick search, and multi-column sort.
- Column configuration - Pinning, resizing, reordering, auto-sizing, and column groups via
GridOptionsBuilder. - Cell renderers - Custom cell rendering with
JsCode(stars, badges, progress bars, buttons). - Row styling - Conditional row/cell styling via
getRowStyle,rowClassRules, andcellStyle. - Enterprise features - Row grouping, pivot mode, status bar, side bar, Excel export, cell selection, sparklines (requires AG Grid license).
- Data return modes -
AS_INPUT,FILTERED,FILTERED_AND_SORTED,MINIMAL, andCUSTOMvia the collector pattern. - Modern build - Vite + ESM replaces the legacy webpack/CRA toolchain.
- Bug fixes - 25 bugs fixed from the original codebase.
- Backward compatible - Existing
AgGrid(),GridOptionsBuilder,JsCodecode works with just apip installchange.
API Overview
from st_aggrid import AgGrid, GridOptionsBuilder, JsCode
from st_aggrid import GridUpdateMode, DataReturnMode, ColumnsAutoSizeMode
# Build grid options from a DataFrame
gb = GridOptionsBuilder.from_dataframe(df)
gb.configure_pagination(paginationAutoPageSize=True)
gb.configure_selection("multiple", use_checkbox=True)
gb.configure_default_column(filter=True, sortable=True, floatingFilter=True)
grid_options = gb.build()
# Render the grid
response = AgGrid(
df,
gridOptions=grid_options,
height=400,
theme="quartz", # or "alpine", "balham", "material"
update_mode=GridUpdateMode.MODEL_CHANGED,
data_return_mode=DataReturnMode.FILTERED_AND_SORTED,
allow_unsafe_jscode=True, # required for JsCode renderers
)
# Access results
selected_rows = response.selected_rows
filtered_data = response.data
Live Demo
Check out the full showcase with 13 interactive examples:
AI Skills
A ready-to-use Claude Code / Claude Agent SDK skill lives at skills/streamlit-aggrid-v2/SKILL.md. Copy that folder into your project's .claude/skills/ (or the equivalent for your AI tool) and your copilot will know how to build grids with GridOptionsBuilder, wire up JsCode renderers, pick the right DataReturnMode, theme the grid, build tree-data views, and avoid common gotchas — without re-reading the whole repo every conversation.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file streamlit_aggrid_v2-0.2.0.tar.gz.
File metadata
- Download URL: streamlit_aggrid_v2-0.2.0.tar.gz
- Upload date:
- Size: 55.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50739e9a9bef13620058d81be9b6976bd9dead9ce17e2ea7326ae5d990b24634
|
|
| MD5 |
3a29f79c4ab7a08060003dd56eb99e52
|
|
| BLAKE2b-256 |
f1e024d9aef70a92d5be7017396d2e9885966b6999b641691b3317c1eafacdaa
|
File details
Details for the file streamlit_aggrid_v2-0.2.0-py3-none-any.whl.
File metadata
- Download URL: streamlit_aggrid_v2-0.2.0-py3-none-any.whl
- Upload date:
- Size: 1.9 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23be3fbf8955877d32724e45e6a45a8cb034a630db34dca187388bb7eed881ea
|
|
| MD5 |
5f6a91679d367d35709a67be6e27d359
|
|
| BLAKE2b-256 |
49fb88eb58e4ee3e9c9cd92219d4337e2ed53fce23fa9ff88956a63179936f69
|