Streamlit Swipecards allow you to add interactive swipeable cards to your app. Supports both image cards and table row swiping with cell highlighting.
Project description
🃏 Streamlit Swipe Cards
A modern, interactive card-swiping component for Streamlit applications. Build interfaces with smooth animations for both image cards and data table rows.
✨ Features
- Stacked Card Interface: Card stacking with smooth animations
- Dual Display Modes: Support for both image cards and interactive data tables
- Touch & Mouse Support: Works seamlessly on desktop and mobile devices
- Responsive Views: Choose mobile or desktop layouts for card width
- Interactive Actions: Like ✔️, pass ❌, and undo ↶ functionality
- Advanced Table Features: Cell, row, and column highlighting with AG-Grid integration
- Performance Optimized: Automatic dataset caching for improved loading times
- Return Values: Get detailed feedback on user interactions and swipe patterns
📦 Installation
pip install streamlit-swipecards
🚀 Quick Start
import streamlit as st
from streamlit_swipecards import streamlit_swipecards
st.title("My Swipe App")
# Image cards example
cards = [
{
"name": "Alice",
"description": "Loves hiking and photography",
"image": "https://images.unsplash.com/photo-1544005313-94ddf0286df2?w=400"
},
{
"name": "Bob",
"description": "Chef and food enthusiast",
"image": "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=400"
}
]
result = streamlit_swipecards(
cards=cards,
display_mode="cards",
show_border=False,
view="desktop",
last_card_message="This is the last page. You can add your own text here",
key="my_swipe_cards"
)
if result:
st.json(result)
📋 API Reference
streamlit_swipecards()
| Parameter | Type | Description |
|---|---|---|
cards |
list[dict] |
List of card dictionaries (image or table cards) |
display_mode |
str |
Display mode: "cards" or "table" |
dataset_path |
str | None |
Legacy single-dataset mode (deprecated) |
highlight_cells |
list[dict] | None |
Cell highlighting configuration |
highlight_rows |
list[dict] | None |
Row highlighting configuration |
highlight_columns |
list[dict] | None |
Column highlighting configuration |
center_table_row |
int | None |
Row to center in table view |
center_table_column |
str | None |
Column to center in table view |
view |
str |
Layout: "mobile" (360px), "tablet" (800px), or "desktop" (full width) |
show_border |
bool |
Show border around cards (default True) |
table_font_size |
int |
Table font size in px (default 14) |
table_max_rows |
int | None |
Max rows to render per table card (visual trim) |
table_max_columns |
int | None |
Max columns to render per table card (visual trim) |
last_card_message |
str | None |
Message shown after all cards are swiped |
key |
str | None |
Unique component key |
Returns: dict | None - Interaction data including swiped cards, last action, and statistics
🎨 Card Types
🖼️ Image Cards
- Custom Styling: Flexible card layouts with names, descriptions, and images
- Smooth Animations: Swipe gestures and visual feedback
{
"name": "Alice Johnson", # required
"description": "Software Engineer", # required
"image": "https://example.com/alice.jpg", # required - URL or base64
"pills": ["Python", "React", "AI"] # optional - skill tags
}
📊 Table Cards
- Data Row Swiping: Transform spreadsheet rows into swipeable cards
- Smart Highlighting: Emphasize specific cells, rows, or columns
- Automatic Centering: Center on important data points
{
"dataset_path": "employees.csv", # required - path to CSV/Excel
"row_index": 0, # required - row to display
"name": "Alice Johnson", # optional - card title
"description": "Engineering Team", # optional - card subtitle
"pills": ["Senior", "Remote"], # optional - status tags
"highlight_cells": [ # optional - cell highlighting
{"row": 0, "column": "Salary"}
],
"highlight_rows": [ # optional - row highlighting
{"row": 0}
],
"highlight_columns": [ # optional - column highlighting
{"column": "Performance"}
],
"center_table_row": 0, # optional - center row
"center_table_column": "Salary" # optional - center column
}
🚦 Return Values
The component returns detailed interaction data:
{
"swipedCards": [
{"index": 0, "action": "right"}, # Liked first card
{"index": 1, "action": "left"} # Passed second card
],
"lastAction": {
"cardIndex": 1,
"action": "left"
},
"totalSwiped": 2, # Total cards swiped
"remainingCards": 8 # Cards left in stack
}
🎨 Theme Integration
- Buttons and default table highlights adapt automatically to the active Streamlit theme.
- No flags required: the component derives colors from your app theme (or defaults if none is set).
- Adjust table readability with
table_font_size(px); optionally trim rendered data withtable_max_rowsandtable_max_columnsfor smaller layouts.
🚀 Example App
A comprehensive example showcasing all features is provided in example.py:
streamlit run example.py
🛠️ Development
Local Development
# Clone the repository
git clone https://github.com/julianpaulussen/streamlit-swipecards.git
cd streamlit-swipecards
# Install dependencies
pip install -r requirements.txt
# Run the example
streamlit run example.py
Building
# Build the package
python setup.py sdist bdist_wheel
# Install locally for testing
pip install -e .
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
📞 Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: julien.playsde@gmail.com
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_swipecards-0.4.2.tar.gz.
File metadata
- Download URL: streamlit_swipecards-0.4.2.tar.gz
- Upload date:
- Size: 31.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a068a59581318b6cffd1b4da571ec4b96ed427a4068dfa7cd7f0e06c552ba9f
|
|
| MD5 |
b14c3fef29ae558f574ce97eb2151fec
|
|
| BLAKE2b-256 |
2377e8192a6495cf26c86ac25ee15c160147f8d7b35a42e7df7640a4ba028011
|
File details
Details for the file streamlit_swipecards-0.4.2-py3-none-any.whl.
File metadata
- Download URL: streamlit_swipecards-0.4.2-py3-none-any.whl
- Upload date:
- Size: 30.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b38da99c07ea9dae017b91da453ea1ee4768e89f8f251aa442c0be93547f28f
|
|
| MD5 |
4c70b9e52d73e4ee73f282043578ccba
|
|
| BLAKE2b-256 |
cfbf68f9100dbc5c956fe4779c3dab5dee1abb3db848254e8c5be6e4d39d9157
|