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.5.tar.gz (33.2 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.5-py3-none-any.whl (31.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: streamlit_swipecards-0.4.5.tar.gz
  • Upload date:
  • Size: 33.2 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.5.tar.gz
Algorithm Hash digest
SHA256 65158ec0d4ce687a101b110cceec97d3e1af359458901c6a550630f26341390d
MD5 092f78d9df4b25f736ca8005ebd6f58e
BLAKE2b-256 d531c77a4011a9f06d5508141eca9fe57c7425a22ba65213a6ce9474d64d7001

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for streamlit_swipecards-0.4.5-py3-none-any.whl
Algorithm Hash digest
SHA256 9a417c83778e004f87e2079f7c6ae78d5cadfbf077a6fa8e126cf74d901a4853
MD5 8a0e0cd06c508d1279da2031324dd51e
BLAKE2b-256 5b33b241eb7e3f987b23326ca932910e244d061a70558b5dfb664a284542a990

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