Skip to main content

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

PyPI version Python 3.10+ Streamlit

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)
colors dict | None Optional color overrides for buttons and base theme
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 with table_max_rows and table_max_columns for smaller layouts.

Custom Colors

You can override component colors via the colors parameter. Provide valid CSS colors. Keys can be top-level or nested under buttons.

Example (customize button backgrounds and text):

result = streamlit_swipecards(
    cards=cards,
    colors={
        # Buttons (top-level or nested under "buttons")
        "like_bg": "#22c55e",   # green
        "like_fg": "#ffffff",
        "pass_bg": "#ef4444",   # red
        "pass_fg": "#ffffff",
        "back_bg": "#374151",   # gray
        "back_fg": "#ffffff",
        "btn_border": "#ffffff",
        # Base colors (optional)
        "card_bg": "#1f2937",
        "background_color": "#0b0f16",
        "secondary_background_color": "#111827",
        "text_color": "#e5e7eb",
    },
)

Nested form also works:

colors={
    "buttons": {
        "like": {"bg": "#22c55e", "fg": "#fff"},
        "pass": {"bg": "#ef4444", "fg": "#fff"},
        "back": {"bg": "#374151", "fg": "#fff"},
        "border": "#fff",
    }
}

🚀 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.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

📞 Support

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

streamlit_swipecards-0.4.7.tar.gz (36.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

streamlit_swipecards-0.4.7-py3-none-any.whl (34.4 kB view details)

Uploaded Python 3

File details

Details for the file streamlit_swipecards-0.4.7.tar.gz.

File metadata

  • Download URL: streamlit_swipecards-0.4.7.tar.gz
  • Upload date:
  • Size: 36.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for streamlit_swipecards-0.4.7.tar.gz
Algorithm Hash digest
SHA256 2e0ac004957d3d1610a66854b9f6c9c638eb7455a1c7b3fc65e3a4c96072a271
MD5 8978211314b39dc13dda543479d5d69d
BLAKE2b-256 d4b11581b804436b3bb79c797618333a829894059d36cc3073fef0e5d0776bfd

See more details on using hashes here.

File details

Details for the file streamlit_swipecards-0.4.7-py3-none-any.whl.

File metadata

File hashes

Hashes for streamlit_swipecards-0.4.7-py3-none-any.whl
Algorithm Hash digest
SHA256 f432f09326307600ef809cf4ae60f240192fb6ba9ddd6c1e5d05671ba826ed15
MD5 245235c964c30d3f2fb8700cdf04b633
BLAKE2b-256 20d9d3b2f055957f1d0adc7564e1ba57c2d73ac898cac79783fde3a5a0122621

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page