Skip to content

Commit 56975ac

Browse files
committed
[Artifacts] add guides and ArtifactFS docs
1 parent 78b8527 commit 56975ac

18 files changed

Lines changed: 280 additions & 125 deletions

File tree

public/__redirects

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
/learning-paths/ /resources/ 301
4141
/markdown.zip /llms-full.txt 301
4242

43+
# artifacts
44+
/artifacts/api/artifactfs/ /artifacts/guides/artifact-fs/ 301
45+
4346
# changelog
4447
/changelog/rss.xml /changelog/rss/index.xml 301
4548
/api-shield/changelog/index.xml /changelog/rss/api-shield.xml 301

src/content/changelog/artifacts/2026-04-16-artifacts-now-in-beta.mdx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
---
2-
title: "Artifacts now in beta: versioned filesystem that can speak git"
3-
description: Artifacts is now available in beta as a versioned filesystem for Workers, APIs, and git-compatible workflows.
2+
title: "Artifacts now in beta: versioned filesystem with Git access"
3+
description: Artifacts is now available in beta as a versioned filesystem for Workers, APIs, and Git-compatible workflows.
44
products:
55
- artifacts
66
date: 2026-04-16
77
---
88

9-
[Artifacts](/artifacts/) is now in beta. It provides a versioned filesystem for storing and exchanging file trees across Workers, the REST API, and git-compatible clients.
9+
[Artifacts](/artifacts/) is now in beta. It provides a versioned filesystem for storing and exchanging file trees across Workers, the REST API, and Git-compatible clients.
1010

1111
Use Artifacts to publish build outputs, sync repositories, and move files between tools without inventing a new packaging format.
1212

@@ -17,11 +17,10 @@ const created = await env.ARTIFACTS.create("starter-repo");
1717
const remote = (await created.repo.info())?.remote;
1818
```
1919

20-
You can use the REST API to create a namespace, then create a repo inside it:
20+
You can use the REST API to create a repo inside a namespace:
2121

2222
```bash
23-
curl "https://api.cloudflare.com/client/v4/accounts/${ARTIFACTS_ACCOUNT_ID}/artifacts/namespaces" --header "Authorization: Bearer $ARTIFACTS_JWT" --header "Content-Type: application/json" --data '{"name":"starter-namespace"}'
24-
curl "https://api.cloudflare.com/client/v4/accounts/${ARTIFACTS_ACCOUNT_ID}/artifacts/namespaces/starter-namespace/repos" --header "Authorization: Bearer $ARTIFACTS_JWT" --header "Content-Type: application/json" --data '{"name":"starter-repo"}'
23+
curl --request POST "https://artifacts.cloudflare.net/v1/api/namespaces/starter-namespace/repos" --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" --header "Content-Type: application/json" --data '{"name":"starter-repo"}'
2524
```
2625

2726
Any Git client that speaks smart HTTP can use the returned remote URL:

src/content/docs/artifacts/api/artifactfs.mdx

Lines changed: 0 additions & 63 deletions
This file was deleted.

src/content/docs/artifacts/api/index.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ title: API
33
description: Reference the Artifacts Workers binding, REST API, and filesystem interfaces.
44
pcx_content_type: navigation
55
sidebar:
6-
order: 4
6+
order: 5
77
group:
88
hideIndex: true
99
---
1010

1111
import { DirectoryListing } from "~/components";
1212

13-
Use the Artifacts API reference to understand the interfaces exposed across Workers, HTTP, git-compatible workflows, and filesystem access.
13+
Use the Artifacts API reference to understand the interfaces exposed across Workers, HTTP, and Git-compatible workflows.
1414

1515
<DirectoryListing />

src/content/docs/artifacts/api/rest-api.mdx

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,22 @@ Artifacts REST routes use this base path:
2121
https://artifacts.cloudflare.net/v1/api/namespaces/$ARTIFACTS_NAMESPACE
2222
```
2323

