Store data in S3 or R2
Connect an object store to share artifacts, checkpoints and journals between machines.
Create the transport
Section titled “Create the transport”Install the AWS SDK alongside Outpost to use an S3-compatible object store. This dependency is optional and is loaded through the S3 transport entry point.
transporter replaces createLocalTransport() wherever a transport is accepted. Every object lands under outpost/ in the bucket.
API reference: S3TransportOptions.
Prepare the bucket
Section titled “Prepare the bucket”Create the bucket first: Outpost does not create it. The endpoint must support these operations, not only upload and download.
- Conditional PUT
If-None-Match: *to create a key,If-Matchto replace it. - Conditional DELETE
If-Matchon removal, in the default"conditional"mode. - Paginated listing
ListObjectsV2with continuation tokens.
Pass it to the stores
Section titled “Pass it to the stores”One transport serves every store. Pass it where you want each kind of object kept.
Keep credentials on the host
Section titled “Keep credentials on the host”The S3Client runs in your Node.js process. Its credentials never reach the sandbox or the agent. Configure them as for any AWS SDK client, and close the client only after every store using it has finished: Outpost never closes it.
Use Cloudflare R2
Section titled “Use Cloudflare R2”R2 accepts a DELETE whose If-Match is stale, so a conditional DELETE cannot stop a concurrent writer. Select deleteMode: "tombstone".
Removing a key writes a deletion marker with a conditional PUT. Reads and listings hide markers, and creating the key again replaces its marker, still conditionally.
Each marker stays in the bucket as a billed 1 KiB object. Creating a key adds one HEAD request, and listing adds one HEAD per object.
Limits
Section titled “Limits”- Fencing, not identity: Revisions reject stale writers; they do not authenticate who wrote.
- No snapshot: A listing shows current objects, not a consistent view of the prefix.
- Local files remain: Git worktrees, execution staging and native conversations still need a local filesystem (Where data lives).
API: createS3Transport · S3TransportOptions · Transport.