Production-ready UI components for Dash applications with modern dashboard styling. All components are configurable and can be used across different projects.
dashkit/
├── src/
│ ├── dashkit/ # Reusable components package
│ │ ├── __init__.py
│ │ ├── layout.py # Main layout component
│ │ ├── sidebar.py # Configurable sidebar
│ │ ├── header.py # Configurable header
│ │ ├── table.py # Dashkit-style tables
│ │ ├── buttons.py # Button components
│ │ ├── logo.py # Logo components
│ │ ├── navigation.py # Navigation components
│ │ └── dashkit_table/ # Advanced table components
│ └── assets/
│ ├── style.css # Compiled styles
│ └── input.css # Tailwind source
├── run.py # Quick demo runner
└── pyproject.toml # Dependencies
pip install dash-dashkit
# Also ensure these dependencies are available (they install automatically):
# dashkit_table, dashkit_shadcn, dashkit_kibouifrom dash import Dash, html
import dashkit
app = Dash(__name__)
dashkit.setup_app(app)
rows = [{"name":"Alice","score":10},{"name":"Bob","score":20}]
cols = [{"data":"name","title":"Name"},{"data":"score","title":"Score"}]
app.layout = dashkit.create_layout(
content=html.Div([
html.H3("Example"),
dashkit.Table(id="t", data=rows, columns=cols, height=240),
])
)
if __name__ == "__main__":
app.run(debug=True)- Install core:
pip install dash-dashkit - With table:
pip install dash-dashkit[table] - With everything:
pip install dash-dashkit[all]
from dashkit import create_layout, setup_app, Table
app = Dash(__name__)
# Configure app with dashkit styling (handles CSS and theme injection)
setup_app(app)
# Configure sidebar
sidebar_config = {
"brand_name": "Your App",
"brand_initial": "Y",
"nav_items": [
{"icon": "fas fa-home", "label": "Dashboard"},
],
"sections": [
{
"title": "Records",
"items": [
{"type": "nav_item", "icon": "fas fa-users", "label": "Users"}
]
}
]
}
# Configure header
header_config = {
"page_title": "Dashboard",
"page_icon": "📊",
"actions": [
{"type": "primary", "label": "New Item", "icon": "fas fa-plus"}
]
}
# Create your content
table = Table(id="my-table", data=your_data, columns=your_columns)
# Build the layout
app.layout = create_layout(
content=table,
sidebar_config=sidebar_config,
header_config=header_config
)create_layout()- Main application layoutcreate_sidebar()- Configurable sidebar with navigationcreate_header()- Two-tier header with search and actions
Table()- Modern table using HandsontableTableWithStats()- Table with count header
PrimaryButton()- Primary action buttonsSecondaryButton()- Secondary action buttons
- ✅ Fully configurable components
- ✅ Modern dashboard design system
- ✅ TypeScript support for tables
- ✅ Modern Handsontable v16.0.1 integration
- ✅ Responsive layout
- ✅ Font Awesome icons
- ✅ Inter font typography
- ✅ Clean, linted code (ruff + basedpyright)
This project uses taskipy for common development tasks:
# Complete setup (install npm deps, build table component, install Python package)
uv run task setup
# Build only the table component
uv run task build-table
# Install only the table component
uv run task install-table
# Run linting and formatting
uv run task lint
# Run type checking
uv run task typecheck
# Run both linting and type checking
uv run task check
# Start the development server
uv run task dev# Run linting
ruff check .
ruff format .
# Run type checking
basedpyright src
# Build CSS (if modified)
npx tailwindcss -i src/assets/input.css -o src/assets/style.css --watch
# Manual table component build
cd src/dashkit_table
npm install
npm run build
uv pip install -e .Releases are driven by tags. Publishing runs in CI and a smoke test validates PyPI install.
Prerequisites:
- GitHub Actions secret:
PYPI_API_TOKEN(PyPI API token with upload permission)
Subpackages
- dashkit_table
- Bump version in
src/dashkit_table/pyproject.toml - Commit and push (if ignored, force add):
git add -f src/dashkit_table/pyproject.toml && git commit -m "release(table): X.Y.Z" && git push - Tag and push:
git tag dashkit_table-vX.Y.Z && git push origin dashkit_table-vX.Y.Z
- Bump version in
- dashkit_kiboui
- Bump version in
src/dashkit_kiboui/pyproject.toml - Commit and push
- Tag and push:
git tag dashkit_kiboui-vX.Y.Z && git push origin dashkit_kiboui-vX.Y.Z
- Bump version in
Main package (dash-dashkit)
- Bump version in
pyproject.toml(update subpackage minimums as needed) - Commit and push
- Tag and push:
git tag dashkit-vX.Y.Z && git push origin dashkit-vX.Y.Z- Legacy form
vX.Y.Zis also supported
- Legacy form
CI workflows
- Publish: builds the package for the matching tag and uploads to PyPI
- Smoke: installs the just-published version in a clean venv and imports/instantiates components
- Manual fallback: both workflows support
workflow_dispatchwithtag_nameif you need to re-run
Notes
- If
src/dashkit_tableis ignored in.gitignore, usegit add -for remove the ignore entry - Tag patterns must match exactly as above (component-vX.Y.Z)
See src/dashkit_demo/app.py for complete configuration examples including:
- Sidebar navigation structure
- Header actions and filters
- Table data formatting
- Component styling options