Skip to main content

css_inline

build status pypi versions license codecov.io gitter

css_inline is a high-performance library for inlining CSS into HTML 'style' attributes.

This library is designed for scenarios such as preparing HTML emails or embedding HTML into third-party web pages.

For instance, the library transforms HTML like this:

<html>
  <head>
    <style>h1 { color:blue; }</style>
  </head>
  <body>
    <h1>Big Text</h1>
  </body>
</html>

into:

<html>
  <head></head>
  <body>
    <h1 style="color:blue;">Big Text</h1>
  </body>
</html>
  • Uses reliable components from Mozilla's Servo project
  • 10-500x faster than alternatives
  • Inlines CSS from style and link tags
  • Removes style and link tags
  • Resolves external stylesheets (including local files)
  • Optionally caches external stylesheets
  • Can process multiple documents in parallel
  • Works on Linux, Windows, macOS and in the browser via PyOdide
  • Supports HTML5 & CSS3
  • Tested on CPython 3.10, 3.11, 3.12, 3.13, 3.14 and PyPy 3.11.

Playground

If you'd like to try css-inline, you can check the WebAssembly-powered playground to see the results instantly.

Installation

Install with pip:

pip install css_inline

Pre-compiled wheels are available for most popular platforms. If not available for your platform, a Rust compiler will be needed to build this package from source. Rust version 1.65 or higher is required.

Usage

import css_inline

HTML = """<html>
<head>
    <style>h1 { color:blue; }</style>
</head>
<body>
    <h1>Big Text</h1>
</body>
</html>"""

inlined = css_inline.inline(HTML)
# HTML becomes this:
#
# <html>
# <head>
#    <style>h1 { color:blue; }</style>
# </head>
# <body>
#     <h1 style="color:blue;">Big Text</h1>
# </body>
# </html>

Note that css-inline automatically adds missing html and body tags, so the output is a valid HTML document.

Alternatively, you can inline CSS into an HTML fragment. Structural tags (<html>, <head>, <body>) are stripped from the output; only their contents are preserved. Use inline if you need to keep the full document structure:

FRAGMENT = """<main>
<h1>Hello</h1>
<section>
<p>who am i</p>
</section>
</main>"""

CSS = """
p {
    color: red;
}

h1 {
    color: blue;
}
"""

inlined = css_inline.inline_fragment(FRAGMENT, CSS)
# HTML becomes this:
# <main>
# <h1 style="color: blue;">Hello</h1>
# <section>
# <p style="color: red;">who am i</p>
# </section>
# </main>

When there is a need to inline multiple HTML documents simultaneously, css_inline offers inline_many and inline_many_fragments functions. This feature allows for concurrent processing of several inputs, significantly improving performance when dealing with a large number of documents.

import css_inline

css_inline.inline_many(["<...>", "<...>"])

Under the hood, inline_many, spawns threads at the Rust layer to handle the parallel processing of inputs. This results in faster execution times compared to employing parallel processing techniques at the Python level.

Note: To fully benefit from inline_many, you should run your application on a multicore machine.

Configuration

For configuration options use the CSSInliner class:

import css_inline

inliner = css_inline.CSSInliner(keep_style_tags=True)
inliner.inline("...")
  • inline_style_tags. Specifies whether to inline CSS from "style" tags. Default: True
  • keep_style_tags. Specifies whether to keep "style" tags after inlining. Default: False
  • keep_link_tags. Specifies whether to keep "link" tags after inlining. Default: False
  • keep_at_rules. Specifies whether to keep "at-rules" (starting with @) after inlining. Default: False
  • minify_css. Specifies whether to remove trailing semicolons and spaces between properties and values. Default: False
  • base_url. The base URL used to resolve relative URLs. If you'd like to load stylesheets from your filesystem, use the file:// scheme. Default: None
  • load_remote_stylesheets. Specifies whether remote stylesheets should be loaded. Default: True
  • cache. Specifies caching options for external stylesheets (for example, StylesheetCache(size=5)). Default: None
  • extra_css. Extra CSS to be inlined. Default: None
  • preallocate_node_capacity. Advanced. Preallocates capacity for HTML nodes during parsing. This can improve performance when you have an estimate of the number of nodes in your HTML document. Default: 32
  • remove_inlined_selectors. Specifies whether to remove selectors that were successfully inlined from <style> blocks. Default: False
  • apply_width_attributes. Specifies whether to add width HTML attributes from CSS width properties on supported elements (table, td, th, img). Default: False
  • apply_height_attributes. Specifies whether to add height HTML attributes from CSS height properties on supported elements (table, td, th, img). Default: False

