Skip to content
CAI
Software that uses CAICheck a score

laserdisc-io/fs2-aws

58.9

Adequate · 20 September 2026

8k

lines of production code

Scala

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a Scala library that provides functional, stream-based interfaces for interacting with major AWS services, including Kinesis, S3, DynamoDB, SQS, and SNS. It leverages the fs2 library to handle data processing pipelines and utilizes the AWS SDK v2 for asynchronous, non-blocking operations. The library supports both direct stream manipulation and algebraic, tagless-final patterns for service-agnostic code, facilitating robust integration with AWS infrastructure.

How it got here

2018–2020 — AWS SDK v2 and Scala 3 migration

10 changes.

The project underwent a major infrastructure overhaul, migrating from AWS SDK v1 to v2 and upgrading the primary language version to Scala 3. This period involved restructuring the repository, removing legacy S3 file reading capabilities, and introducing new testing utilities and stream processing features for Kinesis and SQS.

2021–2022 — AWS SDK v2 migration and new service modules

17 changes.

This period focused on migrating the codebase to the AWS SDK v2, introducing new tagless-final interpreters for S3, SNS, SQS, Kinesis, and DynamoDB. It also added new fs2 modules for SNS and DynamoDB streaming, modernized the Kinesis consumer API with a builder pattern, and expanded test coverage and benchmarking infrastructure.

Features

Add fs2 stream for publishing messages to AWS SNS

Introduces a new \fs2-aws-sns\ module that provides an \SNS\ trait and \SnsSettings\ for publishing messages to Amazon SNS topics via an fs2 \Pipe\. The implementation uses the \SnsAsyncClientOp\ from \io.laserdisc.pure\ to handle concurrent publishing, and includes a test suite (\SnsSpec\) that verifies message delivery to an SQS queue using localstack.

fs2-aws-sns · high confidence

Added JMH benchmarks for Kinesis and S3 operations

The fs2-aws-benchmarks module now includes JMH benchmarks for measuring the performance of Kinesis stream processing and S3 multipart uploads. This adds a new logback configuration to control log verbosity during benchmark runs, a KinesisFlowBenchmark that tests reading and checkpointing records from a Kinesis stream using a test context, and an S3Benchmark that measures multipart upload throughput against a local S3 endpoint using a stubbed S3 client implementation.

fs2-aws-benchmarks · high confidence

Added multipart ETag validation and request modifiers for S3 uploads

The S3 upload API now supports optional ETag validation for multipart uploads to ensure data integrity, allowing users to verify that the server-side checksum matches the expected value. Additionally, new \AwsRequestModifier\ traits enable users to customize AWS request builders for both single-part and multipart uploads, providing greater control over upload parameters.

fs2-aws-s3/src/main/scala · high confidence

Added script to create a Kinesis stream for LocalStack testing

A new shell script, scripts/localstack/create-stream.sh, has been added to facilitate local development and testing with LocalStack. This script executes the awslocal CLI command to create a Kinesis stream named 'test' with a single shard, enabling developers to quickly provision the necessary stream infrastructure locally.

scripts · high confidence

New AWS service examples and configuration utilities

Added example applications and configuration helpers for DynamoDB, Kinesis, S3, SQS, and SNS. The new files include DynamoParallelScan for parallel table copying, KinesisExample and KinesisExampleNew for single-stream consumption, KinesisMultistreamExample for multi-stream processing, PureAWSKleisli for SQS/SNS integration using Kleisli and tagless finalism, and S3/TracedS3 examples for object storage. Supporting configuration classes (KinesisAppConfig, KinesisMultistreamAppConfig) provide localstack setup and SDK builder extensions.

fs2-aws-examples/src/main/scala · high confidence

New DynamoDB StreamScan capability for paginated table scans

A new \StreamScan\ component has been added to the fs2-aws-dynamodb module, providing a \scanDynamoDB\ method that streams raw DynamoDB items via an FS2 Stream. This implementation uses a bounded queue to enforce back-pressure against the AWS SDK paginator, ensuring that memory usage remains controlled during large scans, and includes error handling via Deferred to propagate failures from the reactive stream subscription.

fs2-aws-dynamodb/src/main · high confidence

New stream grouping utility for partitioning data

A new \groupBy\ helper has been added to the \fs2.aws.core\ package, providing a functional pipe to partition a stream into multiple sub-streams based on a dynamic selector function. This utility manages the lifecycle of internal queues for each unique key, allowing users to process distinct partitions of data concurrently within a single stream pipeline.

fs2-aws-core/src/main · high confidence

New tagless-final API for AWS SNS

