CAS server

It is possible to configure BuildGrid with just a Content Addressable Storage service.


This service can be equivalent to BuildStream’s Artifact Server if the Reference Storage Service is included.


Here is an example project configuration. It also implements an optional API called the Reference Storage Service, which if used, allows the user to store a Digest behind a user defined key.

  - !channel
    address: localhost:50051
    insecure_mode: true

  - name: main

      - !disk-storage &main-storage
        path: !expand-path $HOME/cas

      - !cas
        storage: *main-storage

      - !bytestream
        storage: *main-storage

      - !reference-cache
        storage: *main-storage
        max-cached-refs: 512


Use - name: "" if using with BuildStream, as instance names are not supported for that tool yet.

This defines a single main instance of the CAS, Bytestream and Reference Storage service on port 55051. It is backed onto disk storage and will populate the folder $HOME/cas. To start the server, simply type into your terminal:

bgd server start data/config/artifacts.yml

The server should now be available to use.


According to the Remote Execution API, when receiving a ByteStream.Write() request for a digest that was already uploaded, the server should immediately return a response with commited_size equal to the size of the blob.

However, half-closing a gRPC ByteStream can cause issues with some proxies. 1 In order to work around those limitations, the bytestream service provides an option to slightly alter its behavior:

- !bytestream
      storage: *cas-storage
      disable-overwrite-early-return: true

When enabled, the server will read all the client’s WriteRequest messages from the stream and return successfully without performing an actual write to the storage.