jwojnowski / googlecloud4s   0.8.1

MIT License GitHub

Purely functional Scala library for interaction with Google Cloud Platform.

Scala versions: 3.x 2.13


License Maven Central

Purely functional Scala library for interaction with Google Cloud Platform.


This is still very much a work in progress project for small, personal apps, so I’d caution against (larger scale, high risk) production use.

Getting started

To use this library add the following dependency to your build.sbt:

"me.wojnowski" %% "googlecloud4s-auth" % "x.y.z"
"me.wojnowski" %% "googlecloud4s-firestore" % "x.y.z"
"me.wojnowski" %% "googlecloud4s-storage" % "x.y.z"
"me.wojnowski" %% "googlecloud4s-pubsub" % "x.y.z"


The library provides basic support for:

  • CloudStorage (googlecloud4s-storage)
  • Firestore integration (googlecloud4s-firestore)
  • Authorisation (googlecloud4s-auth)
  • Cloud PubSub (googlecloud4s-pubsub)


It uses Cats Effect as its main framework, with fs2 for streaming, circe for JSON (to be abstracted someday) and sttp for HTTP client.

GraalVM Native Image

The library is verified to work with GraalVM Native Image.

Scala versions

googlecloud4s maintains compatibility with both Scala 2.13 and Scala 3.


Storage[F] provides a set of basic operations on object storage:

  • put
  • get
  • list
  • exists
  • delete

Both put and get operations use fs2.Stream[F, Byte] for data transfer.


Supported operations

  • add — without a name, always creates new document)
  • set — with a name, creates new or overwrites if documents already exists
  • get
  • update — updates a document using a provided function (using optimistic locking)
  • updateM — updates a document using a provided effectful function (using optimistic locking)
  • batchGet
  • batchWrite
  • stream — streams documents matching very basic filters and sorting
  • delete


FirestoreCodec is a type class used to define encoders and decoders. It can be written manually, or derived by importing:

import me.wojnowski.googlecloud4s.firestore.circe._


The library provides provisioning and validation of Google-issued access and identity tokens.

Getting tokens

There are 3 token providers:

  • CredentialsTokenProvider (for authentication outside of GCP using credentials JSON file)
  • MetadataServerTokenProvider (for usage within GCP)
  • CachingTokenProvider a simple caching wrapper for the above

All of them can be used to retrieve both AccessToken with given scopes and IdentityToken for a given audience.

Token validation

TokenValidator can be used to validate and decode identity tokens.

Cloud PubSub

PubSub implementation currently only supports sending messages. Receiving messages is only possible by pushing messages through HTTP trigger (e.g. in Cloud Functions or Cloud Run) and decoding them using PushMessageEnvelope.

Supported operations

  • createTopic
  • publish (single message)
  • publish (multiple messages)