hop3-server
Core server for the Hop3 Platform-as-a-Service.
Overview
hop3-server is the central orchestrator that handles application deployments, process management, reverse proxy configuration, and addon services. It provides a JSON-RPC API for communication with hop3-cli and hop3-tui.
Features
- Git-push deployments: Deploy applications via
git push - Automatic build system: Detects language (Python, Node, Ruby, Go, Rust, etc.) and builds automatically
- Process management: Manages app processes based on Procfile via uWSGI
- Reverse proxy: Nginx/Caddy/Traefik with automatic SSL certificates
- Addon services: PostgreSQL, MySQL, Redis management
- Plugin architecture: Extensible via pluggy-based plugins
- JSON-RPC API: For CLI and TUI communication
Installation
Production
curl -LsSf https://hop3.cloud/install-server.py | sudo python3 -
Development
pip install hop3-server
Quick Start
# Run the server
hop3-server serve
# Run with specific host/port
hop3-server serve --host 0.0.0.0 --port 8000
Configuration
Server configuration via environment variables or /etc/hop3/config.toml:
| Variable | Description | Default |
|---|---|---|
HOP3_HOME |
Home directory | /home/hop3 |
HOP3_DATABASE_URL |
Database URL | sqlite:///hop3.db |
HOP3_SECRET_KEY |
JWT signing key | (required) |
Architecture
hop3-server/
├── src/hop3/
│ ├── server/ # Litestar ASGI application
│ │ ├── asgi.py # App factory
│ │ └── controllers/ # API endpoints
│ ├── commands/ # RPC command handlers
│ ├── deployers/ # Deployment orchestration
│ ├── orm/ # SQLAlchemy models
│ ├── plugins/ # Plugin system
│ │ ├── build/ # Builders, language toolchains
│ │ ├── deploy/ # Deployers (uWSGI, static)
│ │ ├── proxy/ # Nginx, Caddy, Traefik
│ │ └── addons/ # PostgreSQL, MySQL, Redis
│ ├── core/ # Core abstractions
│ │ ├── protocols.py # Plugin protocols
│ │ └── hookspecs.py # Hook specifications
│ └── toolchains/ # Language toolchains
└── tests/
├── a_unit/ # Unit tests
├── b_integration/ # Integration tests
└── c_e2e/ # End-to-end tests (Docker, real deploy)
Filesystem Layout
/home/hop3/
├── apps/<app_name>/
│ ├── git/ # Bare git repository
│ ├── src/ # Checked-out source code
│ ├── data/ # Persistent data
│ └── log/ # Log files
├── nginx/ # Nginx configs and certs
├── uwsgi-available/ # uWSGI configs
├── uwsgi-enabled/ # Active uWSGI configs
└── hop3.db # SQLite database
Development
# Unit tests
uv run pytest tests/a_unit/ -v
# Integration tests
uv run pytest tests/b_integration/ -v
# End-to-end tests (requires Docker)
uv run pytest tests/c_e2e/ -v
# Lint and format
uv run ruff check src/
uv run ruff format src/
Documentation
Related Packages
- hop3-cli - CLI client for this server
- hop3-tui - TUI client for this server
- hop3-installer - Installation tools
License
Apache-2.0 - Copyright (c) 2024-2026, Abilian SAS
Metadata
Release files for hop3-server 0.7.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hop3_server-0.7.4.tar.gz | 891.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hop3_server-0.7.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.0 MB
Release files / hop3_server-0.7.4.tar.gz
| Download URL | hop3_server-0.7.4.tar.gz |
|---|---|
| Size | 891.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
33fa6f3f1450dad863a7c238584a5148f56375be3aef41663bc9c95a40c16a42
|
|
BLAKE2b-256 checksum How to use checksums |
2a3389c0b0a7d2f8a79e504bf9b85dd83456c540636de7b0d1b6b251c192e9c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / hop3_server-0.7.4-py3-none-any.whl
| Download URL | hop3_server-0.7.4-py3-none-any.whl |
|---|---|
| Size | 1.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e576b75548428f29a3ccb498530322dd47dcff4ef4d5f721a7596fe7b089ac48
|
|
BLAKE2b-256 checksum How to use checksums |
31af9a3b7893d4087256144df3f289795161214d81fd2fd46e8c354a561f9c35
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|