You can also skip CSS inlining for an HTML tag by adding the data-css-inline="ignore" attribute to it:

<head>
  <style>h1 { color:blue; }</style>
</head>
<body>
  <!-- The tag below won't receive additional styles -->
  <h1 data-css-inline="ignore">Big Text</h1>
</body>

The data-css-inline="ignore" attribute also allows you to skip link and style tags:

<head>
  <!-- Styles below are ignored -->
  <style data-css-inline="ignore">h1 { color:blue; }</style>
</head>
<body>
  <h1>Big Text</h1>
</body>

Alternatively, you may keep style from being removed by using the data-css-inline="keep" attribute. This is useful if you want to keep @media queries for responsive emails in separate style tags. Such tags will be kept in the resulting HTML even if the keep_style_tags option is set to false.

<head>
  <!-- Styles below are not removed -->
  <style data-css-inline="keep">h1 { color:blue; }</style>
</head>
<body>
  <h1>Big Text</h1>
</body>

Another possibility is to set keep_at_rules option to true. At-rules cannot be inlined into HTML therefore they get removed by default. This is useful if you want to keep at-rules, e.g. @media queries for responsive emails in separate style tags but inline any styles which can be inlined. Such tags will be kept in the resulting HTML even if the keep_style_tags option is explicitly set to false.

<head>
  <!-- With keep_at_rules=true "color:blue" will get inlined into <h1> but @media will be kept in <style> -->
  <style>h1 { color: blue; } @media (max-width: 600px) { h1 { font-size: 18px; } }</style>
</head>
<body>
  <h1>Big Text</h1>
</body>

If you set the the minify_css option to true, the inlined styles will be minified by removing trailing semicolons and spaces between properties and values.

<head>
  <!-- With minify_css=True, the <h1> will have `style="color:blue;font-weight:bold"` -->
  <style>h1 { color: blue; font-weight: bold; }</style>
</head>
<body>
  <h1>Big Text</h1>
</body>

If you'd like to load stylesheets from your filesystem, use the file:// scheme:

import css_inline

# styles/email is relative to the current directory
inliner = css_inline.CSSInliner(base_url="file://styles/email/")
inliner.inline("...")

You can also cache external stylesheets to avoid excessive network requests:

import css_inline

inliner = css_inline.CSSInliner(
    cache=css_inline.StylesheetCache(size=5)
)
inliner.inline("...")

Caching is disabled by default.

XHTML compatibility

If you'd like to work around some XHTML compatibility issues like closing empty tags (<hr> vs. <hr/>), you can use the following snippet that involves lxml:

import css_inline
from lxml import html, etree

document = "..."  # Your HTML document
inlined = css_inline.inline(document)
tree = html.fromstring(inlined)
inlined = etree.tostring(tree).decode(encoding="utf-8")

Performance

css-inline is powered by efficient tooling from Mozilla's Servo project and significantly outperforms other Python alternatives in terms of speed. Most of the time it achieves over a 10x speed advantage compared to the next fastest alternative.

Here is the performance comparison:

Size css_inline 0.19.0 premailer 3.10.0 toronado 0.1.0 inlinestyler 0.2.5 pynliner 0.8.0
Basic 230 B 4.27 µs 85.05 µs (19.93x) 495.30 µs (116.05x) 1.02 ms (238.87x) 867.79 µs (203.32x)
Realistic-1 8.58 KB 80.59 µs 1.03 ms (12.76x) 11.55 ms (143.29x) 26.37 ms (327.21x) 11.71 ms (145.36x)
Realistic-2 4.3 KB 46.88 µs 1.44 ms (30.73x) ERROR 17.71 ms (377.77x) ERROR
GitHub page 1.81 MB 17.57 ms 10.78 s (613.48x) ERROR ERROR ERROR