Added \SnsAsyncClientOp\ and \SnsInterpreter\ in the \pure-sns-tagless\ module, providing a new tagless-final interface for the AWS SNS service. This introduces effectful equivalents for all SNS operations (such as publishing, subscribing, and topic management) backed by the AWS SDK v2, allowing users to write service-agnostic code that can be interpreted against the async client.

pure-aws/pure-sns-tagless · high confidence

New tagless-free Kinesis algebra and interpreter

This location introduces the core algebraic interface (\KinesisAsyncClientOp\) and its Kleisli-based interpreter (\KinesisInterpreter\) for AWS Kinesis. The algebra defines effectful equivalents for all Kinesis operations (such as \putRecord\, \getRecords\, \describeStream\, and pagination support), while the interpreter provides the concrete implementation that bridges these effects to the AWS SDK. The interpreter also includes deprecated aliases for the previous \Interpreter\ name to maintain backward compatibility with version 6.x code.

pure-aws/pure-kinesis-tagless · high confidence

New test utilities for Kinesis scheduler and producer client

The testkit now includes \SchedulerFactoryTestContext\ and \TestKinesisProducerClient\ to facilitate testing of Kinesis consumer and producer logic. \SchedulerFactoryTestContext\ provides a mockable scheduler that tracks shard record processors and allows tests to control execution flow via latches. \TestKinesisProducerClient\ implements the producer client interface using an in-memory \Ref\ to capture emitted records, enabling verification of data sent to Kinesis streams without requiring real AWS connections.

fs2-aws-testkit · high confidence

Removals

Removal of S3 file reading implementation

The S3 file reading functionality previously provided in the \fs2.aws.s3\ package object has been removed. This eliminates the ability to stream files from S3 using the \readFile\ method defined in this module.

src/main · high confidence

Behavioural changes

CloudWatch and DynamoDB interpreters renamed to support AWS SDK v2 migration

The \CloudWatchInterpreter\ and \DynamoDbInterpreter\ objects and traits have been renamed to \CloudWatchInterpreter\ and \DynamoDbInterpreter\ respectively (previously just \Interpreter\). The old \Interpreter\ names are retained as deprecated aliases for version 7.0.0 to ensure backward compatibility with existing 6.x code, but users should migrate to the new names. This change accompanies the broader migration to the AWS SDK v2, as evidenced by the imports of \software.amazon.awssdk.services.\*\ classes in the new \\*AsyncClientOp\ and \\*Interpreter\ files.

pure-aws/pure-dynamodb-tagless · high confidence

Enforce minimum S3 part size and validate bucket/file names

The S3 module now uses refined types to enforce that multipart upload parts are at least 5 MB, preventing invalid uploads that would fail AWS validation. Additionally, bucket names and file keys are now strictly validated as non-empty strings, ensuring that empty or null values cannot be passed to S3 operations.

fs2-aws-s3/src/main/scala-3.0+ · high confidence

New Kinesis stream builder and record processing model

The library introduces a new, phase-based \KinesisStreamBuilder\ API for configuring Kinesis consumers, replacing the previous settings-based approach. This builder guides users through providing required AWS clients (Kinesis, DynamoDB, CloudWatch) and configuration options like app name and scheduler ID. Alongside the builder, the library adds a \CommittableRecord\ type that wraps raw Kinesis records with checkpointing capabilities, allowing users to explicitly commit offsets via a \checkpointRecords\ pipe. The change also includes a new \ChunkedRecordProcessor\ to handle record batching and a \KinesisProducerClient\ for publishing data, effectively modernizing the consumer/producer interfaces while maintaining compatibility with the underlying Kinesis Client Library (KCL).

fs2-aws-kinesis/src/main · high confidence

Repository restructure for fs2-aws 7.x with AWS SDK v2 and Scala 3

The project has been restructured for the 7.x release, migrating from AWS SDK v1 to v2 and from Scala 2 to Scala 3. This update introduces breaking changes for users upgrading from the 6.x series, requiring them to follow the new migration notes. The repository now includes configuration for the new toolchain (scalafmt 3.11.5, Scala 3 dialect), automated release workflows via Mergify, and local development support through Docker Compose (LocalStack, MinIO).

(repo-wide) · high confidence

S3 tagless interpreter now uses AWS SDK v2 S3AsyncClient

The S3 tagless interpreter in \pure-s3-tagless\ has been updated to wrap the AWS SDK v2 \S3AsyncClient\ instead of the previous synchronous client. This change introduces effectful equivalents for all S3 operations (such as bucket management, object uploads/downloads, and pagination) that return \F\[Response\]\ types, enabling non-blocking, asynchronous interactions with Amazon S3 within the Cats Effect ecosystem.

