# Streamlit Kanban Board Component
A powerful, interactive Kanban board component for Streamlit applications, designed for deal pipeline management, project tracking, and workflow visualization. Features drag-and-drop functionality, role-based permissions, detailed dialogs, and source-based styling.

## โจ Features
### Core Functionality
- **Drag & Drop Interface**: Native HTML5 drag-and-drop with smooth animations
- **Interactive Deal Cards**: Click cards to open detailed dialogs with full Streamlit widget support
- **Customizable Stages**: Define pipeline stages with custom names and colors
- **Source-Based Styling**: Automatic card styling based on data source (VV=blue, OF=orange)
- **Role-Based Permissions**: Control drag/drop access and stage visibility by user role
### Advanced Capabilities
- **Permission System**: Granular control over user actions (drag, approve, reject, edit)
- **Visual Feedback**: Dynamic column highlighting and lock icons during drag operations
- **Responsive Design**: Mobile-friendly layout with touch support
- **Custom HTML**: Embed custom HTML content in deal cards
- **Session State Integration**: Seamless integration with Streamlit's session state
### User Experience
- **Smooth Animations**: CSS transitions for professional feel
- **Loading States**: Visual feedback during operations
- **Error Prevention**: Permission validation before allowing actions
- **Accessibility**: Keyboard navigation and screen reader support
## ๐ Installation
### From PyPI
```bash
pip install streamlit-kanban-board-goviceversa
```
### From Test PyPI (for testing)
```bash
pip install -i https://test.pypi.org/simple/ streamlit-kanban-board-goviceversa
```
### From Source
```bash
git clone https://github.com/goviceversa-com/streamlit_kanban_board.git
cd streamlit_kanban_board
pip install -e .
```
## ๐ฏ Quick Start
### Basic Usage
```python
import streamlit as st
from streamlit_kanban_board import kanban_board
# Define your pipeline stages
stages = [
{"id": "todo", "name": "To Do", "color": "#3498db"},
{"id": "in_progress", "name": "In Progress", "color": "#f39c12"},
{"id": "done", "name": "Done", "color": "#27ae60"}
]
# Define your deals/items
deals = [
{
"id": "deal_001",
"stage": "todo",
"deal_id": "D-2024-001",
"company_name": "Acme Corp",
"product_type": "Term Loan",
"date": "2024-01-15",
"underwriter": "John Smith",
"source": "VV"
}
]
# Display the kanban board
result = kanban_board(
board=stages,
data=deals,
key="my_kanban_board"
)
# Handle interactions
if result:
if result.get("type") == "card_move":
st.success(f"Deal moved to: {result['stage']}")
elif result.get("type") == "card_click":
st.info(f"Deal clicked: {result['data']['company_name']}")
```
## ๐ API Reference
### `kanban_board()`
Creates a Kanban board component with drag-and-drop functionality.
#### Parameters
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `board` | `list[dict]` | Required | Stage definitions with id, name, and color |
| `data` | `list[dict]` | Required | Deal/item data with required fields |
| `key` | `str` | `None` | Unique component key for Streamlit |
| `draggable_stages` | `list[str]` | `None` | Stages user can drag to (None = all) |
#### Stage Format
Stages are defined as dictionaries with id, name, and optional color:
```python
stages = [
{"id": "todo", "name": "To Do", "color": "#3498db"},
{"id": "in_progress", "name": "In Progress", "color": "#f39c12"},
{"id": "done", "name": "Done", "color": "#27ae60"}
]
```
#### Data Format
Each item must include these required fields:
```python
item = {
"id": "unique_item_id", # Required: Unique identifier
"stage": "current_stage_id", # Required: Current stage
"deal_id": "D-2024-001", # Required: Display ID
"company_name": "Company Name", # Required: Company name
# Optional fields
"product_type": "Term Loan", # Product type (shown as badge)
"date": "2024-01-15", # Relevant date
"underwriter": "John Smith", # Underwriter name
"amount": 1000000, # Deal amount
"risk_rating": "A", # Risk rating
"source": "VV", # Source (VV=blue, OF=orange)
"custom_html": "<div>...</div>" # Custom HTML content
}
```
#### Return Value
Returns a dictionary with interaction data:
```python
{
"type": "card_move" | "card_click", # Type of interaction
"data": {...}, # Item data
"stage": "stage_id" # Target stage (for moves)
}
```
## ๐ Role-Based Permissions
### Permission System
Define user roles with granular permissions:
```python
USER_ROLES = {
"admin": {
"name": "Administrator",
"can_drag_to": ["stage1", "stage2", "stage3"],
"can_view_stages": ["stage1", "stage2", "stage3"],
"can_approve": True,
"can_reject": True,
"can_hold": True,
"can_edit_deal": True
},
"viewer": {
"name": "Viewer",
"can_drag_to": [], # No drag permissions
"can_view_stages": ["stage1"], # Limited visibility
"can_approve": False,
"can_reject": False,
"can_hold": False,
"can_edit_deal": False
}
}
```
### Implementation Example
```python
# Get current user permissions
def get_user_permissions():
return USER_ROLES[st.session_state.current_user_role]
def get_draggable_stages_for_user():
permissions = get_user_permissions()
return permissions["can_drag_to"]
# Apply permissions to component
result = kanban_board(
board=visible_stages,
data=filtered_deals,
draggable_stages=get_draggable_stages_for_user(),
key=f"kanban_{st.session_state.current_user_role}"
)
```
## ๐จ Styling and Customization
### Source-Based Card Colors
Cards automatically style based on the `source` field:
- **VV Source**: Light blue background
- **OF Source**: Light orange background
- **Default**: Standard white background
### Custom HTML Content
Add rich content to deal cards:
```python
deal = {
"id": "deal_001",
"stage": "review",
"deal_id": "D-2024-001",
"company_name": "Acme Corp",
"custom_html": '''
<div class="priority-high">High Priority</div>
<div class="status-urgent">Urgent Review</div>
<div>Additional custom content</div>
'''
}
```
### CSS Classes
The component includes these CSS classes for styling:
- `.kanban-board` - Main container
- `.kanban-column` - Stage columns
- `.kanban-card` - Individual deal cards
- `.kanban-card[data-source="VV"]` - VV source cards
- `.kanban-card[data-source="OF"]` - OF source cards
- `.drop-disabled` - Disabled drop zones
- `.not-draggable` - Non-draggable cards
## ๐ Advanced Usage
### Dialog Integration
Handle card clicks to show detailed dialogs:
```python
# Handle card clicks
if result and result.get("type") == "card_click":
st.session_state.selected_deal = result["data"]
st.session_state.show_deal_dialog = True
# Show dialog
if st.session_state.get("show_deal_dialog") and st.session_state.get("selected_deal"):
@st.dialog(f"Deal Details: {st.session_state.selected_deal['deal_id']}")
def show_deal_details():
deal = st.session_state.selected_deal
# Display deal information
st.write(f"**Company:** {deal['company_name']}")
st.write(f"**Product:** {deal['product_type']}")
st.write(f"**Amount:** ${deal.get('amount', 0):,.2f}")
# Add interactive elements
if st.button("Approve Deal"):
# Handle approval logic
pass
if st.button("Close"):
st.session_state.show_deal_dialog = False
st.rerun()
show_deal_details()
```
### Real-time Updates
Integrate with session state for real-time updates:
```python
# Initialize deals in session state
if "deals" not in st.session_state:
st.session_state.deals = load_deals_from_database()
# Handle deal movements
if result and result.get("type") == "card_move":
moved_data = result["data"]
new_stage = result["stage"]
# Update database
update_deal_stage(moved_data["id"], new_stage)
# Update session state
for deal in st.session_state.deals:
if deal["id"] == moved_data["id"]:
deal["stage"] = new_stage
break
```
### Filtering and Search
Combine with Streamlit widgets for filtering:
```python
# Filter controls
col1, col2, col3 = st.columns(3)
with col1:
selected_stages = st.multiselect("Stages", stage_options)
with col2:
search_term = st.text_input("Search companies")
with col3:
selected_sources = st.multiselect("Sources", ["VV", "OF"])
# Apply filters
filtered_deals = [
deal for deal in st.session_state.deals
if (not selected_stages or deal["stage"] in selected_stages)
and (not search_term or search_term.lower() in deal["company_name"].lower())
and (not selected_sources or deal.get("source") in selected_sources)
]
# Display filtered board
result = kanban_board(
board=stages,
data=filtered_deals,
key="filtered_kanban"
)
```
## ๐ Example Use Cases
### Deal Pipeline Management
- Track loan applications through approval stages
- Role-based access for underwriters, risk managers, and administrators
- Source-specific workflows (VV vs OF deals)
### Project Management
- Kanban-style project tracking
- Team member assignments and permissions
- Custom project metadata
### Sales Pipeline
- Lead qualification and progression
- Sales team collaboration
- Customer interaction tracking
### Content Workflow
- Editorial content approval process
- Multi-stage review workflows
- Publication pipeline management
## ๐งช Testing
### Quick Test
Run the simple demo to test basic functionality:
```bash
streamlit run simple_demo.py
```
### Full Demo
Run the comprehensive sample application:
```bash
streamlit run sample.py
```
## ๐ง Development
### Building from Source
```bash
# Clone repository
git clone https://github.com/goviceversa-com/streamlit_kanban_board.git
cd streamlit_kanban_board
# Install development dependencies
cd streamlit_kanban_board/frontend
npm install
# Build component
npm run build
# Install Python package
cd ..
pip install -e .
```
### Project Structure
```
streamlit_kanban_board/
โโโ streamlit_kanban_board/
โ โโโ __init__.py # Python component wrapper
โ โโโ frontend/
โ โโโ src/
โ โ โโโ StreamlitKanbanBoard.tsx # Main React component
โ โ โโโ DealCard.tsx # Individual card component
โ โ โโโ KanbanComponent.css # Styling
โ โ โโโ types.ts # TypeScript types
โ โ โโโ index.tsx # Entry point
โ โโโ public/
โ โโโ package.json
โ โโโ build/ # Built component files
โโโ sample.py # Full demo application
โโโ simple_demo.py # Simple demo
โโโ pyproject.toml # Python package configuration
โโโ setup.py # Package setup
โโโ README.md
```
## ๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
### Development Guidelines
1. Follow TypeScript best practices for React components
2. Maintain backwards compatibility for Python API
3. Add tests for new features
4. Update documentation for API changes
## ๐ License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## ๐ Support
- ๐ Check the API documentation above
- ๐งช Run the sample applications for examples
- ๐ Report issues on GitHub
- ๐ฌ Ask questions in discussions
## ๐ Acknowledgments
- Built with [Streamlit Components](https://docs.streamlit.io/library/components)
- Drag and drop functionality using native HTML5 APIs
- Styled with modern CSS animations and transitions
Raw data
{
"_id": null,
"home_page": null,
"name": "streamlit-kanban-board-goviceversa",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "streamlit, kanban, board, drag-drop, workflow, pipeline, project-management",
"author": null,
"author_email": "Pierluigi Segatto <pier@goviceversa.com>",
"download_url": "https://files.pythonhosted.org/packages/2a/2a/ca6e8d772b763de65622fa5f9e363f80e3d9e4bbd5bb425c3ff7a53b6fe1/streamlit-kanban-board-goviceversa-1.1.1.tar.gz",
"platform": null,
"description": "# Streamlit Kanban Board Component\n\nA powerful, interactive Kanban board component for Streamlit applications, designed for deal pipeline management, project tracking, and workflow visualization. Features drag-and-drop functionality, role-based permissions, detailed dialogs, and source-based styling.\n\n\n\n## \u2728 Features\n\n### Core Functionality\n- **Drag & Drop Interface**: Native HTML5 drag-and-drop with smooth animations\n- **Interactive Deal Cards**: Click cards to open detailed dialogs with full Streamlit widget support\n- **Customizable Stages**: Define pipeline stages with custom names and colors\n- **Source-Based Styling**: Automatic card styling based on data source (VV=blue, OF=orange)\n- **Role-Based Permissions**: Control drag/drop access and stage visibility by user role\n\n### Advanced Capabilities\n- **Permission System**: Granular control over user actions (drag, approve, reject, edit)\n- **Visual Feedback**: Dynamic column highlighting and lock icons during drag operations\n- **Responsive Design**: Mobile-friendly layout with touch support\n- **Custom HTML**: Embed custom HTML content in deal cards\n- **Session State Integration**: Seamless integration with Streamlit's session state\n\n### User Experience\n- **Smooth Animations**: CSS transitions for professional feel\n- **Loading States**: Visual feedback during operations\n- **Error Prevention**: Permission validation before allowing actions\n- **Accessibility**: Keyboard navigation and screen reader support\n\n## \ud83d\ude80 Installation\n\n### From PyPI\n```bash\npip install streamlit-kanban-board-goviceversa\n```\n\n### From Test PyPI (for testing)\n```bash\npip install -i https://test.pypi.org/simple/ streamlit-kanban-board-goviceversa\n```\n\n### From Source\n```bash\ngit clone https://github.com/goviceversa-com/streamlit_kanban_board.git\ncd streamlit_kanban_board\npip install -e .\n```\n\n## \ud83c\udfaf Quick Start\n\n### Basic Usage\n\n```python\nimport streamlit as st\nfrom streamlit_kanban_board import kanban_board\n\n# Define your pipeline stages\nstages = [\n {\"id\": \"todo\", \"name\": \"To Do\", \"color\": \"#3498db\"},\n {\"id\": \"in_progress\", \"name\": \"In Progress\", \"color\": \"#f39c12\"},\n {\"id\": \"done\", \"name\": \"Done\", \"color\": \"#27ae60\"}\n]\n\n# Define your deals/items\ndeals = [\n {\n \"id\": \"deal_001\",\n \"stage\": \"todo\",\n \"deal_id\": \"D-2024-001\",\n \"company_name\": \"Acme Corp\",\n \"product_type\": \"Term Loan\",\n \"date\": \"2024-01-15\",\n \"underwriter\": \"John Smith\",\n \"source\": \"VV\"\n }\n]\n\n# Display the kanban board\nresult = kanban_board(\n board=stages,\n data=deals,\n key=\"my_kanban_board\"\n)\n\n# Handle interactions\nif result:\n if result.get(\"type\") == \"card_move\":\n st.success(f\"Deal moved to: {result['stage']}\")\n elif result.get(\"type\") == \"card_click\":\n st.info(f\"Deal clicked: {result['data']['company_name']}\")\n```\n\n## \ud83d\udccb API Reference\n\n### `kanban_board()`\n\nCreates a Kanban board component with drag-and-drop functionality.\n\n#### Parameters\n\n| Parameter | Type | Default | Description |\n|-----------|------|---------|-------------|\n| `board` | `list[dict]` | Required | Stage definitions with id, name, and color |\n| `data` | `list[dict]` | Required | Deal/item data with required fields |\n| `key` | `str` | `None` | Unique component key for Streamlit |\n| `draggable_stages` | `list[str]` | `None` | Stages user can drag to (None = all) |\n\n#### Stage Format\n\nStages are defined as dictionaries with id, name, and optional color:\n\n```python\nstages = [\n {\"id\": \"todo\", \"name\": \"To Do\", \"color\": \"#3498db\"},\n {\"id\": \"in_progress\", \"name\": \"In Progress\", \"color\": \"#f39c12\"},\n {\"id\": \"done\", \"name\": \"Done\", \"color\": \"#27ae60\"}\n]\n```\n\n#### Data Format\n\nEach item must include these required fields:\n\n```python\nitem = {\n \"id\": \"unique_item_id\", # Required: Unique identifier\n \"stage\": \"current_stage_id\", # Required: Current stage\n \"deal_id\": \"D-2024-001\", # Required: Display ID\n \"company_name\": \"Company Name\", # Required: Company name\n \n # Optional fields\n \"product_type\": \"Term Loan\", # Product type (shown as badge)\n \"date\": \"2024-01-15\", # Relevant date\n \"underwriter\": \"John Smith\", # Underwriter name\n \"amount\": 1000000, # Deal amount\n \"risk_rating\": \"A\", # Risk rating\n \"source\": \"VV\", # Source (VV=blue, OF=orange)\n \"custom_html\": \"<div>...</div>\" # Custom HTML content\n}\n```\n\n#### Return Value\n\nReturns a dictionary with interaction data:\n\n```python\n{\n \"type\": \"card_move\" | \"card_click\", # Type of interaction\n \"data\": {...}, # Item data\n \"stage\": \"stage_id\" # Target stage (for moves)\n}\n```\n\n## \ud83d\udd10 Role-Based Permissions\n\n### Permission System\n\nDefine user roles with granular permissions:\n\n```python\nUSER_ROLES = {\n \"admin\": {\n \"name\": \"Administrator\",\n \"can_drag_to\": [\"stage1\", \"stage2\", \"stage3\"],\n \"can_view_stages\": [\"stage1\", \"stage2\", \"stage3\"],\n \"can_approve\": True,\n \"can_reject\": True,\n \"can_hold\": True,\n \"can_edit_deal\": True\n },\n \"viewer\": {\n \"name\": \"Viewer\",\n \"can_drag_to\": [], # No drag permissions\n \"can_view_stages\": [\"stage1\"], # Limited visibility\n \"can_approve\": False,\n \"can_reject\": False,\n \"can_hold\": False,\n \"can_edit_deal\": False\n }\n}\n```\n\n### Implementation Example\n\n```python\n# Get current user permissions\ndef get_user_permissions():\n return USER_ROLES[st.session_state.current_user_role]\n\ndef get_draggable_stages_for_user():\n permissions = get_user_permissions()\n return permissions[\"can_drag_to\"]\n\n# Apply permissions to component\nresult = kanban_board(\n board=visible_stages,\n data=filtered_deals,\n draggable_stages=get_draggable_stages_for_user(),\n key=f\"kanban_{st.session_state.current_user_role}\"\n)\n```\n\n## \ud83c\udfa8 Styling and Customization\n\n### Source-Based Card Colors\n\nCards automatically style based on the `source` field:\n\n- **VV Source**: Light blue background\n- **OF Source**: Light orange background\n- **Default**: Standard white background\n\n### Custom HTML Content\n\nAdd rich content to deal cards:\n\n```python\ndeal = {\n \"id\": \"deal_001\",\n \"stage\": \"review\",\n \"deal_id\": \"D-2024-001\",\n \"company_name\": \"Acme Corp\",\n \"custom_html\": '''\n <div class=\"priority-high\">High Priority</div>\n <div class=\"status-urgent\">Urgent Review</div>\n <div>Additional custom content</div>\n '''\n}\n```\n\n### CSS Classes\n\nThe component includes these CSS classes for styling:\n\n- `.kanban-board` - Main container\n- `.kanban-column` - Stage columns\n- `.kanban-card` - Individual deal cards\n- `.kanban-card[data-source=\"VV\"]` - VV source cards\n- `.kanban-card[data-source=\"OF\"]` - OF source cards\n- `.drop-disabled` - Disabled drop zones\n- `.not-draggable` - Non-draggable cards\n\n## \ud83d\udd04 Advanced Usage\n\n### Dialog Integration\n\nHandle card clicks to show detailed dialogs:\n\n```python\n# Handle card clicks\nif result and result.get(\"type\") == \"card_click\":\n st.session_state.selected_deal = result[\"data\"]\n st.session_state.show_deal_dialog = True\n\n# Show dialog\nif st.session_state.get(\"show_deal_dialog\") and st.session_state.get(\"selected_deal\"):\n @st.dialog(f\"Deal Details: {st.session_state.selected_deal['deal_id']}\")\n def show_deal_details():\n deal = st.session_state.selected_deal\n \n # Display deal information\n st.write(f\"**Company:** {deal['company_name']}\")\n st.write(f\"**Product:** {deal['product_type']}\")\n st.write(f\"**Amount:** ${deal.get('amount', 0):,.2f}\")\n \n # Add interactive elements\n if st.button(\"Approve Deal\"):\n # Handle approval logic\n pass\n \n if st.button(\"Close\"):\n st.session_state.show_deal_dialog = False\n st.rerun()\n \n show_deal_details()\n```\n\n### Real-time Updates\n\nIntegrate with session state for real-time updates:\n\n```python\n# Initialize deals in session state\nif \"deals\" not in st.session_state:\n st.session_state.deals = load_deals_from_database()\n\n# Handle deal movements\nif result and result.get(\"type\") == \"card_move\":\n moved_data = result[\"data\"]\n new_stage = result[\"stage\"]\n \n # Update database\n update_deal_stage(moved_data[\"id\"], new_stage)\n \n # Update session state\n for deal in st.session_state.deals:\n if deal[\"id\"] == moved_data[\"id\"]:\n deal[\"stage\"] = new_stage\n break\n```\n\n### Filtering and Search\n\nCombine with Streamlit widgets for filtering:\n\n```python\n# Filter controls\ncol1, col2, col3 = st.columns(3)\n\nwith col1:\n selected_stages = st.multiselect(\"Stages\", stage_options)\n\nwith col2:\n search_term = st.text_input(\"Search companies\")\n\nwith col3:\n selected_sources = st.multiselect(\"Sources\", [\"VV\", \"OF\"])\n\n# Apply filters\nfiltered_deals = [\n deal for deal in st.session_state.deals\n if (not selected_stages or deal[\"stage\"] in selected_stages)\n and (not search_term or search_term.lower() in deal[\"company_name\"].lower())\n and (not selected_sources or deal.get(\"source\") in selected_sources)\n]\n\n# Display filtered board\nresult = kanban_board(\n board=stages,\n data=filtered_deals,\n key=\"filtered_kanban\"\n)\n```\n\n## \ud83d\udcca Example Use Cases\n\n### Deal Pipeline Management\n- Track loan applications through approval stages\n- Role-based access for underwriters, risk managers, and administrators\n- Source-specific workflows (VV vs OF deals)\n\n### Project Management\n- Kanban-style project tracking\n- Team member assignments and permissions\n- Custom project metadata\n\n### Sales Pipeline\n- Lead qualification and progression\n- Sales team collaboration\n- Customer interaction tracking\n\n### Content Workflow\n- Editorial content approval process\n- Multi-stage review workflows\n- Publication pipeline management\n\n## \ud83e\uddea Testing\n\n### Quick Test\nRun the simple demo to test basic functionality:\n\n```bash\nstreamlit run simple_demo.py\n```\n\n### Full Demo\nRun the comprehensive sample application:\n\n```bash\nstreamlit run sample.py\n```\n\n## \ud83d\udd27 Development\n\n### Building from Source\n\n```bash\n# Clone repository\ngit clone https://github.com/goviceversa-com/streamlit_kanban_board.git\ncd streamlit_kanban_board\n\n# Install development dependencies\ncd streamlit_kanban_board/frontend\nnpm install\n\n# Build component\nnpm run build\n\n# Install Python package\ncd ..\npip install -e .\n```\n\n### Project Structure\n\n```\nstreamlit_kanban_board/\n\u251c\u2500\u2500 streamlit_kanban_board/\n\u2502 \u251c\u2500\u2500 __init__.py # Python component wrapper\n\u2502 \u2514\u2500\u2500 frontend/\n\u2502 \u251c\u2500\u2500 src/\n\u2502 \u2502 \u251c\u2500\u2500 StreamlitKanbanBoard.tsx # Main React component\n\u2502 \u2502 \u251c\u2500\u2500 DealCard.tsx # Individual card component\n\u2502 \u2502 \u251c\u2500\u2500 KanbanComponent.css # Styling\n\u2502 \u2502 \u251c\u2500\u2500 types.ts # TypeScript types\n\u2502 \u2502 \u2514\u2500\u2500 index.tsx # Entry point\n\u2502 \u251c\u2500\u2500 public/\n\u2502 \u251c\u2500\u2500 package.json\n\u2502 \u2514\u2500\u2500 build/ # Built component files\n\u251c\u2500\u2500 sample.py # Full demo application\n\u251c\u2500\u2500 simple_demo.py # Simple demo\n\u251c\u2500\u2500 pyproject.toml # Python package configuration\n\u251c\u2500\u2500 setup.py # Package setup\n\u2514\u2500\u2500 README.md\n```\n\n## \ud83e\udd1d Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n### Development Guidelines\n1. Follow TypeScript best practices for React components\n2. Maintain backwards compatibility for Python API\n3. Add tests for new features\n4. Update documentation for API changes\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83c\udd98 Support\n\n- \ud83d\udcd6 Check the API documentation above\n- \ud83e\uddea Run the sample applications for examples\n- \ud83d\udc1b Report issues on GitHub\n- \ud83d\udcac Ask questions in discussions\n\n## \ud83d\ude4f Acknowledgments\n\n- Built with [Streamlit Components](https://docs.streamlit.io/library/components)\n- Drag and drop functionality using native HTML5 APIs\n- Styled with modern CSS animations and transitions\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A powerful, interactive Kanban board component for Streamlit applications with drag-and-drop functionality, role-based permissions, and customizable workflows.",
"version": "1.1.1",
"project_urls": {
"Bug Tracker": "https://github.com/goviceversa-com/streamlit_kanban_board/issues",
"Documentation": "https://github.com/goviceversa-com/streamlit_kanban_board#readme",
"Funding": "https://github.com/sponsors/pierluigisegatto",
"Homepage": "https://github.com/goviceversa-com/streamlit_kanban_board",
"Repository": "https://github.com/goviceversa-com/streamlit_kanban_board"
},
"split_keywords": [
"streamlit",
" kanban",
" board",
" drag-drop",
" workflow",
" pipeline",
" project-management"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "7ff939ca49234aa9f2a90ada38fef01fd583b3c1996a29df3ad9baf0879c8e72",
"md5": "e4b62fcde8a311095ec2d2bcba3f686e",
"sha256": "bcc08b4fd54bfb27e5e53471418a88b16fbdba92bf1fb023ab018add47995478"
},
"downloads": -1,
"filename": "streamlit_kanban_board_goviceversa-1.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e4b62fcde8a311095ec2d2bcba3f686e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 397823,
"upload_time": "2025-07-14T12:01:20",
"upload_time_iso_8601": "2025-07-14T12:01:20.345158Z",
"url": "https://files.pythonhosted.org/packages/7f/f9/39ca49234aa9f2a90ada38fef01fd583b3c1996a29df3ad9baf0879c8e72/streamlit_kanban_board_goviceversa-1.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2a2aca6e8d772b763de65622fa5f9e363f80e3d9e4bbd5bb425c3ff7a53b6fe1",
"md5": "981188fd63607bd782bf54de5b969268",
"sha256": "f7ebe930e60f258ce5b7593d8f1aa668112e3c06c231645c391afe78e0b31fe1"
},
"downloads": -1,
"filename": "streamlit-kanban-board-goviceversa-1.1.1.tar.gz",
"has_sig": false,
"md5_digest": "981188fd63607bd782bf54de5b969268",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 398022,
"upload_time": "2025-07-14T12:01:21",
"upload_time_iso_8601": "2025-07-14T12:01:21.563550Z",
"url": "https://files.pythonhosted.org/packages/2a/2a/ca6e8d772b763de65622fa5f9e363f80e3d9e4bbd5bb425c3ff7a53b6fe1/streamlit-kanban-board-goviceversa-1.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-14 12:01:21",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "goviceversa-com",
"github_project": "streamlit_kanban_board",
"github_not_found": true,
"lcname": "streamlit-kanban-board-goviceversa"
}