Skip to main content

LaunchLine

CI Release PyPI Python

A lightweight terminal launcher for interactive CLI tools. Define your frequently used commands in a TOML config file, then pick them from a fuzzy-searchable menu instead of remembering flags and paths.

LaunchLine demo

Why

Switching between CLI tools — AI assistants, shells, dev utilities — means remembering commands, flags, working directories, and environment variables. LaunchLine puts them all in one menu so you press a number or type a few letters instead.

Features

  • Fuzzy search — type any substring to narrow the list instantly
  • Numbered shortcuts — press a digit to launch directly
  • Per-entry environment and working directory — set once, forget forever
  • Auto-restart or exit — configurable behavior after a tool exits
  • Zero runtime dependencies — pure Python 3.12+, nothing to install beyond itself
  • Auto-generated starter config — creates ~/.config/launchline/config.toml on first run if no config exists
Fuzzy search Arrow-key navigation
Search Navigate

Installation

uv tool install launchline

Or with pip:

pip install launchline

From source

git clone https://github.com/mikejhill/launchline.git
cd launchline
uv tool install .

Run without installing

git clone https://github.com/mikejhill/launchline.git
cd launchline
uv sync --group dev
uv run launchline

Quick Start

  1. Run launchline. If no config exists, a starter config is created at ~/.config/launchline/config.toml.
  2. Edit the config to add your tools.
  3. Run launchline again.

Override the config path:

# CLI flag (highest priority)
launchline --config ~/my-config.toml

# Environment variable
export LAUNCHLINE_CONFIG=~/my-config.toml
launchline

Resolution order: --config flag > LAUNCHLINE_CONFIG env var > default path.

Configuration Reference

Config file format is TOML. The file has an optional [settings] table and one or more [[entries]] tables.

[settings]

Key Type Default Description
title string "LaunchLine" Window/tab title shown while the launcher is active
on_exit string "restart" Behavior after a launched tool exits: restart or exit
show_exit bool true Show the Exit entry (shortcut 0) in the menu
clear_on_launch bool true Clear terminal before launching an entry
ghost_text bool true Show the highlighted entry name as an autocomplete hint on prompt
numeric_trigger bool true Pressing a digit immediately launches the matching entry
refresh_on_return boolean false Regenerate a dynamic root after returning from a submenu

[[entries]]

Each [[entries]] table defines one launchable tool:

Key Type Required Default Description
name string yes — Display name shown in the menu
command string yes — Executable to run
args list of strings no [] Arguments passed to the command
description string no "" Short description shown next to the name
working_directory string no — Working directory for the subprocess
env table no {} Extra environment variables (KEY = "value")
id string no "" Stable per-menu identity for refreshed selection
menu table no - Submenu declaration, exclusive with command fields

Validation Rules

  • A root requires nonempty [[entries]] or a [provider] declaration.
  • Every entry needs name and either command or menu.
  • on_exit must be "restart" or "exit".
  • args must be a list (not a bare string).
  • env must be a TOML table (not a string or list).
  • If working_directory does not exist at load time, it is silently reset to None (a warning is logged).

Example Config

[settings]
title = "My Tools"
on_exit = "restart"
show_exit = true
clear_on_launch = true
ghost_text = true
numeric_trigger = true

[[entries]]
name = "GitHub Copilot CLI"
command = "copilot"

[[entries]]
name = "Claude Code"
command = "claude"
description = "Anthropic coding agent"
working_directory = "~/projects"

[[entries]]
name = "PowerShell"
command = "pwsh"
args = ["-NoProfile"]
env = { TERM = "xterm-256color" }

Usage

Key Action
1–9 Launch entry by number
0 Exit (when show_exit is enabled)
Type any text Fuzzy-filter the entry list
Up / Down Move highlight
Enter Launch highlighted entry
Escape Clear filter (or exit if filter is empty)
Backspace Delete last character from filter
Ctrl+U Clear filter

Windows Terminal Integration

Add LaunchLine as a Windows Terminal profile to use it as your default launcher. The package bundles an icon that you can reference via launchline --icon-path:

// In your Windows Terminal settings.json → profiles.list
{
  "name": "LaunchLine",
  "commandline": "launchline",
  "startingDirectory": "%USERPROFILE%",
  // Run: launchline --icon-path
  "icon": "C:/Users/you/.local/lib/.../launchline/assets/launchline.ico"
}

Set it as the default profile to see the launcher every time you open a terminal.

Development

uv sync --group dev
uv run pytest
uv run ruff check .
uv run mypy src

License

MIT

See Also

  • LaunchLine (Rust) — a Rust implementation with the shared configuration and keyboard contract, ships as a single native binary.

Compatibility and validation

Use launchline --check-config to validate configuration without opening the menu. Set NO_COLOR for a selection marker without ANSI color. See the compatibility matrix, reproducible test and performance results, and release readiness.

[provider]

The same table is accepted under entries.menu.provider. See the menu lifecycle and provider contract for nesting, caching, refresh/back behavior, limits, errors and examples.

Field Type Default Description
command string required Explicit trusted provider executable
args string array [] Literal argv
env string table {} Environment overlay
working_directory string inherited Provider working directory
timeout_seconds integer 10 Deadline from 1 to 300 seconds

Metadata

Release files for launchline 0.4.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 launchline 0.4.0
File Size Uploaded Provenance
launchline-0.4.0.tar.gz 327.8 kB With provenance Details

Built distribution (wheel)

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

Total release size: 382.6 kB

Release files / launchline-0.4.0.tar.gz

Download URL launchline-0.4.0.tar.gz
Size 327.8 kB
Tags Source
SHA-256 checksum
How to use checksums
6d38d354de3d34b2bc6ce0b85322263e9f468cb746d37090e833d78f9a70ee75
BLAKE2b-256 checksum
How to use checksums
4681f427348aca9120b9d7a922dc09ceabcef91b5b653924262c83440bab0a5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 23, 2026.

Transparency log

Release files / launchline-0.4.0-py3-none-any.whl

Download URL launchline-0.4.0-py3-none-any.whl
Size 54.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
94d419694eabc0a449ddccce94f1379252f8e4b50cf5ea230698e7b7a6a8abd4
BLAKE2b-256 checksum
How to use checksums
3d1ceee0a67e72d46cbce79736a7c8a6fc1a4a0483a1512c35d347a52d9799a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 23, 2026.

Transparency log

Security for launchline 0.4.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for launchline-0.4.0.tar.gz

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 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files Full provenance

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