24-
Some edge deployments also expose this base path:
25-
26-
```txt
27-
https://artifacts.cloudflare.net/edge/v1/api/namespaces/$ARTIFACTS_NAMESPACE
28-
```
29-
3024
Requests to `/v1/api/...` use Bearer authentication:
3125

3226
```txt
33-
Authorization: Bearer <GATEWAY_JWT>
27+
Authorization: Bearer <CLOUDFLARE_API_TOKEN>
3428
```
3529

36-
If you are calling `/edge/v1/...`, use the gateway auth required by that edge deployment.
37-
3830
All routes below are relative to the base URL your deployment exposes. The examples use `https://artifacts.cloudflare.net/v1/api/namespaces/$ARTIFACTS_NAMESPACE`.
3931

40-
Gateway JWTs authenticate REST control-plane routes. Repo tokens authenticate Git operations against the returned `remote` URL.
32+
Cloudflare API tokens authenticate REST control-plane routes. Repo tokens authenticate Git operations against the returned `remote` URL.
4133

4234
The following examples assume:
4335

4436
```sh
4537
export ARTIFACTS_NAMESPACE="default"
4638
export ARTIFACTS_REPO="starter-repo"
47-
export ARTIFACTS_JWT="<YOUR_GATEWAY_JWT>"
39+
export CLOUDFLARE_API_TOKEN="<YOUR_API_TOKEN>"
4840
export ARTIFACTS_BASE_URL="https://artifacts.cloudflare.net/v1/api/namespaces/$ARTIFACTS_NAMESPACE"
4941
```
5042

@@ -173,7 +165,7 @@ export type CreateRepoResponse = ApiEnvelope<CreateRepoResult>;
173165

174166
```bash
175167
curl --request POST "$ARTIFACTS_BASE_URL/repos" \
176-
--header "Authorization: Bearer $ARTIFACTS_JWT" \
168+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
177169
--header "Content-Type: application/json" \
178170
--data '{
179171
"name": "starter-repo",
@@ -232,7 +224,7 @@ export type ListReposResponse = ApiEnvelope<RepoInfo[]>;
232224

233225
```bash
234226
curl "$ARTIFACTS_BASE_URL/repos?limit=20&sort=updated_at&direction=desc" \
235-
--header "Authorization: Bearer $ARTIFACTS_JWT"
227+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
236228
```
237229

238230
```json
@@ -277,7 +269,7 @@ export type GetRepoResponse = ApiEnvelope<RemoteRepoInfo>;
277269

278270
```bash
279271
curl "$ARTIFACTS_BASE_URL/repos/$ARTIFACTS_REPO" \
280-
--header "Authorization: Bearer $ARTIFACTS_JWT"
272+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
281273
```
282274

283275
```json
@@ -322,7 +314,7 @@ export type DeleteRepoResponse = ApiEnvelope<DeleteRepoResult>;
322314

323315
```bash
324316
curl --request DELETE "$ARTIFACTS_BASE_URL/repos/$ARTIFACTS_REPO" \
325-
--header "Authorization: Bearer $ARTIFACTS_JWT"
317+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
326318
```
327319

328320
```json
@@ -370,7 +362,7 @@ export type ForkRepoResponse = ApiEnvelope<ForkRepoResult>;
370362

371363
```bash
372364
curl --request POST "$ARTIFACTS_BASE_URL/repos/$ARTIFACTS_REPO/fork" \
373-
--header "Authorization: Bearer $ARTIFACTS_JWT" \
365+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
374366
--header "Content-Type: application/json" \
375367
--data '{
376368
"name": "starter-repo-copy",
@@ -430,7 +422,7 @@ Pass a full HTTPS Git remote URL, for example `https://github.com/facebook/react
430422

