Skip to main content

desto Logo

desto lets you run and manage your bash and Python scripts in the background (inside tmux sessions) through a simple web dashboard. Launch scripts, monitor their and your system's status, view live logs, and control sessions—all from your browser.

PyPI version PyPI Downloads Documentation Status Tests Ruff security: bandit gitleaks Contributions welcome


The key features are:

  • One-click session control: Launch, monitor, and stop tmux sessions from your browser.
  • 🐚 Bash & 🐍 Python support: Run both bash (.sh) and Python (.py) scripts seamlessly.
  • Script management: Use your existing scripts, write new ones, edit, save, or delete them directly in the dashboard.
  • ⭐ Favorite commands: Save, organize, and quickly run your frequently used commands with usage tracking and search.
  • Live log viewer: Watch script output in real time and view logs for each session.
  • Live system stats: See real-time CPU, memory, and disk usage at a glance.
  • Scheduling: Schedule scripts or script chains to launch at a specific date and time.
  • Script chaining: Queue multiple scripts to run sequentially in a single session.
  • Session history: Redis integration for persistent session tracking and history. See what is Redis →
  • Long-term persistence: Optional SQLite database for durable session history that survives Redis key expiration—no extra services needed.
  • Scheduled job control: Manage scheduled jobs with a dedicated table—cancel any scheduled job with a click.
  • Session & log cleanup: Clear session history and delete logs for all or selected sessions.
  • 🔒 Optional password login: Require a password to open the dashboard with DESTO_PASSWORD. The dashboard listens on localhost only by default. See the Security / Authentication section below.
  • Notifications: Optional Pushbullet notifications for job/session finishes — set the DESTO_PUSHBULLET_API_KEY environment variable or add the key in Settings to receive desktop/mobile pushes when jobs complete.
  • Persistent script & log storage: Scripts and logs are saved in dedicated folders for easy access.
  • 🖥️ Command-line interface: Manage sessions, view logs, and control scripts from the terminal with our modern CLI. Learn more →

🎬 Demo

Desto Demo

✨ desto Overview

👀 Dashboard Overview Dashboard Screenshot
🚀 Launch your scripts as `tmux` sessions

When you start desto, it creates desto_scripts/ and desto_logs/ folders in your current directory. Want to use your own locations? Just change these in the settings, or set the DESTO_SCRIPTS_DIR and DESTO_LOGS_DIR environment variables.

Your scripts show up automatically—no setup needed. Both .sh (bash) and .py (Python) scripts are supported with automatic detection and appropriate execution. Ready to launch? Just:

  1. Name your tmux session
  2. Select one of your scripts
  3. (OPTIONAL) edit and save your changes
  4. Click "Launch"! 🎬
Custom Template
✍️ Write new scripts and save them

If you want to compose a new script, you can do it right here, or simply just paste the output of your favorite LLM :) Choose between bash and Python templates with syntax highlighting and smart defaults.

Custom Template
⭐ Favorite Commands

Save, organize, and quickly run your frequently used commands with usage tracking and search.

Favorites Screenshot
⚙️ Change settings

More settings to be added!

Custom Template
📜 View your script's logs Custom Template
🌙 Dark Mode

Switch to dark mode for comfortable viewing in low-light environments.

Dark Mode Screenshot

⚡ Quick Start with Docker 🐳

The fastest way to ship desto is by using Docker Compose 🚢

You only need Docker and Docker Compose installed on your machine. If you don't have them yet, you can find installation instructions on the Docker website and Docker Compose documentation (or follow your favorite LLM's instructions 😉).

Start desto in just a few steps:

  1. Clone the repository and go to it's main directory

    git clone https://github.com/kalfasyan/desto.git && cd desto
    
  2. Start the application with Docker Compose

    docker compose up -d
    

✅ Done! 🎉

You’re all set—your desto dashboard is now running at:
🌐 http://localhost:8809

🚀 Essential Docker & Docker Compose Commands
# Start the app in background (Docker Compose)
docker compose up -d
# View logs (Docker Compose)
docker compose logs -f
# Stop and remove services (Docker Compose)
docker compose down
# Rebuild and start (Docker Compose)
docker compose up -d --build
# Run the container directly (plain Docker)
docker run -d -p 127.0.0.1:8809:8809 \
  -v $PWD/desto_scripts:/app/desto_scripts \
  -v $PWD/desto_logs:/app/desto_logs \
  --name desto-dashboard \
  desto:latest
# View logs (plain Docker)
docker logs -f desto-dashboard
# Stop and remove the container (plain Docker)
docker stop desto-dashboard && docker rm desto-dashboard

🗄️ Optional: Enable SQLite Long-Term Persistence

By default, desto uses Redis for session tracking with a 7-day expiration. To keep session history indefinitely, enable the built-in SQLite store by setting the SQLITE_ENABLED environment variable:

# In docker-compose.yml, change:
- SQLITE_ENABLED=true

Or when running without Docker:

export SQLITE_ENABLED=true
desto

The SQLite database is stored at desto_data/desto.db (configurable via SQLITE_DB_PATH). It requires no additional services—just a file on disk. Your data persists across Redis restarts and key expirations.

🔒 Security / Authentication

desto can run any command on the machine it runs on, so treat the dashboard like a shell:

  • Localhost by default: the dashboard listens on 127.0.0.1, so only the machine it runs on can open it. Set DESTO_HOST=0.0.0.0 to accept connections from other machines. Earlier versions listened on all interfaces, so set DESTO_HOST=0.0.0.0 to keep that behavior after upgrading.
  • Password login: set DESTO_PASSWORD to require a password for every page. A log-out button appears in the header while a password is set.
  • Startup warning: desto logs a warning when the dashboard is reachable from the network and no password is set.
  • TLS for internet access: the dashboard serves plain HTTP. If you expose it beyond your local network, put it behind a reverse proxy that terminates TLS.
