# Kompozit

{% embed url="<https://github.com/veerendra2/kompozit>" %}

> ℹ️ Mostly likely you may want to use [Use multiple Compose files](https://docs.docker.com/compose/how-tos/multiple-compose-files/) in Docker Compose itself.

Declarative Configuration Management Tool for Docker Compose.

*Like* [*`kustomize.io`*](https://kustomize.io/)*, but for* [*Docker Compose*](https://docs.docker.com/compose/)*.*

<figure><img src="/files/w0RFsgHqAOrujwG7pbrC" alt="" width="188"><figcaption></figcaption></figure>

### Features

Kompozit simplifies complex Docker Compose setups using declarative overlays, supporting:

* [**`patchesJSON6902`**](https://datatracker.ietf.org/doc/html/rfc6902): Precise modifications with JSON Merge Patch.
* [**`patchesStrategicMerge`**](https://stackoverflow.com/q/71165168/2200798): Flexible hierarchical changes with Strategic Merge Patch.

### Resources

* 📖 [Documentation](https://veerendra2.gitbook.io/kompozit)
* 🛠️ [Examples](https://github.com/veerendra2/kompozit/tree/main/examples)
* 🗂️ [Github Repo](https://github.com/veerendra2/kompozit)

### But Why...? 🤔

There are scenarios where you might need different Docker Compose configurations for the same application on different machines.

* For example, I use slightly different configurations for the Traefik reverse proxy when managing my public WordPress site versus my home server. Instead of maintaining multiple, slightly different `docker-compose.yml` files for the same app, you can use kompozit to simplify and manage these variations efficiently.

Additionally, kompozit allows you to combine multiple `docker-compose.yml` files into a single stack.

* For instance, you can keep a generic `docker-compose.yml` for PostgreSQL in a central location and customize it for different stacks in other locations as needed.

### Installation 💻

#### PyPi

> <https://pypi.org/project/kompozit/>

```bash
python -m pip install kompozit

kompozit -h
usage: kompozit [-h] [-b BUILD_PATH] [-o OUTPUT_DIR] [-v]

Declarative Configuration Management Tool for Docker Compose.

options:
  -h, --help            show this help message and exit
  -b, --build BUILD_PATH
                        Path to a directory containing 'kompozition.yaml' or 'kompozition.yml'. (default: .)
  -o, --output-dir OUTPUT_DIR
                        Directory to save the generated Docker Compose files. (default: None)
  -v, --version         Show kompozit version
```

#### Docker

> <https://hub.docker.com/r/veerendra2/kompozit>

```bash
docker pull veerendra2/kompozit
```

### Usage Examples ⚙️

```bash
git clone git@github.com:veerendra2/kompozit.git
cd kompozit
python -m pip install .

kompozit --build ./examples/overlay
...

# inside docker
docker pull kompozit:latest
docker run -it --rm -v ./examples:/examples kompozit:latest -b /examples/overlay
```

### Local Development 🔧

```bash
git clone git@github.com:veerendra2/kompozit.git
cd kompozit

python -m venv venv
source venv/bin/activate
pip install -e .
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://veerendra2.gitbook.io/kompozit/readme.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
