Compatibility
This page documents which Python versions are supported by each slackblocks release line, so you can choose the right line for your runtime.
Each row in the table maps a major slackblocks release line to the oldest Python interpreter that can run it. Minimum Python means that version or any newer supported Python version—not that the release only works on that one version. The status in parentheses tells you whether the line receives current feature development or maintenance fixes only.
Start with the Python version used by your application or deployment environment, then choose the newest slackblocks line whose minimum requirement it meets. For example, Python 3.9 requires slackblocks 1.x, while Python 3.10 and newer can use 2.x.
Support matrix
slackblocks version | Minimum Python | Notes |
|---|---|---|
1.x (maintenance) | 3.8.1 | The last release line to support Python 3.8 and 3.9. |
2.x (current) | 3.10 | Modern typing (X | Y, list[X]), dataclasses with slots, match statements, and other Python 3.10+ features used internally. |
If you cannot upgrade Python, pin to the appropriate major version:
- pip (`requirements.txt`)
- poetry (`pyproject.toml`)
- uv (`pyproject.toml`)
slackblocks>=1,<2 # Python 3.8/3.9 friendly
slackblocks>=2,<3 # Python 3.10+ only
slackblocks = "^1" # Python 3.8/3.9 friendly
slackblocks = "^2" # Python 3.10+ only
"slackblocks>=1,<2" # Python 3.8/3.9 friendly
"slackblocks>=2,<3" # Python 3.10+ only
Why we move forward
slackblocks follows the upstream Python release cycle. Once a Python version reaches its official end-of-life, it stops receiving security patches, and we prefer not to ship new feature work targeting unmaintained runtimes.
| Python version | EOL date |
|---|---|
| 3.8 | 2024-10-07 |
| 3.9 | 2025-10-31 |
| 3.10 | 2026-10 |
| 3.11 | 2027-10 |
| 3.12 | 2028-10 |
| 3.13 | 2029-10 |
| 3.14 | 2030-10 |
Bugfix releases on existing lines may continue past these dates on a best-effort basis, but new feature work will target supported Pythons.
Choosing a version
- You're on Python 3.8 or 3.9: install the latest
1.x. - You're on Python 3.10 or newer: install the current
2.xrelease line. - You're starting a new project on a modern Python: prefer
2.xto take advantage of the improved typing surface.
For an upgrade walkthrough from 1.x to 2.x, see the
Migration Guide.
See Installation and the TypeScript API reference for supported versions and native conventions. This page's historical release-line discussion applies to Python.
See Installation and the Go API reference for supported versions and native conventions. This page's historical release-line discussion applies to Python.
See Installation and the Java API reference for supported versions and native conventions. This page's historical release-line discussion applies to Python.
See Installation and the C# API reference for supported versions and native conventions. This page's historical release-line discussion applies to Python.
See Installation and the Ruby API reference for supported versions and native conventions. This page's historical release-line discussion applies to Python.
Rust support policy
Rust support begins with coordinated version 2.6.0. The crate uses edition 2024 with MSRV 1.85.0. CI tests the MSRV and current stable on Linux, plus current stable on macOS and Windows. Raising the MSRV requires an explicit compatibility decision and release notes; dependency updates alone must not narrow supported versions.
Runtime dependencies use compatible Serde/serde_json version requirements.
The checked-in lockfile fixes development builds. Package checks also resolve
fresh consumer dependencies, declared lower bounds, and the consumer-enabled
arbitrary_precision and preserve_order serde_json features.
The optional sending examples have a separate application manifest and lockfile
in rust/integrations. Slack Morphism 2.29.0 and reqwest 0.13.5 are tested there on
Rust 1.85 and stable. Resolver 3 and rust-version = "1.85" select compatible
transitive dependencies, including older Serde helpers and ICU releases where
newer versions require a newer compiler. The mock server is pinned to wiremock
0.6.2 because later versions use Rust 1.88 syntax without declaring that minimum.
These are application/test requirements and never enter the core crate's
manifest or lockfile. A dependency update must pass the same compiler matrix.
Role/vocabulary enums are #[non_exhaustive]; include a wildcard match arm so
new Slack variants can be added. Private fields and validated builders preserve
invariants. No earlier Rust release line exists to migrate from.
PHP support policy
PHP 8.2+ on 64-bit Linux, macOS and Windows is supported. CI runs 8.2 and 8.5 on all three platforms, plus 8.3 and 8.4 on Linux. The minimum remains 8.2 even when development or integration dependencies are updated. PHP itself provides security fixes for 8.2 through December 2026; applications should prefer a currently supported PHP release (PHP support schedule).
The core needs only JSON and PCRE. cURL, JoliCode and Laravel are optional application dependencies tested separately. The minimum integration lock uses Laravel 12; newest compatible versions are also resolved on current PHP.
2.7.0 is the first planned PHP release. Named arguments, enum cases, readonly properties, JSON field names and validation categories are compatibility surfaces. Human-readable error prose may improve. Existing Python, TypeScript, Go, Java, C#, Ruby and Rust minimum versions are unchanged.
Integers preserve the signed 64-bit range, including values above JavaScript's safe-integer limit. Floats use PHP's binary double semantics; arbitrary-precision decimal numbers are not supported. Checked JSON ingress rejects integer overflow, nonfinite values and nonzero numbers that underflow to zero. Strings must be valid UTF-8 and Slack string limits count Unicode code points. Opaque JSON is limited to 128 levels; cyclic graphs and custom object instances are rejected.
Elixir support policy
Elixir 1.16.3 or newer, below 2.0, with a compatible OTP version from 26.2, on 64-bit Linux, macOS and Windows. CI checks Elixir 1.16–1.20 against compatible OTP 26–29 combinations, with minimum/current compiler lanes on all three platforms. Elixir support begins with version 2.8.0. Other implementations' minimum language versions are unchanged.
Runtime dependencies are Jason 1.4.5+ (below 2.0) and Decimal 2.4+ or 3.x. Existing Jason builds may need the installation rebuild step. Req, slack_elixir and Ecto integration tests use a separate project; they add no HTTP, database or web framework dependency to the core package.
Public struct fields, constructor keywords, typespecs, enum atoms, JSON field names and validation categories form the compatibility surface. New optional fields or enum values are additive; match only fields you need and retain a catch-all branch for evolving enums. Error prose may improve. Persist Slack wire JSON instead of serialized BEAM structs across package upgrades.
Integers use BEAM arbitrary precision. Checked JSON decoding preserves integer tokens, rejects duplicate keys and rejects decimal tokens that lose value in the shortest-decimal float round trip, overflow or underflow to nonzero values lost as zero. Integer fields reject decimal/exponent tokens. Decimal scale is not retained; negative zero remains a float. Map ingress cannot recover information discarded by another parser. Opaque JSON nesting is capped at 128 levels. UTF-8 strings are required and limits count Unicode code points, rather than bytes or graphemes.
Erlang can call the same modules using binary strings and keyword tuples; see the tested Rebar3 and standalone release configuration.