Skip to main content

Streamlit Desktop App

Seamlessly transform your Streamlit apps into standalone desktop applications. This library enables you to run your web-based Streamlit projects in native desktop windows, providing a polished and intuitive user experience—no browser required!


🚀 Features

  • Effortless Deployment
    With built-in PyInstaller support, convert your Streamlit app into a standalone executable in just one command.

  • Native Desktop Experience
    Run your Streamlit app in a native desktop window for a true desktop-like feel.

  • Automatic Cleanup
    The Streamlit process ends automatically when the desktop window is closed, ensuring no lingering background processes.


📖 Quick Start

Installation

You can install streamlit_desktop_app via pip or Poetry. Both options ensure an easy and smooth installation process.

Using pip

pip install streamlit-desktop-app

Using Poetry

Important Note: Due to PyInstaller's current limitations, ensure your pyproject.toml specifies a compatible Python version range:

python = "^3.10,<3.14"

Then install the package:

poetry add streamlit-desktop-app

Verify the Installation

To verify the installation, run the following command:

python -m streamlit-desktop-app

This will open a desktop window with a pre-built Streamlit app that includes a simple layout demonstrating the library's capabilities.


🎨 Create and Build Your App

Step 1: Create an Example App

Start by creating a simple example.py file:

import streamlit as st

st.title("Streamlit Desktop App Example")
st.write("This is a simple example running in a desktop window!")
st.button("Click me!")

Step 2: Build Your App into an Executable

To create a standalone executable, run the following command:

streamlit-desktop-app build example.py --name MyStreamlitApp

This command will:

  1. Build your Streamlit app into an executable.
  2. Place the executable in the dist/ directory.

Advanced Options

Example with PyInstaller Options

If you want more control over the build process, use the --pyinstaller-options parameter. For example:

streamlit-desktop-app build example.py --name MyStreamlitApp --icon path/to/icon.ico --pyinstaller-options --onefile --noconfirm
  • --onefile: Packages everything into a single executable.
  • --noconfirm: Suppresses confirmation prompts during the build.

Example with Streamlit Options

To customize the behavior of the Streamlit app, use the --streamlit-options parameter. For example, to enable a dark theme:

streamlit-desktop-app build example.py --name MyStreamlitApp --icon path/to/icon.ico --streamlit-options --theme.base=dark

🛠 Advanced: Launch Programmatically

If you prefer programmatic control, use the start_desktop_app function to launch your app in a desktop window:

from streamlit_desktop_app import start_desktop_app

start_desktop_app("example.py", title="My Streamlit Desktop App")

This method is useful for:

  • Embedding additional logic before launching your app.
  • Development and testing.

API Reference

start_desktop_app

start_desktop_app(script_path, title="Streamlit Desktop App", width=1024, height=768, options=None)
  • script_path (str): Path to the Streamlit script to be run.
  • title (str): Title of the desktop window (default: "Streamlit Desktop App").
  • width (int): Width of the desktop window (default: 1024).
  • height (int): Height of the desktop window (default: 768).
  • options (dict): Additional Streamlit options (e.g., server.enableCORS).

Manually Run PyInstaller

If you prefer manual control, use PyInstaller directly to build your app:

pyinstaller --collect-all streamlit --copy-metadata streamlit --name "MyStreamlitApp" --onefile --windowed --splash path/to/splash_image.png -i path/to/icon.ico example.py
  • --collect-all: Includes all static files and resources required by Streamlit.
  • --copy-metadata: Ensures the metadata for Streamlit is included.
  • --onefile: Packages everything into a single executable.
  • --splash: Displays a splash screen while the app initializes.

⚠️ Important for Windows Users

To run desktop applications on Windows, you must have the .NET Framework (> 4.0) and Edge Webview2 installed. This is required for compatibility with pywebview.

Installation Steps:

  1. .NET Framework:
    • Download and install the latest version of the .NET Framework from the official Microsoft website if it’s not already installed.
    • Verify the installation by checking your system's installed programs list or using the dotnet --info command in the command prompt.
  2. Edge Webview2:

🤝 Contributing

We welcome contributions! If you have suggestions or feature requests, feel free to open an issue or submit a pull request.

Development Setup

  1. Clone the repository:

    git clone https://github.com/ohtaman/streamlit-desktop-app.git
    
  2. Install dependencies with Poetry:

    poetry install
    
  3. Run the tests to ensure everything works as expected:

    poetry run pytest
    

📜 License

This project is licensed under the Apache-2.0 License. See the LICENSE file for details.


🎉 Acknowledgments

  • Streamlit for its powerful framework.
  • PyWebview for enabling seamless desktop integration.
  • PyInstaller for making standalone executable creation a breeze.

Contact

If you have any questions or issues, feel free to reach out via GitHub Issues.

Metadata

Release files for streamlit-desktop-app 0.3.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for streamlit-desktop-app 0.3.4
File Size Uploaded
streamlit_desktop_app-0.3.4.tar.gz 13.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for streamlit-desktop-app 0.3.4
File Interpreter ABI Platform
streamlit_desktop_app-0.3.4-py3-none-any.whl Python 3 none any Details

Total release size: 26.8 kB

Release files / streamlit_desktop_app-0.3.4.tar.gz

Download URL streamlit_desktop_app-0.3.4.tar.gz
Size 13.1 kB
Tags Source
SHA-256 checksum
How to use checksums
b8b9d62ff42fb0670bc14b161625009149b836389d60f809089fd4eb1df8799c
BLAKE2b-256 checksum
How to use checksums
c1e848b8fe5407c9621a6bfe13d5c5cb657ba8559aeb576268706037d17c1cbf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 14, 2024.

Transparency log

Release files / streamlit_desktop_app-0.3.4-py3-none-any.whl

Download URL streamlit_desktop_app-0.3.4-py3-none-any.whl
Size 13.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5bd5d914666bda8590128095b953615c7b6a90d42d0ad42c0e797bfc8c820922
BLAKE2b-256 checksum
How to use checksums
353e716be0a71f8f9ba72e20b32a3cf18d5b773014c919217c4f7aab7f1d6cfb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.0.1 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 14, 2024.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.4 This release

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page