Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
744 commits
Select commit Hold shift + click to select a range
d150fd0
Bump github.com/fsouza/fake-gcs-server from 1.52.3 to 1.55.1 in /sdks…
dependabot[bot] Jul 20, 2026
45d1dac
Set persist-credentials true
Amar3tto Jul 20, 2026
4b3fff3
Merge pull request #39388 from apache/fix-credentials
Amar3tto Jul 20, 2026
78261e7
Add --add-opens test JVM args for HCatalog and Dataflow worker tests …
aIbrahiim Jul 20, 2026
39c60f0
Support ACKNOWLEDGE_MODE for JmsIO (#39253)
Abacn Jul 20, 2026
023ca6d
[Java] Cache DoFn invoker constructors per instance (#39310)
lofifnc Jul 20, 2026
804b127
add language filtering for codeql (#39327)
derrickaw Jul 20, 2026
ec397ce
[KafkaIO] Remove build support for Kafka clients before 3.9.2 (#39284)
sjvanrossum Jul 20, 2026
0df7069
Bump protobufjs from 8.6.0 to 8.6.6 in /sdks/typescript (#39394)
dependabot[bot] Jul 21, 2026
f4b13a0
Bump pillow (#39396)
dependabot[bot] Jul 21, 2026
f802944
Bump actions/checkout from 4 to 7 (#39399)
dependabot[bot] Jul 21, 2026
7735b39
Bump pillow (#39395)
dependabot[bot] Jul 21, 2026
621a78c
Add Beam YAML support for DebeziumIO
Amar3tto Jul 21, 2026
ab36569
fix GCP_PATH expansion (#39400)
aIbrahiim Jul 21, 2026
dca1253
Fix CdapIO dependency (#39393)
Abacn Jul 21, 2026
7bc2fb4
Fix a memory leak in the failed instruction id cache. (#39405)
tvalentyn Jul 21, 2026
5b441f2
Update CHANGES.md to document a memory growth issue. (#39407)
tvalentyn Jul 21, 2026
c54595b
Merge pull request #39111: Fix OpenSearch username/password env fallb…
kennknowles Jul 21, 2026
eccd9b7
Merge pull request #39270 from apache/icerbergio-benchmark
Amar3tto Jul 21, 2026
9baa19a
Increase CI timeouts for Python 3.14 multiarch container jobs (#39401)
aIbrahiim Jul 21, 2026
0c151d8
Fix gRPC stream observer leak on ProcessBundleHandler shutdown (#39390)
Abacn Jul 21, 2026
414b48a
add Apache third party allow list check and doc (#39392)
derrickaw Jul 21, 2026
83fcb2f
[Gemini] Add Java GeminiModelHandler class (#39245)
jrmccluskey Jul 21, 2026
55e1ecb
Add metric for Kafka offset commit failures (#38889)
Kriti-dev07 Jul 21, 2026
51b2ad6
Add drain states to PipelineResult (#39020)
lalitium Jul 22, 2026
ee44102
Bump github.com/aws/aws-sdk-go-v2/credentials in /sdks (#39425)
dependabot[bot] Jul 22, 2026
0dd4788
Interview with Raj Katakam from Intuit Credit Karma (#39412)
janaom Jul 22, 2026
22a5951
Document job management and interactive API protos (#39294)
damccorm Jul 22, 2026
d2d7ef8
Prefer binary wheels when installing Python container dependencies (#…
aIbrahiim Jul 22, 2026
3f3f18a
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /sdks (#39421)
dependabot[bot] Jul 22, 2026
aa8869c
Bump cloud.google.com/go/storage from 1.63.1 to 1.64.0 in /sdks (#39422)
dependabot[bot] Jul 22, 2026
583601b
Fix pyrefly check bad-context-manager (#39418)
jrmccluskey Jul 22, 2026
aaad9b4
[Experimental] Use zstd compression in Docker builds (#39409)
jrmccluskey Jul 22, 2026
abe3fc7
Fix silent per-char iteration when DoFn returns str/bytes/dict (#38429)
chrisqiqiu Jul 22, 2026
7356d4b
Replace port with listeners in LocalKafka configuration
sjvanrossum Jul 22, 2026
a15b880
Merge pull request #39043: Improve WithKeys coder inference context
adityaRaj369 Jul 22, 2026
b04ca1e
Fix pyrefly check bad-specialization (#39419)
jrmccluskey Jul 22, 2026
c8a689f
Fix pyrefly check bad-argument-count (#39416)
jrmccluskey Jul 22, 2026
da7693c
[Gemini] Fix pyrefly check invalid-yield (#39417)
jrmccluskey Jul 22, 2026
f1d9c3e
docs: Document pipeline runner API protos (#39292)
damccorm Jul 22, 2026
adbb11d
Fix gcs endpoint pipeline option wiring (#39435)
Abacn Jul 23, 2026
5e49938
KeyCommitTooLarge logging improvements (#39316)
rwiggles Jul 23, 2026
4f0044b
Merge pull request #39438 from sjvanrossum/testing-kafka-service-fix
Amar3tto Jul 23, 2026
c7ab90e
Bump google.golang.org/api from 0.289.0 to 0.290.0 in /sdks (#39449)
dependabot[bot] Jul 23, 2026
01c668b
Add Debezium YAML integration test
Amar3tto Jul 23, 2026
b0a7099
Fix lz4 conflicts (#39454)
Amar3tto Jul 23, 2026
1c9fd1b
Remove isort dependency, migrate to ruff equivalent (#39411)
jrmccluskey Jul 23, 2026
fdac189
Fix nullness for PubsubIO
kennknowles Jul 22, 2026
c8aa28f
docs: Document Fn Execution API protos (#39293)
damccorm Jul 23, 2026
d688e1b
[Java SDK] Warn when ValueState contains collection types (#37530)
PDGGK Jul 23, 2026
a72d6cb
[KafkaIO] Use consumer position and lag to estimate end offsets (#39285)
sjvanrossum Jul 23, 2026
0140552
[#30019] Fix type checking failures around unions with nested complex…
jrmccluskey Jul 23, 2026
9833974
Remove legacy HttpError usage in Bigtable I/O IT test (#39441)
jrmccluskey Jul 23, 2026
9c3f51e
[Python] Add Watch transform with growth_of polling SDF (#39023)
Eliaaazzz Jul 23, 2026
eb9e7a3
Override default fadvise to fix regression from gcs-connector v3 upgr…
shunping Jul 23, 2026
a3703d3
[Dataflow Streaming][Multikey] Support MultiKey commits in windmill c…
arunpandianp Jul 23, 2026
b15e5f4
Add equal_to_approx matcher for approximate numeric assertions (#39443)
SreeramaYeshwanthGowd Jul 23, 2026
901fccd
sdks/java: remove DefaultAnnotation(NonNull) from package-info.java f…
kennknowles Jul 23, 2026
7f61891
Bump cloud.google.com/go/datastore from 1.25.0 to 1.26.0 in /sdks (#3…
dependabot[bot] Jul 24, 2026
3cf04be
Bump cloud.google.com/go/bigtable from 1.50.0 to 1.51.0 in /sdks (#39…
dependabot[bot] Jul 24, 2026
1b1b706
Bump docker/login-action from 4.4.0 to 4.5.0 (#39470)
dependabot[bot] Jul 24, 2026
2232808
Bump zizmorcore/zizmor-action from 0.6.0 to 0.6.1 (#39471)
dependabot[bot] Jul 24, 2026
60455c3
Bump setuptools from 78.1.1 to 83.0.0 in /.test-infra/mock-apis (#39482)
dependabot[bot] Jul 24, 2026
0ffb108
Revert "Merge pull request #39043: Improve WithKeys coder inference c…
Abacn Jul 24, 2026
72d7ae3
update tour of beam workflow go version (#39486)
derrickaw Jul 25, 2026
d6ab992
Bump docker/login-action from 4.5.0 to 4.5.1 (#39497)
dependabot[bot] Jul 27, 2026
faa3ad8
Skip IcebergPerformanceTest until next release
Amar3tto Jul 27, 2026
a226755
Fix record schema
Amar3tto Jul 27, 2026
cb7329c
Use prebuilt Snapshots SDK images for PostCommit Python Arm (#39498)
aIbrahiim Jul 27, 2026
6741628
Pin Playground kafka-emulator to kafka-clients 2.4.1 (#39503)
aIbrahiim Jul 27, 2026
226ad87
enable otel context propagation - runner v1 sink, source changes, doF…
stankiewicz Jul 27, 2026
6d752f5
OTEL in spanner. (#39149)
stankiewicz Jul 27, 2026
25ed2f8
With max num of records
Amar3tto Jul 27, 2026
aae48ec
Add setters
Amar3tto Jul 27, 2026
70a5223
(IcebergIO) Support PartitionSpec/SortOrder on dynamic table creation…
clairemcginty Jul 27, 2026
d9d897a
Merge pull request #39502 from apache/skip-iceberg-perf
Amar3tto Jul 27, 2026
214863b
Bump golang.org/x/net from 0.54.0 to 0.55.0 in /.test-infra/mock-apis…
dependabot[bot] Jul 27, 2026
de234c7
Fix inconsistent AvroSchema type and value for SqlType.Date values (#…
Abacn Jul 27, 2026
ac52623
Adds documentation for the Delta Lake Read Managed I/O (#39495)
chamikaramj Jul 27, 2026
1d25d3b
Merge pull request #39463: Remove @DefaultAnnotation(NonNull.class) t…
kennknowles Jul 27, 2026
405438b
Merge pull request #39444: Fix nullness for PubsubIO
kennknowles Jul 27, 2026
dec8d23
Bump torch (#39512)
dependabot[bot] Jul 28, 2026
4160995
OTEL in kafka. (#39151)
stankiewicz Jul 28, 2026
ec93d37
Bump golang.org/x/oauth2 from 0.7.0 to 0.27.0 in /playground/backend …
dependabot[bot] Jul 28, 2026
ad1e278
sdks/java: re-enable nullness checks in WithKeys (#39506)
kennknowles Jul 28, 2026
9ae08d5
[Solace] Close the HTTP response content stream in BrokerResponse (#3…
PDGGK Jul 28, 2026
9c82e05
Avoid output inside try-catch in Java IO (#39124)
Aryankn29 Jul 28, 2026
dd463fa
Fix flaky AsyncWrapper reset_state test on Python 3.14 (#39521)
bvolpato Jul 28, 2026
2eb3323
Bump github.com/moby/moby/client from 0.5.0 to 0.5.1 in /sdks (#39517)
dependabot[bot] Jul 28, 2026
905ade4
Bump github.com/aws/smithy-go from 1.27.4 to 1.27.5 in /sdks (#39519)
dependabot[bot] Jul 28, 2026
cae3e17
Bump actions/stale from 10 to 11 (#39520)
dependabot[bot] Jul 28, 2026
2541fc7
Refactoring
Amar3tto Jul 28, 2026
315ed95
Fix python formatter
Amar3tto Jul 28, 2026
f456c02
Bump scikit-learn (#39525)
dependabot[bot] Jul 28, 2026
39c0dde
[Gemini] Fix pyrefly check bad-typed-dict-key (#39415)
jrmccluskey Jul 28, 2026
2434619
Add registerSqlOperator() to BeamSqlEnv for custom SQL operators (#39…
damccorm Jul 28, 2026
f258e3e
OTEL in pubsub (#39150)
stankiewicz Jul 28, 2026
55fde07
Add the directory with staged files to sys.path and document the usag…
tvalentyn Jul 28, 2026
fc0d989
Replace non-PEP 585 types in watch.py (#39527)
jrmccluskey Jul 28, 2026
f20da8a
Update ruff and pyrefly dependencies (#39531)
jrmccluskey Jul 28, 2026
8473d90
[Java IO] Add ArrowFlight IO connector (#37904)
bvolpato Jul 28, 2026
2ee432b
Support JmsIO SchemaTransform and cross-lang (#39437)
Abacn Jul 28, 2026
3926b88
fix golangci-lint issue - tour of beam (#39490)
derrickaw Jul 29, 2026
4fd1744
[Gemini] Fix pyrefly check unexpected-keyword (#39528)
jrmccluskey Jul 29, 2026
509af44
Bump docker/login-action from 4.5.1 to 4.5.2 (#39540)
dependabot[bot] Jul 29, 2026
e9d9086
Bump github.com/aws/aws-sdk-go-v2 from 1.43.0 to 1.43.1 in /sdks (#39…
dependabot[bot] Jul 29, 2026
c4a6f80
Bump github.com/aws/aws-sdk-go-v2/service/s3 in /sdks (#39541)
dependabot[bot] Jul 29, 2026
79504e2
Bump google.golang.org/api from 0.290.0 to 0.291.0 in /sdks (#39544)
dependabot[bot] Jul 29, 2026
4738b16
Bump github.com/aws/aws-sdk-go-v2/credentials in /sdks (#39543)
dependabot[bot] Jul 29, 2026
b5c6009
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /sdks (#39545)
dependabot[bot] Jul 29, 2026
f6c7a06
Fix Update Python Dependencies (#39534)
aIbrahiim Jul 29, 2026
3c9f9ce
[Dataflow Streaming] [Multi Key] MultiKey failure handling + Integrat…
arunpandianp Jul 29, 2026
9019efd
add workflow_dispatch to other workflow files (#39491)
derrickaw Jul 29, 2026
08dc50a
Fix flaky BigQuery persistent retry test (#39539)
bvolpato Jul 29, 2026
8a1c19b
[Python] Convert typing and native generic hints in Watch coder infer…
Eliaaazzz Jul 29, 2026
6e2044b
Bump lower and upper bounds for pyarrow + related dependencies, remov…
jrmccluskey Jul 29, 2026
eda08d8
Changes SplittableDoFn to call TruncateRestriction on drain (#39535)
acrites Jul 29, 2026
ec7004f
[Interactive Beam] Fix caching deadlock, wait race conditions, and st…
ian-Liaozy Jul 29, 2026
58bac32
[IcebergIO] Raise Java 17 floor for IcebergIO's Java 11 dependents (#…
peterphitran Jul 29, 2026
2c735b6
Bump cloud.google.com/go/spanner from 1.93.0 to 1.94.0 in /sdks (#39550)
dependabot[bot] Jul 30, 2026
c6e0f5b
Bump github.com/aws/aws-sdk-go-v2/config in /sdks (#39551)
dependabot[bot] Jul 30, 2026
b85646b
Remove primaryKeyColumns options
Amar3tto Jul 30, 2026
2fd6af9
Bump github.com/aws/aws-sdk-go-v2/service/s3 in /sdks (#39554)
dependabot[bot] Jul 30, 2026
5178343
Fix spotless
Amar3tto Jul 30, 2026
61fad4f
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /sdks (#39553)
dependabot[bot] Jul 30, 2026
bc991d9
Set envs
Amar3tto Jul 30, 2026
525780e
Provide a better error when beam plugin was supplied but wasn't stage…
tvalentyn Jul 30, 2026
f65e0e0
Updates the Delta Lake source to support reading bounded change data …
chamikaramj Jul 30, 2026
4f93483
Fix module-level side effects and global random seeding in univariate…
Abacn Jul 30, 2026
8a7c972
Merge pull request #39558 from apache/fix-auditkeys
Amar3tto Jul 30, 2026
0de9a67
Merge pull request #39457 from apache/debezium-io-yaml
Amar3tto Jul 30, 2026
b9e4e2f
Bump docker/login-action from 4.5.2 to 4.6.0 (#39552)
dependabot[bot] Jul 30, 2026
f7d8d7c
Preserve partitioning on temp FILE_LOADS tables (#38833)
PRADDZY Jul 30, 2026
141804a
fix AddFilesIT filter for BigLake (#39533)
aIbrahiim Jul 30, 2026
f5feab8
Enhance Python Timestamp to be precision-variable up to nanos, and ma…
ahmedabu98 Jul 30, 2026
7b9380b
Buffer BufferedLogger by newline to avoid log splitting (#39288)
shunping Jul 30, 2026
03db1a0
Fix DataflowOutputCounter calculation for ValueInEmptyWindows (#39487)
shunping Jul 30, 2026
b8d77b8
[IcebergIO] Upgrade Iceberg dependency to 1.11.0 (#39559)
peterphitran Jul 30, 2026
980c114
Clean up legacy references to apitools in GCS I/O (#39433)
jrmccluskey Jul 31, 2026
9c561e2
[Iceberg] Make timestamptz return new Timestamp.MICROS logical type (…
ahmedabu98 Jul 31, 2026
459b7ee
Fix flaky unit test to pass post-submit checks (#39562)
ian-Liaozy Jul 31, 2026
42c693f
Bump github/codeql-action from 4 to 4.37.3 (#39564)
dependabot[bot] Jul 31, 2026
5c58b58
Support IBM MQ for Python JmsIO (#39467)
Abacn Jul 31, 2026
0619156
use Java 17 harness (#39570)
aIbrahiim Jul 31, 2026
2621e9e
Remove remaining artifacts from dataflow apitools client (#39439)
jrmccluskey Jul 31, 2026
5196676
update containers (#39575)
ahmedabu98 Aug 1, 2026
e4779cf
Fix flaky FileIOTest.testMatchWatchForNewFiles test under CI filesyst…
bvolpato Aug 3, 2026
7f96ee4
Bump google.golang.org/grpc from 1.82.1 to 1.83.0 in /sdks (#39585)
dependabot[bot] Aug 3, 2026
93af678
Bump github/codeql-action from 4.37.3 to 4.37.4 (#39586)
dependabot[bot] Aug 3, 2026
8b4c675
Support core dump analysis with pystack and gdb. (#39484)
tvalentyn Aug 3, 2026
a72451d
Bump github.com/nats-io/nats-server/v2 from 2.14.3 to 2.14.4 in /sdks…
dependabot[bot] Aug 3, 2026
3a02af8
[Docs] Update Flink version references on the Flink runner page (#39212)
Eliaaazzz Aug 3, 2026
539b048
Fix dataframe CSV tests on Windows (#39563)
Guflly Aug 3, 2026
4d3e1f0
Support array-valued schema options in Python (#39583)
bvolpato Aug 3, 2026
f073408
Feat: new cleaning rule to orphaned subscriptions (#39538)
HansMarcus01 Aug 3, 2026
db57e4a
[Docs] Add CHANGES entries for Python UnboundedSource and Watch (#39579)
Eliaaazzz Aug 3, 2026
a6b3399
Fix internal test failure after #39487 (#39591)
shunping Aug 3, 2026
52f6e46
Add query_output_schema to ReadFromBigQuery for BEAM_ROW + query supp…
nikitagrover19 Aug 3, 2026
f3e12fe
[DebeziumIO] Upgrade to Debezium 3.5.2.Final (#39569)
tkaymak Aug 3, 2026
82c6ee4
[Python] Bound Watch state with a timestamp cursor (#39090)
Eliaaazzz Aug 3, 2026
789e1d1
Redistribute - trace propagation (#39590)
stankiewicz Aug 3, 2026
83821eb
update containers (#39596)
ahmedabu98 Aug 3, 2026
a89b9f7
remove gsutil usage (#39448)
derrickaw Aug 3, 2026
c4b4bda
[Iceberg CDC] Add Changelog readers and update resolver (#38837)
ahmedabu98 Aug 3, 2026
c8bacb4
Update activemq to 5.19.5 (#39593)
jrmccluskey Aug 4, 2026
44d4089
Potential fix for environment variable built from user-controlled sou…
derrickaw Aug 4, 2026
8ded79b
Part 1: Log systemName in DataflowWorkUnitClient, Commit, and core wo…
rwiggles Aug 4, 2026
8b326b9
Create span in spanner CDC to start new trace when otel is enabled. (…
stankiewicz Aug 4, 2026
f2c622b
Fix OpenTelemetry dependencies in published POMs (#39608)
bvolpato Aug 4, 2026
24eb1e6
Bump github.com/aws/aws-sdk-go-v2/config in /sdks (#39606)
dependabot[bot] Aug 4, 2026
945fcfc
Bump github.com/aws/aws-sdk-go-v2/service/s3 in /sdks (#39609)
dependabot[bot] Aug 4, 2026
f1125f7
Bump com.gradle.common-custom-user-data-gradle-plugin (#39602)
dependabot[bot] Aug 4, 2026
3a0985a
[Go SDK] Add GroupIntoBatches transform (#19868) (#38220)
florian-trehaut Aug 4, 2026
77a1134
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /sdks (#39605)
dependabot[bot] Aug 4, 2026
14c61d1
Bump zizmorcore/zizmor-action from 0.6.1 to 0.6.2 (#39604)
dependabot[bot] Aug 5, 2026
86ca053
Adds the Delta Lake CDC read transforms to the Managed I/O API (#39599)
chamikaramj Aug 5, 2026
aa7f74c
mention otel in changes (#39618)
stankiewicz Aug 5, 2026
1508227
Support sharded coder for Prism runner cross-lang (#39623)
Abacn Aug 5, 2026
c2c910a
Fix Dataflow ValueProvider serialization (#39614)
bvolpato Aug 5, 2026
a0f3518
Deflake JmsIO tests (#39571)
Abacn Aug 5, 2026
16f471e
[Docs] Add a contributor guide for running Python on a local Flink cl…
Eliaaazzz Aug 5, 2026
7ec43af
fix PostCommit Python Dependency
aIbrahiim Aug 5, 2026
7712ac6
Merge pull request #39637 from aIbrahiim/fix-postcommit-pydep-pyarrow
Amar3tto Aug 5, 2026
48c9e1f
fix(dataframe): claim remaining restriction range on empty/header-onl…
ManvithPanyam Aug 5, 2026
c60b021
[Iceberg CDC] Finish wiring CDC source together and add external API …
ahmedabu98 Aug 5, 2026
cb75d1b
Updates CHANGES.md to include Delta Lake CDC
chamikaramj Aug 5, 2026
8a5d5d2
Merge pull request #39644 from chamikaramj/update_change_log
Amar3tto Aug 5, 2026
e793e8a
add Timestamp.MICROS for iceberg timestamptz (#39592)
aIbrahiim Aug 5, 2026
e2ae447
Add google-api-python-client to Python 3.14 container (#39640)
Abacn Aug 5, 2026
8bf709c
add aws hadoop to DeltaIO (#39617)
derrickaw Aug 6, 2026
02ff297
[Dataflow Streaming] Remove finalizeCommits from processWork (#39648)
arunpandianp Aug 6, 2026
71a7efe
Update CHANGES.md for new release
Amar3tto Aug 6, 2026
cc822c0
Moving to 2.77.0-SNAPSHOT on master branch.
Aug 6, 2026
92de1e4
Bump github/codeql-action from 4.37.4 to 4.37.5 (#39651)
dependabot[bot] Aug 6, 2026
eea1e03
[Dataflow Streaming] Remove redundant onKeyTransition call (#39652)
arunpandianp Aug 6, 2026
c7a8f93
Fix Python 3.14 Container Build, Streamline Installation (#39659)
jrmccluskey Aug 6, 2026
0b91ed1
add mention of managed iceberg read breakage (#39660)
ahmedabu98 Aug 7, 2026
111c9c3
Bump github/codeql-action from 4.37.5 to 4.37.6 (#39673)
dependabot[bot] Aug 7, 2026
9a03f72
Bump cloud.google.com/go/bigtable from 1.51.0 to 1.52.0 in /sdks (#39…
dependabot[bot] Aug 7, 2026
9f2d498
Bump github.com/aws/aws-sdk-go-v2/service/s3 in /sdks (#39671)
dependabot[bot] Aug 7, 2026
57e1f8e
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /sdks (#39670)
dependabot[bot] Aug 7, 2026
1a21c61
fix iceberg CDC test (#39675)
aIbrahiim Aug 7, 2026
f9ca09b
[Spark] Support splittable DoFn self-checkpointing in portable batch …
Eliaaazzz Aug 7, 2026
837590e
Fix Row.toString NPE on a null nested inside an array, map or row (#3…
PDGGK Aug 7, 2026
d0cff01
[BigQueryIO] Parallelize schema update integration tests (#39622)
bvolpato Aug 7, 2026
1e4c093
[examples] Atomically publish subprocess executables (#39621)
bvolpato Aug 7, 2026
1fe64b9
Bump h2 from 4.3.0 to 4.4.1 in /sdks/python/container/py314 (#39677)
dependabot[bot] Aug 7, 2026
2e48a71
Add ml and interactive extras to quickstart-py doc (#39679)
Abacn Aug 7, 2026
d3d6e48
add closing dependabot step (#39649)
derrickaw Aug 7, 2026
0aacd03
Add helpers to interact with pipeline options in boot entrypoints (#3…
tvalentyn Aug 7, 2026
1318bfe
Fix runner compatibility matrix (#39682)
Abacn Aug 7, 2026
559d22c
fix ensurepip bundled pip cleanup for Python 3.12+ containers (#39683)
aIbrahiim Aug 8, 2026
d97899b
Add Sample.Any to the Python SDK to match Java's Sample.any (#39442)
SreeramaYeshwanthGowd Aug 10, 2026
680229c
normalize io.gcp.DicomSearch
aIbrahiim Aug 6, 2026
0b40089
Fix mobile gaming release validation background process cleanup for J…
damccorm Aug 10, 2026
d6a865d
Persist credentials for build_release_candidate.yml
Amar3tto Aug 10, 2026
f0da6f3
Enable OpenTelemetry stiching with Logs for Dataflow worker, both for…
stankiewicz Aug 10, 2026
8d24582
(IcebergIO) document writeProperties param more clearly (#39645)
clairemcginty Aug 10, 2026
367f46d
[Python] Create temporary dataset with a 24 hour ttl. (#39615)
aebrahim Aug 11, 2026
4731dbc
Fix RequestResponseIO parseAndThrow to preserve retryable exception t…
PDGGK Aug 11, 2026
c91aa1c
feat: add MongoDB driver handshake metadata for Java-based client con…
alexbevi Aug 11, 2026
eab1bce
Bump dorny/paths-filter from 4.0.1 to 4.0.3 (#39693)
dependabot[bot] Aug 11, 2026
f55c10b
Pin grpcio-tools==1.78.0 for python 3.14
Amar3tto Aug 11, 2026
67d6402
Merge pull request #39715 from apache/fix-python314
Amar3tto Aug 11, 2026
f353f12
[Dataflow Streaming] Mark worker as unhealthy in presence of stuck co…
arunpandianp Aug 11, 2026
569933c
Merge pull request #39655 from aIbrahiim/yaml-normalize-dicom-search
Amar3tto Aug 11, 2026
53b03f6
[Python] Deflake TextIO footer test (#39668)
bvolpato Aug 11, 2026
33b40fb
Bump github.com/aws/aws-sdk-go-v2/config in /sdks (#39692)
dependabot[bot] Aug 11, 2026
7dda2cd
Enable Apache Iceberg REST Metrics Reporting for Lakehouse (#39650)
feefs Aug 11, 2026
ce45298
Fixes to delta CDC read (#39713)
chamikaramj Aug 11, 2026
e344ec0
Python timestamp fixes. (#39722)
claudevdm Aug 11, 2026
524036f
bump FnAPI container to beam-master-20260811 (#39721)
ashwin-sampathkumar Aug 11, 2026
deb5e27
Bump js-yaml from 3.15.0 to 3.15.1 in /website/www (#39678)
dependabot[bot] Aug 12, 2026
22b73bb
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /sdks (#39695)
dependabot[bot] Aug 12, 2026
a0e2714
[KafkaIO] Remove beam_fn_api requirement for dynamic reads (#39735)
goutamadwant Aug 12, 2026
369409e
[IcebergIO] Serialize using json partition (#39705)
ahmedabu98 Aug 13, 2026
6ddc7fe
Log the System name in more places instead of the computationId (#39665)
rwiggles Aug 14, 2026
e818a0c
Feat: implementing active cleanup of orphaned subscriptions for the `…
HansMarcus01 Aug 14, 2026
cfc35b7
Bump cryptography from 48.0.1 to 50.0.0 in Python SDK
kennknowles Aug 14, 2026
dd896e2
[Dataflow Streaming] [Multi Key] Drop failed work in BoundedQueueExec…
arunpandianp Aug 15, 2026
630c751
Restore go CoGBK load test parameter (#39753)
Abacn Aug 15, 2026
d872d0a
[GSoC 2026] Requesting permissions for the TestPubSubContext cleanup …
HansMarcus01 Aug 15, 2026
0787986
Bump github.com/testcontainers/testcontainers-go in /sdks (#39740)
dependabot[bot] Aug 17, 2026
befa812
Fix: Removing users who do not have a valid Google account from the l…
HansMarcus01 Aug 17, 2026
d507f1b
Bump github/codeql-action from 4.37.6 to 4.37.7 (#39775)
dependabot[bot] Aug 17, 2026
649a900
Bump google.golang.org/api from 0.291.0 to 0.293.0 in /sdks (#39777)
dependabot[bot] Aug 17, 2026
9ea7c97
Bump cloud.google.com/go/bigquery from 1.79.0 to 1.80.0 in /sdks (#39…
dependabot[bot] Aug 17, 2026
1513185
Bump github.com/aws/aws-sdk-go-v2/config in /sdks (#39774)
dependabot[bot] Aug 17, 2026
a5f5f49
Merge pull request #39756: Bump cryptography from 48.0.1 to 50.0.0 in…
kennknowles Aug 17, 2026
5d919fe
Merge master into feat/18479-kafka-streams-runner-skeleton
junaiddshaukat Aug 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .agent/skills/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,19 @@ This directory contains skills that help the agent perform specialized tasks in

| Skill | Description |
|-------|-------------|
| [adding-new-metadata](adding-new-metadata/SKILL.md) | Guide on how to add and propagate new metadata fields in WindowedValue to avoid metadata loss |
| [beam-concepts](beam-concepts/SKILL.md) | Core Beam programming model (PCollections, PTransforms, windowing, triggers) |
| [beam-dofn-modernizer](beam-dofn-modernizer/SKILL.md) | Rewrite Apache Beam DoFn methods to remove legacy ProcessContext/OnTimerContext |
| [ci-cd](ci-cd/SKILL.md) | GitHub Actions workflows, debugging CI failures, triggering tests |
| [contributing](contributing/SKILL.md) | PR workflow, issue management, code review, release cycles |
| [gradle-build](gradle-build/SKILL.md) | Build commands, flags, publishing, troubleshooting |
| [io-connectors](io-connectors/SKILL.md) | 51+ I/O connectors, testing patterns, usage examples |
| [developing-new-io-connectors](developing-new-io-connectors/SKILL.md) | A detailed guide on developing new I/O connectors |
| [java-development](java-development/SKILL.md) | Java SDK development, building, testing, project structure |
| [license-compliance](license-compliance/SKILL.md) | Apache 2.0 license headers for all new files |
| [python-development](python-development/SKILL.md) | Python SDK environment setup, testing, building pipelines |
| [runners](runners/SKILL.md) | Direct, Dataflow, Flink, Spark runner configuration |
| [yaml-development](yaml-development/SKILL.md) | YAML SDK development, environment setup, testing, and key concepts |

## How Skills Work

Expand Down
347 changes: 347 additions & 0 deletions .agent/skills/developing-new-io-connectors/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,347 @@
---
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.

name: developing-new-io-connectors
description: End-to-end guide on developing new Apache Beam I/O connectors correctly, including core IO transforms, SchemaTransforms, URN proto definitions, Managed API integration, cross-language expansion service, and testing.
---

# Developing New Apache Beam I/O Connectors

This guide outlines the modern best practices and mandatory steps for building new Apache Beam I/O connectors. Modern Beam connectors are expected to be schema-aware, available in cross-language (Python, Go) pipelines via the Expansion Service, and seamlessly integrable with Beam YAML and the `Managed` I/O API.

## 1. Module Structure and Gradle Setup

New Java I/O connectors should reside under `sdks/java/io/<connector-name>`.

### Directory Layout
```text
sdks/java/io/<connector-name>/
├── build.gradle
└── src/
├── main/java/org/apache/beam/sdk/io/<connector-name>/
│ ├── <Connector>IO.java
│ ├── <Connector>ReadSchemaTransformProvider.java
│ └── <Connector>WriteSchemaTransformProvider.java
└── test/java/org/apache/beam/sdk/io/<connector-name>/
├── <Connector>IOTest.java
└── <Connector>ReadSchemaTransformProviderTest.java
```

### Gradle Configuration (`build.gradle`)
Your `build.gradle` must use standard Beam Java module conventions and explicitly declare necessary dependencies.

```groovy
plugins { id 'org.apache.beam.module' }
applyJavaNature(
// If <connector-name> contains hyphens, convert them to dots or underscores
automaticModuleName: 'org.apache.beam.sdk.io.<connector_name>',
)

description = "Apache Beam :: SDKs :: Java :: IO :: <Connector Name>"
ext.summary = "Integration with <External System>."

dependencies {
implementation project(path: ":sdks:java:core", configuration: "shadow")
implementation project(path: ":model:pipeline", configuration: "shadow") // For URN definitions

// Add external client libraries here
implementation library.java.<client_dependency>

// Handle strict dependency checking if necessary
permitUnusedDeclared library.java.<client_dependency>

// Standard test dependencies
testImplementation project(path: ":sdks:java:core", configuration: "shadowTest")
testImplementation library.java.junit
}
```

---

## 2. Core I/O Transform Implementation (`<Connector>IO.java`)

Follow Beam's canonical AutoValue builder pattern for user-facing API configuration. While core Java I/O connectors can be strongly typed using specific domain classes or Java generics (`<T>`) for idiomatic Java SDK usage, modern sources should also emphasize Beam `Row` and Schema support (e.g., via `.readRows()`). For excellent real-world implementations of this pattern, refer to `IcebergIO` and `DeltaIO`.

### Bounded & Unbounded Sources
Instead of legacy `Source` classes, implement reading via Beam's **Splittable DoFns (SDF)** framework for advanced features such as dynamic rebalancing and watermark support.

A primary read transform (such as `read()` or `readRows()`) typically extends `PTransform<PBegin, PCollection<T>>` (or `PCollection<Row>`). Using `PCollection` as input is meant for "ReadAll" operations (such as reading a collection of file patterns or queries).

An example SDF-based read transform is given below:

```java
public class MyIO {
public static ReadRows readRows() {
return new AutoValue_MyIO_ReadRows.Builder().build();
}

@AutoValue
public abstract static class ReadRows extends PTransform<PBegin, PCollection<Row>> {
public abstract @Nullable String getConfigurationOption();
public abstract @Nullable Schema getSchema();
public abstract Builder toBuilder();

@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setConfigurationOption(String value);
public abstract Builder setSchema(Schema schema);
public abstract ReadRows build();
}

public ReadRows withConfigurationOption(String value) {
return toBuilder().setConfigurationOption(value).build();
}

public ReadRows withSchema(Schema schema) {
return toBuilder().setSchema(schema).build();
}

@Override
public PCollection<Row> expand(PBegin input) {
return input
// `ReaderDoFn` is an SDF or source implementation that reads records and outputs `Row` objects.
.apply(ParDo.of(new ReaderDoFn(getConfigurationOption())))
.setRowSchema(getSchema());
}
}

public static WriteRows writeRows() {
return new AutoValue_MyIO_WriteRows.Builder().build();
}

@AutoValue
public abstract static class WriteRows extends PTransform<PCollection<Row>, PDone> {
public abstract @Nullable String getConfigurationOption();
public abstract Builder toBuilder();

@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setConfigurationOption(String value);
public abstract WriteRows build();
}

public WriteRows withConfigurationOption(String value) {
return toBuilder().setConfigurationOption(value).build();
}

@Override
public PDone expand(PCollection<Row> input) {
input.apply("WriteRecords", ParDo.of(new WriterDoFn(getConfigurationOption())));
return PDone.in(input.getPipeline());
}
}
}
```
* Please make sure that any code you add adheres to the Beam coding standards. These standards are documented here: https://beam.apache.org/contribute/code-guidelines/

* Especially scrutinize any logic that involves splitting the data for parallel processing since it is a common source of errors that can lead to data loss or data duplication related issues.

### Developing Sinks (Write Transforms)
When implementing data egress (Write transforms), avoid creating single-worker bottlenecks. Depending on your target system's transactional requirements, prefer one of the following canonical Beam sink patterns:

1. **DoFn-Based / Batching Sinks:** For external APIs or messaging systems (e.g., Kafka, Pub/Sub, NoSQL databases), use a `DoFn` that manages connections per bundle (`@StartBundle`, `@FinishBundle`) or utilizes `GroupIntoBatches` to perform highly efficient, parallel batched requests.
2. **Two-Phase Commit / Exactly-Once Sinks:** For transactional sinks (e.g., Relational DBs, Apache Iceberg, Delta Lake), implement a multi-stage `PTransform`:
* **Write Shards:** Write records in parallel tasks to staging files or temporary transactions, emitting commit descriptors (`PCollection<CommitMessage>`).
* **Global Commit:** Group the commit messages and execute a single final transaction to commit all staged files/shards.
3. **File-Based Sinks:** If your connector purely writes files, leverage Beam's `FileIO` core infrastructure (`FileIO.write()` / `FileIO.Sink`) rather than implementing custom file rolling and sharding logic.
4. **Error Reporting (Dead-Letter Queues):** Instead of failing the entire pipeline when an invalid element or API error occurs, modern Write transforms should optionally output a `PCollection<Row>` (or custom `WriteResult` / `PCollectionRowTuple`) containing failed records and explicit error metadata.

* Specially scrutinize any logic that can create duplicate data due to worker failures. Assume that any transform in the pipeline can fail and be retried multiple times by the Beam runner. If the sink does not handle this properly, it can lead to duplicate data in the target system.
---

## 3. Extending the Pipeline Model Proto (`external_transforms.proto`)

To standardize your transform identifier across SDKs, define its URN in Beam's protobuf schema.

1. Open `model/pipeline/src/main/proto/org/apache/beam/model/pipeline/v1/external_transforms.proto`.
2. Add your read/write URNs under the appropriate enum (e.g., `ManagedTransforms.Urns`).

```protobuf
message ManagedTransforms {
enum Urns {
// ... existing entries
MY_SYSTEM_READ = 15 [(org.apache.beam.model.pipeline.v1.beam_urn) =
"beam:schematransform:org.apache.beam:my_system_read:v1"];
MY_SYSTEM_WRITE = 16 [(org.apache.beam.model.pipeline.v1.beam_urn) =
"beam:schematransform:org.apache.beam:my_system_write:v1"];
}
}
```

3. Re-generate and compile the model protos:
```bash
./gradlew :model:pipeline:generateProto :model:pipeline:compileJava
```

---

## 4. Implementing `SchemaTransformProvider`

To expose your connector to cross-language pipelines and Beam YAML, create a typed `SchemaTransformProvider`.

```java
@AutoService(SchemaTransformProvider.class)
public class MyReadSchemaTransformProvider extends TypedSchemaTransformProvider<Configuration> {

@Override
public String identifier() {
return getUrn(ExternalTransforms.ManagedTransforms.Urns.MY_SYSTEM_READ);
}

@Override
public String description() {
return "Reads records from My System and outputs a PCollection of Beam Rows.";
}

@Override
protected SchemaTransform from(Configuration configuration) {
return new MyReadSchemaTransform(configuration);
}

@Override
public List<String> outputCollectionNames() {
return Collections.singletonList("output");
}

@DefaultSchema(AutoValueSchema.class)
@AutoValue
public abstract static class Configuration {
@SchemaFieldDescription("Configuration option description.")
public abstract String getConfigurationOption();

public static Builder builder() {
return new AutoValue_MyReadSchemaTransformProvider_Configuration.Builder();
}

@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setConfigurationOption(String value);
public abstract Configuration build();
}
}

static class MyReadSchemaTransform extends SchemaTransform {
private final Configuration configuration;

MyReadSchemaTransform(Configuration configuration) {
this.configuration = Objects.requireNonNull(configuration, "configuration cannot be null");
}

@Override
public PCollectionRowTuple expand(PCollectionRowTuple input) {
PCollection<Row> output = input.getPipeline().apply(
MyIO.readRows().withConfigurationOption(configuration.getConfigurationOption()));
return PCollectionRowTuple.of("output", output);
}
}
}
```

---

## 5. Integrating with Managed API (`Managed.java`)

Beam's `Managed` I/O transform provides a unified interface for data ingest/egress. To support it:

1. Open `sdks/java/managed/src/main/java/org/apache/beam/sdk/managed/Managed.java`.
2. Define a public constant identifier:
```java
public static final String MY_SYSTEM = "my_system";
```
3. Register your URNs in `READ_TRANSFORMS` or `WRITE_TRANSFORMS`:
```java
public static final Map<String, String> READ_TRANSFORMS =
ImmutableMap.<String, String>builder()
// ... existing transforms
.put(MY_SYSTEM, getUrn(ExternalTransforms.ManagedTransforms.Urns.MY_SYSTEM_READ))
.build();
```
4. Update the Javadoc block in `Managed.java` to list your new connector.

---

## 6. Expansion Service Registration

To enable non-Java SDKs (Python, Go) to discover and expand your new connector, include it in the standard Java Expansion Service.

1. Open `sdks/java/io/expansion-service/build.gradle`.
2. Add your module as a runtime dependency:
```groovy
dependencies {
// ... existing dependencies
runtimeOnly project(":sdks:java:io:<connector-name>")
}
```

---

## 7. Python & Beam YAML Integration

Once registered in the expansion service, your `SchemaTransform` can be utilized in Python and YAML. E.g., for `Managed` support in Python:

1. Open `sdks/python/apache_beam/transforms/managed.py`.
2. Export your identifier in `__all__` and map it to its URN in `Read._READ_TRANSFORMS` or `Write._WRITE_TRANSFORMS`:
```python
MY_SYSTEM = 'my_system'

__all__ = [
# ... existing
"MY_SYSTEM",
]

class Read(PTransform):
_READ_TRANSFORMS = {
# ... existing
MY_SYSTEM: ManagedTransforms.Urns.MY_SYSTEM_READ.urn,
}
```
3. In `sdks/python/apache_beam/transforms/external.py`, map the URN to the appropriate Expansion Service jar target in `MANAGED_TRANSFORM_URN_TO_JAR_TARGET_MAPPING`.

---

## 8. Verification and Testing

Verify your new connector thoroughly across multiple abstraction layers:

### 1. Unit Tests
Test your core builder and `SchemaTransformProvider` translation.
```bash
./gradlew :sdks:java:io:<connector-name>:test
```

### 2. Managed API Translation
In `ManagedSchemaTransformTranslationTest.java` (under `sdks/java/managed`), you can verify the translation structure of your managed transform. Note that `ManagedTest.java` generally uses dummy/test providers (`TestSchemaTransformProvider`) to keep dependencies lightweight.
```bash
./gradlew :sdks:java:managed:test
```

### 3. Integration Tests (IT)
Create integration tests to test end-to-end data processing against real system instances, including `Managed.read(Managed.MY_SYSTEM)` usage.

* Test resources should be managed via `ResourceManager` classes under the `it/` directory.
* Add GitHub Actions to trigger your tests when changes are made to your connector code. Consider adding one for pre-commit and one for post-commit.

### 4. Documentation
Add any necessary documentation for your connector under the `website/www/site/content/en/documentation/io/built-in/` directory.

---

> [!TIP]
> **Canonical Reference Implementations:** When developing a new connector, we highly recommend studying **Apache Iceberg** ([IcebergIO.java](https://github.com/apache/beam/blob/master/sdks/java/io/iceberg/src/main/java/org/apache/beam/sdk/io/iceberg/IcebergIO.java)) and **Delta Lake** ([DeltaIO.java](https://github.com/apache/beam/blob/master/sdks/java/io/delta/src/main/java/org/apache/beam/sdk/io/delta/DeltaIO.java)) as state-of-the-art reference implementations.

For more details see the [Developing I/O connectors](https://beam.apache.org/documentation/io/developing-io-overview) guide.
3 changes: 2 additions & 1 deletion .agent/skills/io-connectors/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,9 +189,10 @@ Beam supports using I/O connectors from one SDK in another via the expansion ser
```

## Creating New Connectors
See [Developing I/O connectors](https://beam.apache.org/documentation/io/developing-io-overview)

Key components:
1. **Source** - Reads data (bounded or unbounded)
2. **Sink** - Writes data
3. **Read/Write transforms** - User-facing API

For more detailed information on developing new I/O connectors see the [Developing new I/O connectors SKILL](../developing-new-io-connectors/SKILL.md).
Loading
Loading