Skip to main content

A service manager for managing multiple services in a project

Project description

Runnem

Light-weight service manager for local project development. Makes switching between projects a breeze.

Why Runnem?

  • One command to rule them all – start, stop and inspect every service in your project without memorising half-a-dozen shell scripts.
  • Native speed & tooling – runs processes directly (no mandatory Docker), leveraging battle-tested GNU screen under the hood.
  • Port-safe project switching – makes it easy to switch between projects while avoiding port clashes.

Installation

pip install runnem   # Python ≥ 3.8 on Linux, macOS or WSL-enabled Windows

Quick start

# 1 · Create a config for the current directory
runnem init myproject            # omit the name to use the folder name

# 2 · Edit runnem.yaml and add your services
$EDITOR runnem.yaml

# 3 · Launch everything
runnem up                        # starts all services in the right order

# 4 · Check what’s running
runnem list                      # or: runnem ls

# 5 · Stop when you’re done
runnem down                      # stops every service cleanly

Tip: Need only one service? Pass its name to up or down, e.g. runnem up api.

Configuration example (runnem.yaml)

project_name: myproject  # required

services:
  database:
    command: cd database && docker-compose up
    url: postgresql://localhost:5432

  api:
    command: cd api && poetry run uvicorn main:app --reload --port 8000
    url: http://localhost:8000/health
    depends_on: [database]

  frontend:
    command: cd frontend && npm run dev
    url: http://localhost:3000
    depends_on: [api]
Key Required Description
command Shell command executed inside its own screen session.
url Health-check endpoint and source of the port number; Runnem waits for it to respond before starting dependants.
depends_on List of service names that must be running first.

Ports are inferred from the url – specify one if you want automatic conflict resolution.

Everyday commands

Task Command
Start all services runnem up
Start one service runnem up <service>
Stop all services runnem down
Stop one service runnem down <service>
View live logs runnem log <service>
List status runnem list (or ls)
Free a busy port runnem kill <port>

Multiple projects

Runnem looks for the nearest runnem.yaml when you run a command.
If services from another project are still running you’ll see a warning and can stop them with:

runnem down     # executed from *any* project directory

Contributing

Found a bug, want a feature or to polish the docs? PRs are welcome!

  • Fork the repo & git clone it.
  • pip install -e . inside a virtualenv.
  • Create a feature branch (git switch -c my-fix).
  • Commit with clear messages and open a PR.

License

MIT © 2025 Runnem contributors

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

runnem-0.1.3.tar.gz (17.0 kB view details)

Uploaded Source

Built Distribution

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

runnem-0.1.3-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

File details

Details for the file runnem-0.1.3.tar.gz.

File metadata

  • Download URL: runnem-0.1.3.tar.gz
  • Upload date:
  • Size: 17.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.4

File hashes

Hashes for runnem-0.1.3.tar.gz
Algorithm Hash digest
SHA256 fafb8c6fd5eb9e28bad8c2e599fbf8e851273f45ed0cdcec881dcdb7429baac3
MD5 687c3e40ecbd4e6ace540943bc25e9e6
BLAKE2b-256 215062686309a03b3a001526b5010bc5da253315102d8fc37eb28a23cea90e22

See more details on using hashes here.

File details

Details for the file runnem-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: runnem-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 11.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.4

File hashes

Hashes for runnem-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 05ba5d023fa1d4ef851d770b24d11d2600074af8fb33da75a8caa1e9699a5357
MD5 a0b64ebb5849af938f2630e70f38b027
BLAKE2b-256 ecc719b7d6cfe47b700bb84512aa120668e78d79b9bc24b456fa9276c29ddbcb

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