> ## Documentation Index
> Fetch the complete documentation index at: https://docs.envlink.projectinwork.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Artifacts

> Keep a build's output, sealed under your project's key, and share it with a signed link that expires.

An **artifact** is a file you keep so people can fetch it later: a binary, an archive, a report. It's stored sealed in object storage under your project's key, expires on its own, and can be shared through a signed link that needs no account.

## Store one

```bash theme={null}
envctl artifact put .remote/linux-build-3f2a/out/server --expires 7d --link 24h --label build=142
```

```text theme={null}
Stored server as art_oha7mmjakblbfm6q: 69.0 KB in 2 chunks, sealed under github.com/acme/app's key, in 610ms
  sha256 5fdd6afa7b13…, kept until Oct 25 09:12
  link, until Oct 19 09:12: https://envlink-api.projectinwork.com/a/art_oha7mmjakblbfm6q?t=…
```

* `--expires` sets how long it's kept: from a minute to 30 days, 7 days by default.
* `--link` also makes a signed download link lasting that long. A link never outlives its artifact.
* `--project` picks whose key seals it; by default, the folder's git remote and path.
* `--name` stores it under another name. Artifacts are at most 2 GiB.

## Share it

Anyone with the link can download it until the link expires:

```bash theme={null}
curl -fsSLO "https://envlink-api.projectinwork.com/a/art_oha7mmjakblbfm6q?t=…"
```

Make another link at any time:

```bash theme={null}
envctl artifact link art_oha7mmjakblbfm6q --expires 1h
```

A link that's been altered gets `403`; once the artifact expires or is deleted, its links get `410`.

## Fetch it

```bash theme={null}
envctl artifact get art_oha7mmjakblbfm6q -o server
```

`get` writes to a temporary file, checks the size and the sha256, and only then moves it into place.

## List and delete

```bash theme={null}
envctl artifact ls --project github.com/acme/app
envctl artifact rm art_oha7mmjakblbfm6q
```

Deleting removes its stored objects and stops its links. Expired artifacts are deleted for you. Shredding the project deletes every artifact sealed under its key.

## How it's stored

The file is cut into the same content-defined chunks as [file sync](/guides/file-sync). Each chunk is sealed under the project's key and packed into segments, with a sealed manifest that lists the chunks in order. A download opens each chunk and checks it against the manifest as it streams. A chunk out of place stops the download short of its `Content-Length`, so no client takes a damaged file as whole.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.