# Cash App Code Blog

Cash App Code Blog

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Cash Android Moves to Metro

DevFeed: [Cash Android Moves to Metro](<https://devfeed.tech/articles/cash-android-moves-to-metro-29007.md>)

Original publisher: [Read original article](<https://code.cash.app/cash-android-moves-to-metro>)

Author: Egor Andreevich

Published: 2025-11-18T00:00:00Z

Content type: article

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [migration](<https://devfeed.tech/topics/migration.md>), [Android](<https://devfeed.tech/topics/android.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [migration](<https://devfeed.tech/tags/migration.md>)

### AI overview

The Cash Android team completed a migration from Dagger and Anvil to Metro, a compile-time dependency injection framework. The move was driven by the Kotlin-heavy codebase, the complexity of Dagger's Java-based build pipeline, and Anvil's lack of K2 support.

### Source excerpt

The Cash Android team have completed the migration to Metro.

## Kotlin Multiplatform test interceptors with Burst

DevFeed: [Kotlin Multiplatform test interceptors with Burst](<https://devfeed.tech/articles/kotlin-multiplatform-test-interceptors-with-burst-29006.md>)

Original publisher: [Read original article](<https://code.cash.app/burst-test-interceptors>)

Author: Jesse Wilson

Published: 2025-09-04T00:00:00Z

Content type: tutorial

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [test](<https://devfeed.tech/topics/test.md>)

Tags: [http](<https://devfeed.tech/tags/http.md>), [junit](<https://devfeed.tech/tags/junit.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-android](<https://devfeed.tech/tags/kotlin-android.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [okhttp](<https://devfeed.tech/tags/okhttp.md>), [snapshot](<https://devfeed.tech/tags/snapshot.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [timeout](<https://devfeed.tech/tags/timeout.md>)

### AI overview

This article introduces Burst 2.8's Kotlin Multiplatform test interceptors, an alternative to JUnit rules for reusing behavior across tests on Kotlin platforms. It also describes interception of suspending tests.

### Source excerpt

Interceptors are like JUnit rules, but for every Kotlin platform

## Re-introducing Paparazzi's Accessibility Snapshots

DevFeed: [Re-introducing Paparazzi's Accessibility Snapshots](<https://devfeed.tech/articles/re-introducing-paparazzi-s-accessibility-snapshots-29013.md>)

Original publisher: [Read original article](<https://code.cash.app/paparazzi-accessibility-snapshots>)

Author: Colin Marsch

Published: 2025-07-14T00:00:00Z

Content type: tutorial

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [Accessibility](<https://devfeed.tech/topics/accessibility.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>)

Tags: [accessibility](<https://devfeed.tech/tags/accessibility.md>), [accessibility-testing](<https://devfeed.tech/tags/accessibility-testing.md>), [android](<https://devfeed.tech/tags/android.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-ui](<https://devfeed.tech/tags/compose-ui.md>), [library](<https://devfeed.tech/tags/library.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

This article explains Paparazzi's accessibility snapshots for Android UI tests. It describes how the snapshots expose semantic accessibility properties and layout bounds for legacy Android views and Compose UI, and how they can be recorded and verified like regular Paparazzi tests. The article cautions that snapshots should supplement, not replace, a broader accessibility testing strategy.

### Source excerpt

Overview

## New Maven Central signing key and snapshot location

DevFeed: [New Maven Central signing key and snapshot location](<https://devfeed.tech/articles/new-maven-central-signing-key-and-snapshot-location-29012.md>)

Original publisher: [Read original article](<https://code.cash.app/new-maven-central-signing-key-and-snapshot-location>)

Author: Jake Wharton

Published: 2025-06-13T00:00:00Z

Content type: release

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [Maven Central](<https://devfeed.tech/topics/maven-central.md>), [Maven](<https://devfeed.tech/topics/maven.md>), [Publishing](<https://devfeed.tech/topics/publishing.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [end-of-life](<https://devfeed.tech/tags/end-of-life.md>), [maven-central](<https://devfeed.tech/tags/maven-central.md>), [open-source-artifacts](<https://devfeed.tech/tags/open-source-artifacts.md>), [public-key](<https://devfeed.tech/tags/public-key.md>), [release](<https://devfeed.tech/tags/release.md>), [server-android](<https://devfeed.tech/tags/server-android.md>), [signing](<https://devfeed.tech/tags/signing.md>), [snapshot](<https://devfeed.tech/tags/snapshot.md>), [snapshots](<https://devfeed.tech/tags/snapshots.md>), [verification](<https://devfeed.tech/tags/verification.md>)

### AI overview

Cash App migrated its open source artifact publishing to Sonatype's new platform after OSSRH reached end of life. The change introduces a company-wide GPG signing key and moves snapshot builds to the Central Portal Snapshot repository.

### Source excerpt

In response to Sonatype announcing the end-of-life for OSSRH, we have migrated to their new publishing platform for our open source artifacts. This is otherwise a transparent change for those who consume these artifacts from Maven Central, but there are two related changes which might affect your builds.

## Project Teleport: Cost-Effective and Scalable Kafka Data Processing at Block

DevFeed: [Project Teleport: Cost-Effective and Scalable Kafka Data Processing at Block](<https://devfeed.tech/articles/project-teleport-cost-effective-and-scalable-kafka-data-processing-at-block-29015.md>)

Original publisher: [Read original article](<https://code.cash.app/project-teleport>)

Author: Unni Krishnan

Published: 2025-03-20T00:00:00Z

Content type: article

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [data-processing](<https://devfeed.tech/topics/data-processing.md>), [Kafka](<https://devfeed.tech/topics/kafka.md>), [migration](<https://devfeed.tech/topics/migration.md>), [databricks](<https://devfeed.tech/topics/databricks.md>), [data lake](<https://devfeed.tech/topics/data-lake.md>), [Apache Spark](<https://devfeed.tech/topics/spark.md>), [Amazon S3](<https://devfeed.tech/topics/amazon-s3.md>), [parquet](<https://devfeed.tech/topics/parquet.md>), [Amazon Redshift](<https://devfeed.tech/topics/amazon-redshift.md>)

Tags: [acquisition](<https://devfeed.tech/tags/acquisition.md>), [amazon](<https://devfeed.tech/tags/amazon.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [data](<https://devfeed.tech/tags/data.md>), [data-lake](<https://devfeed.tech/tags/data-lake.md>), [data-processing](<https://devfeed.tech/tags/data-processing.md>), [databricks](<https://devfeed.tech/tags/databricks.md>), [delta-lake](<https://devfeed.tech/tags/delta-lake.md>), [emr](<https://devfeed.tech/tags/emr.md>), [kafka](<https://devfeed.tech/tags/kafka.md>), [parquet](<https://devfeed.tech/tags/parquet.md>), [pipelines](<https://devfeed.tech/tags/pipelines.md>), [redshift](<https://devfeed.tech/tags/redshift.md>), [s3](<https://devfeed.tech/tags/s3.md>), [scale](<https://devfeed.tech/tags/scale.md>), [storage](<https://devfeed.tech/tags/storage.md>)

### AI overview

Project Teleport is Block's cross-region Kafka data-processing system for integrating Afterpay's Sydney-hosted data lake into Block's US-based ecosystem. Built with Delta Lake, Spark on Databricks, and object storage, it supports migration of legacy pipelines and reduced cloud egress costs by USD 540,000 per year.

### Source excerpt

Teleport achieves efficient and reliable cross-region Kafka data processing at scale. Using this approach, Afterpay data team reduced cloud egress costs by USD 540,000 per year.

## Cash App on PlanetScale Metal

DevFeed: [Cash App on PlanetScale Metal](<https://devfeed.tech/articles/cash-app-on-planetscale-metal-29014.md>)

Original publisher: [Read original article](<https://code.cash.app/planetscale-metal>)

Author: Aaron Young

Published: 2025-03-11T00:00:00Z

Content type: article

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [migration](<https://devfeed.tech/topics/migration.md>), [vitess](<https://devfeed.tech/topics/vitess.md>), [MySQL](<https://devfeed.tech/topics/mysql.md>), [Kubernetes](<https://devfeed.tech/topics/kubernetes.md>), [Availability](<https://devfeed.tech/topics/availability.md>), [Cloud](<https://devfeed.tech/topics/cloud.md>)

Tags: [availability](<https://devfeed.tech/tags/availability.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [kubernetes](<https://devfeed.tech/tags/kubernetes.md>), [migration](<https://devfeed.tech/tags/migration.md>), [mount](<https://devfeed.tech/tags/mount.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [storage](<https://devfeed.tech/tags/storage.md>), [vitess](<https://devfeed.tech/tags/vitess.md>)

### AI overview

Cash App describes its migration from self-managed Vitess and MySQL infrastructure in its datacenters to PlanetScale's cloud-managed product, and its subsequent work with PlanetScale to migrate its fleet to PlanetScale Metal. The article explains the original architecture and reports storage-volume degradation, manual shard failovers, and periods when shards could not accept writes.

### Source excerpt

Cash App moves to PlanetScale to drive efficiencies

## Data Safety Levels Framework: The foundation of how we look at data in Block

DevFeed: [Data Safety Levels Framework: The foundation of how we look at data in Block](<https://devfeed.tech/articles/data-safety-levels-framework-the-foundation-of-how-we-look-at-data-in-block-29009.md>)

Original publisher: [Read original article](<https://code.cash.app/dsl-framework>)

Author: John Rogers

Published: 2025-01-16T00:00:00Z

Content type: article

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [sensitive data](<https://devfeed.tech/topics/sensitive-data.md>), [pii](<https://devfeed.tech/topics/pii.md>), [context](<https://devfeed.tech/topics/context.md>), [Requirements](<https://devfeed.tech/topics/requirements.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [context](<https://devfeed.tech/tags/context.md>), [customer-trust](<https://devfeed.tech/tags/customer-trust.md>), [data](<https://devfeed.tech/tags/data.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [pii](<https://devfeed.tech/tags/pii.md>), [requirements](<https://devfeed.tech/tags/requirements.md>), [security-governance](<https://devfeed.tech/tags/security-governance.md>), [sensitive-data](<https://devfeed.tech/tags/sensitive-data.md>), [standards](<https://devfeed.tech/tags/standards.md>)

### AI overview

Block introduces its Data Safety Levels (DSL) Framework, a system for evaluating data sensitivity in context and building scalable, automated data-management policies across Cash App, Square, and TIDAL.

### Source excerpt

Block uses the Data Safety Levels (DSL) Framework to evaluate data sensitivity.

## Dispatchers.Unconfined and why you actually want EmptyCoroutineContext

DevFeed: [Dispatchers.Unconfined and why you actually want EmptyCoroutineContext](<https://devfeed.tech/articles/dispatchers-unconfined-and-why-you-actually-want-emptycoroutinecontext-29008.md>)

Original publisher: [Read original article](<https://code.cash.app/dispatchers-unconfined>)

Author: Colin White

Published: 2025-01-15T00:00:00Z

Content type: tutorial

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>)

Tags: [coroutine](<https://devfeed.tech/tags/coroutine.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [dispatcher](<https://devfeed.tech/tags/dispatcher.md>), [io](<https://devfeed.tech/tags/io.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

The article explains why Dispatchers.Unconfined can introduce subtle threading bugs and crashes by avoiding thread dispatching. It recommends using EmptyCoroutineContext when injecting dispatchers, allowing synchronous tests while preserving correct dispatching when coroutine contexts change.

### Source excerpt

Use EmptyCoroutineContext instead of Dispatchers.Unconfined.

## Encryption using data-specific keys

DevFeed: [Encryption using data-specific keys](<https://devfeed.tech/articles/encryption-using-data-specific-keys-29010.md>)

Original publisher: [Read original article](<https://code.cash.app/encryption-using-data-keys>)

Author: Yoav Amit

Published: 2024-12-12T00:00:00Z

Content type: article

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [Encryption](<https://devfeed.tech/topics/encryption.md>), [Cryptography](<https://devfeed.tech/topics/cryptography.md>), [Security](<https://devfeed.tech/topics/security.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>), [gRPC](<https://devfeed.tech/topics/grpc.md>), [Kafka](<https://devfeed.tech/topics/kafka.md>)

Tags: [access-control](<https://devfeed.tech/tags/access-control.md>), [backend](<https://devfeed.tech/tags/backend.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [encryption](<https://devfeed.tech/tags/encryption.md>), [git](<https://devfeed.tech/tags/git.md>), [kafka](<https://devfeed.tech/tags/kafka.md>), [kms](<https://devfeed.tech/tags/kms.md>), [scalability](<https://devfeed.tech/tags/scalability.md>), [security](<https://devfeed.tech/tags/security.md>), [server-security-encryption](<https://devfeed.tech/tags/server-security-encryption.md>)

### AI overview

Cash App describes its evolution from service-centric application-layer encryption to a data-centric model called "Data Keys," which associates encryption keys directly with the data they protect. The change was made to improve flexibility and scalability as encryption expanded across services, gRPC transport infrastructure, and Kafka.

### Source excerpt

Associating encryption keys with the data they protect

## KotlinPoet 2.0 is here!

DevFeed: [KotlinPoet 2.0 is here!](<https://devfeed.tech/articles/kotlinpoet-2-0-is-here-29011.md>)

Original publisher: [Read original article](<https://code.cash.app/kotlinpoet-2-is-here>)

Author: Egor Andreevich

Published: 2024-11-05T00:00:00Z

Content type: release

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [Library](<https://devfeed.tech/topics/library.md>), [Code generation](<https://devfeed.tech/topics/code-generation.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code](<https://devfeed.tech/topics/code.md>), [Syntax Highlighting](<https://devfeed.tech/topics/syntax-highlighting.md>)

Tags: [code-generation](<https://devfeed.tech/tags/code-generation.md>), [compatibility](<https://devfeed.tech/tags/compatibility.md>), [formatting](<https://devfeed.tech/tags/formatting.md>), [github](<https://devfeed.tech/tags/github.md>), [issue-tracker](<https://devfeed.tech/tags/issue-tracker.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [migration](<https://devfeed.tech/tags/migration.md>), [release](<https://devfeed.tech/tags/release.md>)

### AI overview

KotlinPoet 2.0 is a source- and binary-compatible major release of the Kotlin and Java API for generating Kotlin source files. It changes space wrapping so spaces do not wrap by default, while a newly introduced character marks spaces that are safe to wrap.

### Source excerpt

KotlinPoet 2.0 is the next, source- and binary-compatible major release of the library, that has important behavior changes.