The "Basic" case was obtained by benchmarking the example from the Usage section. Note that the toronado, inlinestyler, and pynliner libraries encountered errors when used to inline CSS in the last scenarios.

The benchmarking code is available in the benches/bench.py file. The benchmarks were conducted using the stable rustc 1.91, Python 3.14.2 on Ryzen 9 9950X.

Comparison with other libraries

Besides performance, css-inline differs from other Python libraries for CSS inlining.

  • Generally supports more CSS features than other libraries (for example, toronado and pynliner do not support pseudo-elements);
  • It has fewer configuration options and is not as flexible as premailer;
  • Works on fewer platforms than LXML-based libraries (premailer, inlinestyler, toronado, and optionally pynliner);
  • Does not have debug logs yet;
  • Supports only HTML 5.

Further reading

If you want to know how this library was created & how it works internally, you could take a look at these articles:

License

This project is licensed under the terms of the MIT license.

Metadata

Release files for css-inline 0.22.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for css-inline 0.22.0
File Size Uploaded
css_inline-0.22.0.tar.gz 74.5 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for css-inline 0.22.0
File
css_inline-0.22.0-pp311-pypy311_pp73-manylinux_2_24_x86_64.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.24+ x86-64 Details
css_inline-0.22.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.whl PyPy 3.11 PyPy 3.11 7.3 Linux glibc 2.24+ ARM64 Details
css_inline-0.22.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl PyPy 3.11 PyPy 3.11 7.3 macOS 10.12+ x86-64 Details
css_inline-0.22.0-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
css_inline-0.22.0-cp310-abi3-win32.whl CPython 3.10 abi3 Windows x86-32 Details
css_inline-0.22.0-cp310-abi3-pyemscripten_2026_0_wasm32.whl CPython 3.10 abi3 PyEmscripten 2026.0+ WebAssembly Details
css_inline-0.22.0-cp310-abi3-pyemscripten_2025_0_wasm32.whl CPython 3.10 abi3 PyEmscripten 2025.0+ WebAssembly Details
css_inline-0.22.0-cp310-abi3-musllinux_1_2_x86_64.whl CPython 3.10 abi3 Linux musl 1.2+ x86-64 Details
css_inline-0.22.0-cp310-abi3-musllinux_1_2_armv7l.whl CPython 3.10 abi3 Linux musl 1.2+ ARMv7l Details
css_inline-0.22.0-cp310-abi3-musllinux_1_2_aarch64.whl CPython 3.10 abi3 Linux musl 1.2+ ARM64 Details
css_inline-0.22.0-cp310-abi3-manylinux_2_24_armv7l.whl CPython 3.10 abi3 Linux glibc 2.24+ ARMv7l Details
css_inline-0.22.0-cp310-abi3-manylinux_2_24_aarch64.whl CPython 3.10 abi3 Linux glibc 2.24+ ARM64 Details
css_inline-0.22.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details
css_inline-0.22.0-cp310-abi3-manylinux_2_12_i686.manylinux2010_i686.whl CPython 3.10 abi3 Linux glibc 2.12+ x86-32 Details
css_inline-0.22.0-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details
css_inline-0.22.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.10 abi3 macOS 11.0+ ARM64, macOS 10.12+ x86-64, macOS 10.12+ universal2 (ARM64, x86-64) Details

Total release size: 29.4 MB

Release files / css_inline-0.22.0.tar.gz

Download URL css_inline-0.22.0.tar.gz
Size 74.5 kB
Tags Source
SHA-256 checksum
How to use checksums
c7682a3ce51e915b30f592f488ee4cb06ea138746bc13784178b230615dff041
BLAKE2b-256 checksum
How to use checksums
8d05247b116706a315a3128cf37dc4aaee6bea80ec05f1b8661fed6e4e225155
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-pp311-pypy311_pp73-manylinux_2_24_x86_64.whl