Variable Default Description
DESTO_HOST 127.0.0.1 Interface to listen on. Use 0.0.0.0 for all interfaces.
DESTO_PORT 8809 Port to listen on.
DESTO_PASSWORD (unset) Enables the login page when set to a non-empty value.
DESTO_STORAGE_SECRET (random per start) Signs the browser session cookie. Set a fixed value to keep logins valid across restarts.

Docker Compose sets DESTO_HOST=0.0.0.0 inside the container but publishes port 8809 (and Redis on 6380) on 127.0.0.1 only, so only the host machine can reach them. To open the dashboard to other machines, change the mapping to "8809:8809" and uncomment DESTO_PASSWORD in docker-compose.yml. Use a reverse proxy with TLS for anything reachable from the internet.

🖥️ CLI & 📊 Dashboard Installation with uv or pip

If you are not familiar with uv, you may visit uv's official website for more information.

uv is a super-fast Python package manager and virtual environment tool, written in Rust. It helps you manage dependencies, create isolated environments, and install packages much faster than traditional tools like pip.

Requirements

  • Python 3.11+
  • tmux
  • at (for scheduling features)

Check pyproject.toml

Installation Steps

  1. Install tmux and at

    Instructions for different package managers
    • Debian/Ubuntu
      sudo apt install tmux at
      
    • Almalinux/Fedora
      sudo dnf install tmux at
      
    • Arch Linux
      sudo pacman -S tmux at
      

    Note: The at package is required for scheduling features. If you don't plan to use script scheduling, you can skip installing at.

  2. Install desto

    Installation Steps
    • (Recommended) With uv, simply run:

      uv add desto
      

      This will install desto in your project ✅
      Or if you don't have a project yet, you can set up everything with uv:

      1. Install uv by following the instructions on the official site.

      2. Create and set up your project:

        mkdir myproject && cd myproject
        uv init
        uv venv
        source .venv/bin/activate
        uv add desto
        

        Done!

    • With pip:

      pip install desto
      
  3. Run the Application

    desto
    

🔄 Auto-start on Boot (systemd)

If you want desto to start automatically when your system boots, you can install a systemd service using the CLI. This works for non-Docker installations.

# Install as a user service (recommended)
desto-cli service install

# Or install as a system service (requires sudo)
sudo desto-cli service install --system

This ensures the dashboard is always available after a reboot.

🎉 Done!
Open your browser and visit: http://localhost:8809 🚀

Global desto Installation as a uv Tool (includes CLI)

# Install desto CLI globally
uv tool install desto

# Or install from source
cd /path/to/desto
uv tool install . --force

This installs two executables:

  • desto - Web dashboard
  • desto-cli - Command-line interface (work in progress)
Quick CLI Usage

Terminal Screenshot

# Check system status
desto-cli doctor
# List all sessions
desto-cli sessions list
# Start a new session
desto-cli sessions start "my-task" "python my_script.py"
# View session logs
desto-cli sessions logs "my-task"
# Kill a session
desto-cli sessions kill "my-task"
# List all scripts
desto-cli scripts list
# Create new script
desto-cli scripts create "my_script" --type python
# Edit script in $EDITOR
desto-cli scripts edit "my_script"
# Run script in tmux session
desto-cli scripts run "my_script"
# Run script directly
desto-cli scripts run "my_script" --direct

📖 Full CLI Documentation →

The CLI provides the same functionality as the web interface but optimized for terminal use, including rich formatting, real-time log viewing, and comprehensive session management.


License

Shield: CC BY 4.0

This work is licensed under a Creative Commons Attribution 4.0 International License.

CC BY 4.0


TODO

  • Explore possibility to pause processes running inside a session

desto makes handling tmux sessions and running scripts approachable for everyone—no terminal gymnastics required!

Metadata

Release files for desto 0.7.0

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

Source distribution (sdist)

Source distribution for desto 0.7.0
File Size Uploaded
desto-0.7.0.tar.gz 21.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for desto 0.7.0
File Interpreter ABI Platform
desto-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 21.3 MB

Release files / desto-0.7.0.tar.gz

Download URL desto-0.7.0.tar.gz
Size 21.2 MB
Tags Source
SHA-256 checksum
How to use checksums
2c53e226fe88648129ec9c4588be63973e2cc24faa37e6aa050f0872456ec1ac
BLAKE2b-256 checksum
How to use checksums
f159e5a5de74829ad518eab7450da4690c3b6bfa742fd0b6591313755355113c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 13, 2026.

Transparency log

Release files / desto-0.7.0-py3-none-any.whl

Download URL desto-0.7.0-py3-none-any.whl
Size 103.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3b83861f31da09245936f67e185bd8da1da2b16d6992dca08fc921e458cf0868
BLAKE2b-256 checksum
How to use checksums
910674744430eb1e20e04dc9dc339f56498aed3d82bed842514396e4b7613cac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.0 This release

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.14

2 release files

0.4.13

2 release files

0.4.11

2 release files

0.4.10

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.0

2 release files

0.2.5

2 release files

0.2.3

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.14

1 release file

0.1.13

1 release file

0.1.12

1 release file

0.1.11

1 release file

0.1.10

1 release file

0.1.9

1 release file

0.1.8

1 release file

0.1.7

1 release file

0.1.6

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

2 release files

0.1.1

1 release file

0.1.0

2 release files

0.0.5

1 release file

0.0.4

2 release files

0.0.3

2 release files

0.0.1

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