podup 0.5.2

Translate and run docker-compose files on rootless Podman
Documentation
# podup

[![CI](https://github.com/Glyndor/podup/actions/workflows/ci.yml/badge.svg)](https://github.com/Glyndor/podup/actions/workflows/ci.yml)
[![Release](https://github.com/Glyndor/podup/actions/workflows/release.yml/badge.svg)](https://github.com/Glyndor/podup/actions/workflows/release.yml)

**podup** runs your `docker-compose.yml` on rootless Podman โ€” a single static
binary, written in Rust, with no daemon and no Python runtime.

```mermaid
flowchart LR
	A["docker-compose.yml"] --> B["podup"]
	B -->|"parse ยท substitute ยท order"| C["Podman REST API"]
	C --> D["containers"]
	C --> E["networks"]
	C --> F["volumes"]
```

## โœจ Features

- ๐Ÿš€ **Drop-in workflow** โ€” `up`, `down`, `ps`, `logs`, `exec`, `pull`, `restart`, `config`
- ๐Ÿ”’ **Rootless by design** โ€” drives rootless Podman over its Docker-compatible API
- ๐Ÿ“„ **Compose-spec parsing** โ€” YAML anchors, `extends`, `include`, profiles, `env_file`, variable substitution with modifiers
- ๐Ÿ” **Dependency-aware** โ€” `depends_on` ordering with healthcheck conditions
- ๐Ÿ‘€ **Watch mode** โ€” sync, rebuild or restart services on file changes per `develop.watch` rules
- ๐Ÿ“ฆ **Single binary** โ€” statically musl-linked on Linux, no runtime dependencies
- ๐Ÿฆ€ **Library too** โ€” embed the parser and engine in your own Rust project

## ๐Ÿ“ฅ Install

```bash
curl -fsSL https://github.com/Glyndor/podup/releases/latest/download/install.sh | bash
```

Binaries for Linux and macOS (x86_64 and arm64) plus Windows (x86_64),
SHA-256 verified, with build provenance attestations. On macOS and Windows,
podup talks to the `podman machine` VM through its host-side socket or named
pipe. Windows users download `podup-windows-x86_64.exe` from the
[releases page](https://github.com/Glyndor/podup/releases) directly. Or build
from source:

```bash
cargo build --release
```

## ๐Ÿš€ Quick start

```bash
podup up --detach                      # docker-compose.yml in the current directory
podup -f stack.yml -p myapp up -d      # explicit file and project name
podup ps                               # list project containers
podup logs api --follow                # follow one service's logs
podup down --volumes                   # tear down, removing named volumes
```

## โš–๏ธ vs. alternatives

|  | podup | docker-compose | podman-compose (Python) |
|---|---|---|---|
| Engine | rootless Podman | Docker daemon | Podman |
| Runtime | single static binary | Go binary + Docker daemon | Python + pip packages |
| Root required | no | typically yes (daemon) | no |
| Implementation | Rust | Go | Python |

## ๐Ÿฆ€ Library usage

```rust
use podup::{parse_file, podman, Engine};

#[tokio::main]
async fn main() -> podup::Result<()> {
	let file = parse_file(std::path::Path::new("docker-compose.yml"))?;
	let docker = podman::connect(None)?;
	let engine = Engine::new(docker, "myproject".to_string());
	engine.up(&file).await?;
	Ok(())
}
```

```toml
[dependencies]
podup = { git = "https://github.com/Glyndor/podup", tag = "v0.3.0" }
```

## Contributing & security

See the org-wide [contributing guide](https://github.com/Glyndor/.github/blob/main/CONTRIBUTING.md).
Report vulnerabilities privately via the Security tab โ€” never in a public issue.

## License

[Apache-2.0](LICENSE)