431423
```bash
432424
curl --request POST "$ARTIFACTS_BASE_URL/repos/react-mirror/import" \
433-
--header "Authorization: Bearer $ARTIFACTS_JWT" \
425+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
434426
--header "Content-Type: application/json" \
435427
--data '{
436428
"url": "https://github.com/facebook/react",
@@ -488,7 +480,7 @@ export type ListTokensResponse = ApiEnvelope<TokenInfo[]>;
488480

489481
```bash
490482
curl "$ARTIFACTS_BASE_URL/repos/$ARTIFACTS_REPO/tokens?state=all&per_page=30&page=1" \
491-
--header "Authorization: Bearer $ARTIFACTS_JWT"
483+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
492484
```
493485

494486
```json
@@ -550,7 +542,7 @@ export type CreateTokenResponse = ApiEnvelope<CreateTokenResult>;
550542

551543
```bash
552544
curl --request POST "$ARTIFACTS_BASE_URL/tokens" \
553-
--header "Authorization: Bearer $ARTIFACTS_JWT" \
545+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
554546
--header "Content-Type: application/json" \
555547
--data '{
556548
"repo": "starter-repo",
@@ -593,7 +585,7 @@ export type RevokeTokenResponse = ApiEnvelope<RevokeTokenResult>;
593585

594586
```bash
595587
curl --request DELETE "$ARTIFACTS_BASE_URL/tokens/tok_123" \
596-
--header "Authorization: Bearer $ARTIFACTS_JWT"
588+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
597589
```
598590

599591
```json

src/content/docs/artifacts/concepts/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Concepts
33
description: Learn how Artifacts works and how to use it effectively.
44
pcx_content_type: navigation
55
sidebar:
6-
order: 3
6+
order: 4
77
group:
88
hideIndex: true
99
---

src/content/docs/artifacts/examples/git-client.mdx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ sidebar:
88

99
Use this pattern when you want to discover a repo over the REST API and then hand the returned HTTPS remote to a standard Git client.
1010

11-
This example assumes the repo already exists and that you have a gateway JWT with permission to read repo metadata and mint repo tokens.
12-
13-
Artifacts REST auth is environment-specific in private beta. If you do not already have a gateway JWT for your Artifacts environment, use the [Workers binding](/artifacts/api/workers-binding/) instead.
11+
This example assumes the repo already exists and that you have a [Cloudflare API token](/fundamentals/api/get-started/create-token/) with **Artifacts** > **Edit**.
1412

1513
## Fetch the remote and clone the repo
1614

