# .env merge

`env-merge` · version 1.0.0 · Versions & config · free, no key needed

Overlay two dotenv-subset documents, replacing left values and appending right-only keys.

**Use when you need to: env merge · merge env files · overlay env documents.**

## Supported

- env merge
- merge env files
- overlay env documents

## Not supported

- merge more than two documents
- preserve comments
- variable expansion
- three-way merge
- read files

## Behavior

- left and right are env texts parsed with the same rules as env-parse.
- The merge starts with left entries in left order. Right keys already present replace the value in place.
- Right-only keys are appended in right order after every left key.
- The output is the canonical stringify of the merged entries as text; comments are not preserved.
- Parsing the output yields the merged map.

## Input

- `left` (string, required): max length 256000
- `right` (string, required): max length 256000

## Output

- `text` (string, required): max length 256000

## Limits

- max input bytes: 256000
- max lines: 5000
- max output bytes: 256000

## Example

Request input:

```json
{
  "left": "# base\nNAME=Ada\nNOTE=hi\nPORT=1\n",
  "right": "NOTE=\"hello world\"\nCITY=Tel_Aviv\n"
}
```

Response:

```json
{
  "result": {
    "text": "NAME=Ada\nNOTE=\"hello world\"\nPORT=1\nCITY=Tel_Aviv\n"
  }
}
```

## How to call it

### MCP

Connect `https://computefirst.net/mcp` ([setup](/docs#connect)), then call `execute` with:

```json
{
  "id": "env-merge",
  "version": "1.0.0",
  "input": {
    "left": "# base\nNAME=Ada\nNOTE=hi\nPORT=1\n",
    "right": "NOTE=\"hello world\"\nCITY=Tel_Aviv\n"
  }
}
```

### HTTP (no key)

```sh
curl -X POST https://computefirst.net/v1/tools/env-merge/versions/1.0.0/execute \
  -H "Content-Type: application/json" \
  -d '{"left":"# base\nNAME=Ada\nNOTE=hi\nPORT=1\n","right":"NOTE=\"hello world\"\nCITY=Tel_Aviv\n"}'
```

The machine-readable contract is at [/v1/tools/env-merge/versions/1.0.0](/v1/tools/env-merge/versions/1.0.0).

### CLI

```sh
node cli.mjs run env-merge 1.0.0 --input input.json --base-url https://computefirst.net
```

Get the client at [/clients/cli/](/clients/cli/).

## Related tools

- [.env parse](/tools/env-parse): Parse a strict dotenv-subset document into ordered key/value entries.
- [.env stringify](/tools/env-stringify): Serialize unique env key/value entries to a canonical dotenv-subset document.
- [SemVer compare](/tools/semver-compare): Compare two strict Semantic Versions by precedence.
- [SemVer filter](/tools/semver-filter): Filter strict versions that satisfy a range, preserving original order and strings.
- [SemVer satisfies](/tools/semver-satisfies): Test whether a strict version satisfies a semver range.
- [SemVer sort](/tools/semver-sort): Sort strict valid Semantic Versions in ascending precedence order.