pure-aws/pure-s3-tagless · high confidence

SQS consumer now supports message visibility timeout control and configurable fetch counts

The fs2-aws-sqs module introduces a new \changeMessageVisibilityPipe\ that allows users to extend the visibility timeout of messages during processing, preventing them from becoming visible to other consumers prematurely. Additionally, the \SqsConfig\ now exposes a \fetchMessageCount\ parameter (defaulting to 10) to control how many messages are retrieved per poll, and the legacy \sqs.SqsConfig\ is deprecated in favor of \fs2.aws.sqs.SqsConfig\.

fs2-aws-sqs/src/main · high confidence

SQS tagless finalizer introduces new interpreter API and deprecates legacy names

The \pure-sqs-tagless\ module now provides a new \SqsAsyncClientOp\ trait and \SqsInterpreter\ object to define and implement effectful SQS operations using the AWS SDK v2 \SqsAsyncClient\. This change introduces a modern, tagless-finalizer-based API for SQS interactions. As part of this transition, the previous \Interpreter\ trait and object are deprecated in favor of \SqsInterpreter\ for version 7.0.0, ensuring existing code continues to compile while encouraging migration to the new API.

pure-aws/pure-sqs-tagless · high confidence

Test coverage

Added integration tests for SQS message lifecycle; Added test resources and test logging configuration; Added tests for DynamoDB stream scanning; Added tests for multipart ETag validation and S3 upload flows; Added tests for the groupBy stream operator; Added tests for the new Kinesis producer and consumer implementation; Removed S3 integration tests.

Dependencies

Upgrade to AWS SDK v2 and Scala 3

The project has migrated from the legacy AWS SDK v1 to AWS SDK v2 (version 2.40.5) and upgraded the primary Scala version to 3.3.8, while maintaining cross-compilation support for Scala 2.13.18. This change replaces the old \com.amazonaws\ SDK dependencies with the new \software.amazon.awssdk\ modules (S3, SQS, SNS, Kinesis, DynamoDB, CloudWatch) and updates the build infrastructure to reflect these modern standards.

(dependencies) · high confidence

Upgrade to sbt 1.13 and AWS SDK v2

The build system has been upgraded from sbt 0.13.16 to 1.13.0, and the project now depends on AWS SDK v2 (version 2.54.12) instead of the legacy v1. This change updates the core library dependencies, including the Amazon Kinesis Client to version 3.5.1, and refreshes the build plugins (such as sbt-ci-release and sbt-scalafmt) to their latest versions.

project · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 59.

Lenses

  • Code Health 92
  • Architecture 100
  • Maturity 48
  • Readiness 53
  • Security 75

Changes since last survey

  • 300 commits — 283 feature/other, 17 fixes

By area

  • project/Dependencies.scala — 159 commits
  • (root) — 52 commits
  • project/plugins.sbt — 31 commits
  • project/build.properties — 21 commits
  • fs2-aws-kinesis/src — 8 commits
  • fs2-aws-dynamodb/src — 4 commits
  • fs2-aws-s3/src — 4 commits
  • (repo) — 3 commits
  • .github/workflows — 3 commits
  • docs/modules — 3 commits
  • fs2-aws-examples/src — 3 commits
  • fs2-aws-sqs/src — 2 commits
  • project/TaglessGen.scala — 2 commits
  • docs/site.css — 1 commit
  • project/build.sbt — 1 commit
  • pure-aws/pure-cloudwatch-tagless — 1 commit
  • pure-aws/pure-dynamodb-tagless — 1 commit
  • pure-aws/pure-s3-tagless — 1 commit

Notable commits

  • fix: Fix deduplication in TaglessGen
  • fix: Fix incorrect CompletableFuture integration (#1088)
  • fix: Fix the link to S3Example in readme (#1112)
  • fix: Potential fix for pull request finding
  • fix: code review fixes
  • fix: docs fix
  • fix: fix docs
  • fix: fix scaladoc
  • fix: fix scalafmt for generated files
  • fix: fix up docs a bit
  • fix: fix up readme
  • fix: fix versioning scheme
  • fix: fixes
  • fix: improved tagless gen, fix up docs
  • fix: many upgrades, fix build (#1343)
  • fix: revert temporary test state
  • fix: validate code examples, fix S3 docs, some styling
  • change: Adds controls for SQS message visibility. (#1341)
  • change: Avoid allocating a vector if you can use the underlying chunks (#1136)
  • change: Avoid shutdown race conditions
  • …and 280 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

laserdisc-io/fs2-aws was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 17bb66b61f4915bcb43a93e11bc81562012ef06c — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.