Skip to main content

Compatibility and versioning

Straw is pre-1.0. Patch releases preserve documented behavior. Minor releases may make incompatible protocol or configuration changes only when release notes identify the change, migration, and rollback path.

Supported matrix​

ComponentSupported versionCompatibility rule
Straw Control/Egress/CLIsame releaseProtocol-minor-2 rollout is Control first, then Egress and CLI; follow release-specific ordering
worker protocol and Go bindingv0.4.0Exact tag in go.mod; protocol 1.2 adds upstream-proxy claims/instructions while accepting older direct workers
Go SDKv0.4.0Exact public tag in go.mod; official workers advertise protocol minor 2
Python SDK and bindingv0.2.1 / v0.4.0Exact immutable public Git tags in uv.lock; Python worker runtime remains direct-only at protocol minor 1
container imagesrelease tag or digestNever depend on a moving tag for production rollback
Go / Python / Node1.26.5 / 3.13 / 20+Development and CI toolchains

Fingerprint profile catalogue​

The built-in fingerprint contract revision is tls-client-v1.15.1-http1-http2. Straw adapts the complete set of 79 profile definitions from tls-client v1.15.1, but does not depend on either tls-client or fhttp at runtime. The contract covers the TLS ClientHello and the profile's HTTP/2 settings order, connection flow window, pseudo-header order, stream priority, and priority frames. HTTP/3 fields are deliberately ignored.

Names are exact and case-sensitive:

brave_146 brave_146_PSK
chrome_103 chrome_104 chrome_105 chrome_106 chrome_107 chrome_108 chrome_109 chrome_110 chrome_111 chrome_112
chrome_116_PSK chrome_116_PSK_PQ chrome_117 chrome_120 chrome_124 chrome_130_PSK chrome_131 chrome_131_PSK
chrome_133 chrome_133_PSK chrome_144 chrome_144_PSK chrome_146 chrome_146_PSK
cloudscraper confirmed_android confirmed_ios
firefox_102 firefox_104 firefox_105 firefox_106 firefox_108 firefox_110 firefox_117 firefox_120 firefox_123
firefox_132 firefox_133 firefox_135 firefox_146_PSK firefox_147 firefox_147_PSK firefox_148
mesh_android mesh_android_1 mesh_android_2 mesh_ios mesh_ios_1 mesh_ios_2
mms_ios mms_ios_1 mms_ios_2 mms_ios_3
nike_android_mobile nike_ios_mobile
okhttp4_android_7 okhttp4_android_8 okhttp4_android_9 okhttp4_android_10 okhttp4_android_11 okhttp4_android_12
okhttp4_android_13
opera_89 opera_90 opera_91
safari_15_6_1 safari_16_0 safari_ios_15_5 safari_ios_15_6 safari_ios_16_0 safari_ios_17_0 safari_ios_18_0
safari_ios_18_5 safari_ios_26_0 safari_ipad_15_6
zalando_android_mobile zalando_ios_mobile

Profiles ending in _PSK (including _PSK_PQ) maintain an isolated bounded TLS session cache per profile and executor. The first connection omits an empty pre-shared-key extension; a later connection may offer PSK only after the destination has supplied a valid session ticket. This avoids cross-profile session leakage while preserving resumption behavior. The catalogue does not provide browser headers, cookies, JavaScript execution, or browser state.

The adapted source provenance and upstream BSD-4-Clause text are shipped in THIRD_PARTY_NOTICES.md.

REST paths and stable error codes are additive within a minor line. JSON clients must ignore unknown fields. Removing or changing a field, route, error meaning, config default, metric, or CLI output contract requires a minor release, an Unreleased changelog entry, migration guidance, and a deprecation period where practical. Runtime snapshots are validated as a whole and use config_version; protobuf/NATS changes require negotiation fixtures and coordinated binding tags.

Before 1.0, deprecation normally lasts one minor release. Security fixes may remove unsafe behavior immediately. Rollback restores the previous binaries/images and, for stateful profiles, the backup taken before upgrade.

The documented dependency release order is protocol source, generated bindings (straw-protos-go and straw-protos-python v0.4.0), the Go SDK (v0.4.0) and Python SDK (v0.2.1), then Straw. The current repository records those public tags directly; local URL rewrites, replace directives, and unpublished commits are not supported.

New Control accepts minor-0/minor-1 workers for direct pools, including published minor-1 runtimes that omitted protocol_minor from assignment replies and response envelopes. Minor 2 requires an exact envelope minor and exact upstream_proxy_id claim for proxy pools. Old Control rejects minor-2 workers and can strip new shared-state fields, so this feature's runtime order is new Control first while all pools remain direct, removal of every old Control and expiration of shared worker rows, then minor-2 workers and fresh proxy pools. Upgrade the CLI and application SDKs afterward. Existing worker JSON without upstream_proxies, pool JSON without upstream_proxy, and direct requests retain direct-local behavior.