Skip to main content

No project description provided

Project description

hop3-cli

Command-line interface for interacting with Hop3 servers.

Overview

hop3-cli is a thin client that communicates with hop3-server via JSON-RPC over HTTP or SSH tunneling. It provides a familiar Heroku-like CLI experience for deploying and managing applications.

Features

  • Application management: Deploy, start, stop, restart, and scale applications
  • Environment variables: Securely manage app configuration
  • Log streaming: View real-time application logs
  • Addon management: Provision and manage backing services (PostgreSQL, Redis, MySQL)
  • SSH tunneling: Secure communication with remote servers
  • Multiple output formats: Human-readable, JSON, or quiet mode

Installation

pip install hop3-cli

Quick Start

# Initialize connection to a Hop3 server
hop3 init user@hop3.example.com

# Or configure via environment
export HOP3_API_URL="ssh://user@hop3.example.com"

# List applications (no app target needed)
hop3 apps

# Bind a default app for this shell/context (sticky)
hop3 use myapp

# From here on, app-scoped commands resolve myapp automatically:
hop3 logs
hop3 config set KEY=value
hop3 restart

App Resolution

Commands that act on a single app (logs, restart, config set, run, …) no longer take the app name as a positional argument. Instead the CLI resolves it from a layered chain, walking sources until one supplies a value (ADR 036 D7):

  1. --app <name> / -a <name> — explicit flag, wins over everything.
  2. $HOP3_APP — environment variable for the current shell.
  3. .hop3-app — one-line file in CWD or any ancestor up to $HOME. Drop it in a project repo and hop3 from inside picks up the right app.
  4. hop3.toml [cli].app — same search path as .hop3-app, lower priority.
  5. Active context's default_app — set via hop3 use <app>.

Use hop3 --why <command> to print the full trace and see which source won.

# Explicit (always works):
hop3 logs --app myapp
hop3 config set --app myapp KEY=value

# Sticky app for the context:
hop3 use myapp
hop3 logs

# Per-shell:
export HOP3_APP=myapp

# Per-directory:
echo myapp > .hop3-app

# Debug:
hop3 --why logs

See CLI Reference: App Resolution for the full specification.

Configuration

Configuration can be set via environment variables or config file (~/.config/hop3-cli/config.toml).

Variable Description Default
HOP3_API_URL Server URL (HTTP or SSH) -
HOP3_API_TOKEN Authentication token -
HOP3_APP Default app for app-scoped commands -
HOP3_CONTEXT Active context name -
HOP3_DEV_MODE Enable development mode false

Architecture

hop3-cli/
├── src/hop3_cli/
│   ├── main.py              # Entry point, argument parsing
│   ├── config.py            # Configuration management
│   ├── core/
│   │   └── resolution.py    # App resolution chain (ADR 036 D7)
│   ├── rpc/
│   │   └── client.py        # JSON-RPC client with SSH tunnel
│   ├── commands/
│   │   ├── local.py         # Local commands (init, login, settings)
│   │   ├── flags.py         # CLI flag parsing (--app, --why, --json, -y, …)
│   │   └── destructive.py   # Confirmation prompts
│   └── ui/
│       └── rich_printer.py  # Output formatting
└── tests/

Development

# Run tests
uv run pytest tests/ -v

# Lint and format
uv run ruff check src/
uv run ruff format src/

Documentation

Related Packages

  • hop3-server - The server that hop3-cli communicates with
  • hop3-tui - Alternative terminal UI interface

License

Apache-2.0 - Copyright (c) 2024-2026, Abilian SAS

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

hop3_cli-0.5.0.dev1.tar.gz (75.1 kB view details)

Uploaded Source

Built Distribution

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

hop3_cli-0.5.0.dev1-py3-none-any.whl (97.7 kB view details)

Uploaded Python 3

File details

Details for the file hop3_cli-0.5.0.dev1.tar.gz.

File metadata

  • Download URL: hop3_cli-0.5.0.dev1.tar.gz
  • Upload date:
  • Size: 75.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for hop3_cli-0.5.0.dev1.tar.gz
Algorithm Hash digest
SHA256 5f422d30b28c6a981e53379c20dcf7504d947a614b25d25f2ff7752c60df35d4
MD5 47d33809755e1d5c3cb7b001965422b0
BLAKE2b-256 1e55fdcf95476449c545a3f839f13c22a11e246644b770e42ff897ef008e210f

See more details on using hashes here.

File details

Details for the file hop3_cli-0.5.0.dev1-py3-none-any.whl.

File metadata

  • Download URL: hop3_cli-0.5.0.dev1-py3-none-any.whl
  • Upload date:
  • Size: 97.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for hop3_cli-0.5.0.dev1-py3-none-any.whl
Algorithm Hash digest
SHA256 443cd9dba7db5045eeeeb92fc1608a2c4a6dd8e0e940ff7722fd100006c1e1be
MD5 7362de67ca3b2d13810f09f4f85b7943
BLAKE2b-256 c16d300ab3e85ecd28d99275e67fa7ebf1a1e7cdc2d5397fd35f8c32f356deda

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