Download URL css_inline-0.22.0-pp311-pypy311_pp73-manylinux_2_24_x86_64.whl
Size 1.9 MB
Tags Linux glibc 2.24+ x86-64 PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
c68bcee6e20b50d78ef385eefc4afd19c6951c8d89a987b50c08e285e8685a6f
BLAKE2b-256 checksum
How to use checksums
e42d3fabcdefab751befb152bd76b22f719ffb8a9f6cd21fcd0bd95ce3817f17
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.whl

Download URL css_inline-0.22.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.whl
Size 1.9 MB
Tags Linux glibc 2.24+ ARM64 PyPy 3.11 PyPy 3.11 7.3
SHA-256 checksum
How to use checksums
c21d38deccecafcb4d6b99db6e19782a10ebfb97277d8b83ceb99c5a51e47d4f
BLAKE2b-256 checksum
How to use checksums
c46249443ab24f287069ec1038f92a78aa62b09bac1dce9c2b63c1d86e399740
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl

Download URL css_inline-0.22.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl
Size 1.8 MB
Tags PyPy 3.11 PyPy 3.11 7.3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
f011b6b97f20619d6837ce101996dd7961821ab46d1ff07b32bf7951f446a758
BLAKE2b-256 checksum
How to use checksums
f7cb42c4356eefab4983fc84be89753123aa5652ff5926543a368353d1d69e71
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-win_amd64.whl

Download URL css_inline-0.22.0-cp310-abi3-win_amd64.whl
Size 1.9 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
7cf803ebcc56f81c7575604e51a949fcea551a47bae433dca81b602ef85ae31c
BLAKE2b-256 checksum
How to use checksums
0f54894bcb844c6177f12b5b738a324d92ee3c30eed4a2161ea1f42609e790e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-win32.whl

Download URL css_inline-0.22.0-cp310-abi3-win32.whl
Size 1.6 MB
Tags CPython 3.10 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
a8db2042511690adc9957a0f9ce46b9bb27e2c528afe99c053d75e9bffa50ca9
BLAKE2b-256 checksum
How to use checksums
8b3364db28f9392427acc46a5722697e90a92c7e29154e102856efec836faa96
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-pyemscripten_2026_0_wasm32.whl

Download URL css_inline-0.22.0-cp310-abi3-pyemscripten_2026_0_wasm32.whl
Size 524.1 kB
Tags CPython 3.10 PyEmscripten 2026.0+ WebAssembly abi3
SHA-256 checksum
How to use checksums
7ae34ccc23b37626e0e2dd7c4c5b1244849e977f7c377c3105dab8d3fd91616c
BLAKE2b-256 checksum
How to use checksums
22b04bff3fa4253107ba64d393b091203109b5970537404466c00aa158cdb6a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-pyemscripten_2025_0_wasm32.whl

Download URL css_inline-0.22.0-cp310-abi3-pyemscripten_2025_0_wasm32.whl
Size 527.6 kB
Tags CPython 3.10 PyEmscripten 2025.0+ WebAssembly abi3
SHA-256 checksum
How to use checksums
5d0c7eaba289ca46fdc686df8de670eec4a2c71e2280f1740ae89ec63286629f
BLAKE2b-256 checksum
How to use checksums
7e2fb1a113f70692a5385d6518e7aae1f4134c30949ed67ab684fe1c811f1d78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-musllinux_1_2_x86_64.whl

Download URL css_inline-0.22.0-cp310-abi3-musllinux_1_2_x86_64.whl
Size 2.2 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
30cf11824e8a0bedc794f2161f3e8128418bb0e659ff41533bc59175b88fed16
BLAKE2b-256 checksum
How to use checksums
1be99d534020fca14a28b11af950e7e20132878da65788c3aba874e2db6e9b2b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-musllinux_1_2_armv7l.whl

Download URL css_inline-0.22.0-cp310-abi3-musllinux_1_2_armv7l.whl
Size 2.0 MB
Tags CPython 3.10 Linux musl 1.2+ ARMv7l abi3
SHA-256 checksum
How to use checksums
efae706d1d67b342086e8c2b39ec9d1ec374a1b12752d2b4cf3e0b44f28534da
BLAKE2b-256 checksum
How to use checksums
2cc3eba6ec16c88dad15edec9fe52ae3aaf9e54efd27325267f31827a433656f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-musllinux_1_2_aarch64.whl