@@ -21,16 +19,16 @@ The example below uses `jq` to extract fields from the JSON responses.
2119
```bash
2220
export ARTIFACTS_NAMESPACE="default"
2321
export ARTIFACTS_REPO="starter-repo"
24-
export ARTIFACTS_JWT="<YOUR_GATEWAY_JWT>"
22+
export CLOUDFLARE_API_TOKEN="<YOUR_API_TOKEN>"
2523
export ARTIFACTS_BASE_URL="https://artifacts.cloudflare.net/v1/api/namespaces/$ARTIFACTS_NAMESPACE"
2624

2725
REPO_JSON=$(curl --silent "$ARTIFACTS_BASE_URL/repos/$ARTIFACTS_REPO" \
28-
--header "Authorization: Bearer $ARTIFACTS_JWT")
26+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN")
2927

3028
ARTIFACTS_REMOTE=$(printf '%s' "$REPO_JSON" | jq -r '.result.remote')
3129

3230
TOKEN_JSON=$(curl --silent "$ARTIFACTS_BASE_URL/tokens" \
33-
--header "Authorization: Bearer $ARTIFACTS_JWT" \
31+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
3432
--header "Content-Type: application/json" \
3533
--data "{\"repo\":\"$ARTIFACTS_REPO\",\"scope\":\"read\",\"ttl\":3600}")
3634

src/content/docs/artifacts/examples/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Examples
33
description: Explore example Artifacts integrations.
44
pcx_content_type: navigation
55
sidebar:
6-
order: 6
6+
order: 7
77
group:
88
hideIndex: true
99
---

src/content/docs/artifacts/get-started/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ import { DirectoryListing } from "~/components";
1313
Start here to create, inspect, and version Artifacts from Cloudflare developer workflows.
1414

1515
- Use **Workers** when you want the simplest path and already use Wrangler.
16-
- Use **REST API** only if your Artifacts environment already provides a gateway JWT in private beta.
16+
- Use **REST API** when you want control-plane HTTP access with a Cloudflare API token.
1717

1818
<DirectoryListing />

src/content/docs/artifacts/get-started/rest-api.mdx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,19 @@ import { LinkCard, Tabs, TabItem } from "~/components";
1313

1414
Create an Artifacts repo with the REST API, then use a regular Git client to push and pull content.
1515

16-
Use this guide only if your Artifacts environment already provides a gateway JWT in private beta.
17-
1816
By the end of this guide, you will create a repo inside an existing namespace, read back the repo remote URL, push a commit, and clone the same repo with a standard Git client.
1917

2018
## Prerequisites
2119

2220
You need:
2321

2422
- A Cloudflare account with access to Artifacts.
25-
- A gateway JWT for the Artifacts API.
23+
- A [Cloudflare API token](/fundamentals/api/get-started/create-token/) with **Artifacts** > **Edit**.
2624
- An existing Artifacts namespace, for example `default`.
2725
- A local `git` client.
2826
- `jq`, if you want to extract response fields automatically.
2927

30-
Artifacts REST auth is environment-specific in private beta. If you do not already have a gateway JWT for your Artifacts environment, use the [Workers get started guide](/artifacts/get-started/workers/) instead.
28+
For Workers-based access instead of direct HTTP calls, use the [Workers get started guide](/artifacts/get-started/workers/).
3129

3230
## 1. Export your environment variables
3331

@@ -36,7 +34,7 @@ Set the variables used in the examples:
3634
```sh
3735
export ARTIFACTS_NAMESPACE="default"
3836
export ARTIFACTS_REPO="starter-repo"
39-
export ARTIFACTS_JWT="<YOUR_GATEWAY_JWT>"
37+
export CLOUDFLARE_API_TOKEN="<YOUR_API_TOKEN>"
4038
export ARTIFACTS_BASE_URL="https://artifacts.cloudflare.net/v1/api/namespaces/$ARTIFACTS_NAMESPACE"
4139
```
4240

@@ -45,7 +43,7 @@ Use a unique repo name each time you run this guide.
4543
Artifacts uses Bearer authentication for control-plane requests:
4644

4745
```txt
48-
Authorization: Bearer $ARTIFACTS_JWT
46+
Authorization: Bearer $CLOUDFLARE_API_TOKEN
4947
```
5048

5149
## 2. Create a repo
@@ -57,7 +55,7 @@ Choose one of the following ways to create a repo inside that namespace:
5755

5856
```bash
5957
curl --request POST "$ARTIFACTS_BASE_URL/repos" \
60-
--header "Authorization: Bearer $ARTIFACTS_JWT" \
58+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
6159
--header "Content-Type: application/json" \
6260
--data "{\"name\":\"$ARTIFACTS_REPO\"}"
6361
```
@@ -97,7 +95,7 @@ Capture the create response once and extract the fields with `jq`:
9795

9896
```bash
9997
CREATE_RESPONSE=$(curl --silent --request POST "$ARTIFACTS_BASE_URL/repos" \
100-
--header "Authorization: Bearer $ARTIFACTS_JWT" \
98+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
10199
--header "Content-Type: application/json" \
102100
--data "{\"name\":\"$ARTIFACTS_REPO\"}")
103101

@@ -115,7 +113,7 @@ Fetch the repo metadata when you need to recover the remote URL later:
115113

116114
```bash
117115
curl "$ARTIFACTS_BASE_URL/repos/$ARTIFACTS_REPO" \
118-
--header "Authorization: Bearer $ARTIFACTS_JWT"
116+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
119117
```
120118

121119
```json

0 commit comments

Comments
 (0)