Download URL css_inline-0.22.0-cp310-abi3-musllinux_1_2_aarch64.whl
Size 2.1 MB
Tags CPython 3.10 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
7ea49db51a86b2e4db77ad615fed3f7a45d112d89e04a78e2d89c9f3ef748f50
BLAKE2b-256 checksum
How to use checksums
56a83a894f99680449b3186bd94733cff6647233e7fba43153d376bcda5cf0da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-manylinux_2_24_armv7l.whl

Download URL css_inline-0.22.0-cp310-abi3-manylinux_2_24_armv7l.whl
Size 1.8 MB
Tags CPython 3.10 Linux glibc 2.24+ ARMv7l abi3
SHA-256 checksum
How to use checksums
d5052acd284c45416b0afc599ee1667951b73c912459f5f5114626ed89836e08
BLAKE2b-256 checksum
How to use checksums
55853db222410e79274acec640d111e6fbe6a5bbc4ca376bc8fb545db64d36c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-manylinux_2_24_aarch64.whl

Download URL css_inline-0.22.0-cp310-abi3-manylinux_2_24_aarch64.whl
Size 1.9 MB
Tags CPython 3.10 Linux glibc 2.24+ ARM64 abi3
SHA-256 checksum
How to use checksums
f262d08ac8b0a7276ab270531e47be0eebdb51294dd0e7f9b8131bfdadbc77b9
BLAKE2b-256 checksum
How to use checksums
c549679991e7513436e81f326e73aa9bd4ed157c55754682dd64947cc5fb0278
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL css_inline-0.22.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.9 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
e92ac1732733d9f63542624150ebf3e6b6215ef0b45748e718ae27ca4bd42f4f
BLAKE2b-256 checksum
How to use checksums
cff80ad94bf09db4643fbcee0aa09e031b3bf69b967ac910f58ff1a9bec3ffd2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-manylinux_2_12_i686.manylinux2010_i686.whl

Download URL css_inline-0.22.0-cp310-abi3-manylinux_2_12_i686.manylinux2010_i686.whl
Size 1.9 MB
Tags CPython 3.10 Linux glibc 2.12+ x86-32 abi3
SHA-256 checksum
How to use checksums
439bfd47e08b6b8fe108bfc72e1394d9e18bf8f6800ad13e32c0fb11e10460fa
BLAKE2b-256 checksum
How to use checksums
7673568e13331ebb1e0d151ff23c83f9959ae335833e4fb5f7b2660dd636c33e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-macosx_10_12_x86_64.whl

Download URL css_inline-0.22.0-cp310-abi3-macosx_10_12_x86_64.whl
Size 1.8 MB
Tags CPython 3.10 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
14534e2a3398bf5e4250ea970c9d3954e1a90d5f4c17edbaa4d768ad67f1ede6
BLAKE2b-256 checksum
How to use checksums
644b4c53175d1455cbf091f006084c60cc104f8189b98b43b9e1290c362a97c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / css_inline-0.22.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL css_inline-0.22.0-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 3.6 MB
Tags CPython 3.10 abi3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
fd0741102dadd10928a519f86e61399a9d8f830efba2c3d65f272e08075b9e24
BLAKE2b-256 checksum
How to use checksums
9f71c92f91ac62c532ccc7837da9ee8e70c61a6257844522ea4ee8fbb03ba2bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.22.0 This release

17 release files

0.14.5

9 release files

0.9.0

21 release files

0.8.7

21 release files

0.8.6

21 release files

0.8.4

40 release files

0.8.3

52 release files

0.8.1

48 release files

0.8.0

47 release files

0.7.5

13 release files

0.7.3

13 release files

0.7.2

13 release files

0.7.1

13 release files

0.6.2

16 release files

0.4.0

13 release files

0.3.0

13 release files

0.2.0

13 release files

0.1.0

13 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page