Skip to main content

konform

Multi-rule Python linter and language server — fast, configurable, and CI-ready.

Work in progress. konform is under active development. Rules, configuration keys, CLI flags, and the LSP surface may change at any time, including in backwards-incompatible ways, until a 1.0 release.

Rules

KIS001 — Module-only imports

Checks that every from X import Y only imports a sub-module, not an object (function, class, or constant), following the Google Python Style Guide §2.2.

# Bad — KIS001: `join` is a function, not a module
from os.path import join

# Good
import os.path
from os import path       # `path` is a module

This rule is sometimes fixable: konform rewrites the import automatically when it's safe to do so. It leaves the violation for you to fix by hand when the new import's name is already bound elsewhere in the file -- either as a local variable, or by a different import that would then overlap with it (two from X import Y statements silently bound to the same name but pointing at different modules).

KIS002 — Unnecessary import alias

Flags from X import Y as Z when the alias Z buys nothing -- Y isn't bound to anything else in the module, so the alias only adds a layer of indirection.

# Bad — KIS002: `bar_baz` isn't needed, nothing else is named `baz`
from foo.bar import baz as bar_baz

# Good
from foo.bar import baz

The alias is left alone when it's actually doing something: renaming away a collision with a local name or another import, a leading-underscore "don't re-export this" marker, a self-alias (import x as x, which is Ruff's PLC0414 territory), or a relative import (from . import x as y, which has no stable module identity to key a collision check on). Plain import X as Z statements are out of scope too -- dropping the alias there changes what gets bound, unlike from X import Y as Z.

This rule is sometimes fixable: konform drops the alias and renames every use of it back to the original name. It leaves the violation for you to fix by hand when the alias is shadowed somewhere, or bound to more than one import in the file.

The fix is marked unsafe -- konform can't rule out other, dynamic references to the alias by name, so it's only applied with --unsafe-fixes (see Usage below).

KPT — User-defined pattern rules

Load regex patterns from konform_patterns.toml (auto-discovered next to pyproject.toml) or inline in pyproject.toml:

[[tool.konform.KPT.rules]]
id      = "KPT001"
message = "Use the project logger instead of bare print()."
pattern = '^\s*print\s*\('
files   = ["src/**/*.py"]
level   = "warning"

Installation

pip install konform

Wheels ship a pre-compiled Rust binary — no Rust installation needed at runtime.

Usage

# Lint all Python files under src/
konform check src/

# Lint and apply auto-fixes in one pass
konform check --fix src/

# Also apply fixes marked unsafe (e.g. KIS002)
konform check --fix --unsafe-fixes src/

# Apply fixes only (no lint report)
konform check --fix src/

# Show a unified diff of what format would change
konform check --diff src/

# Output violations as JSON (e.g. for tooling)
konform check --output-format json src/

# Suppress hints and summary (violations only)
konform check -q src/

# No output — just exit 1 on violations
konform check -s src/

# List all rules
konform rule --list

# Explain a rule
konform rule --explain KIS001

# Clear the local cache
konform clean

When some reported violations are fixable only via --unsafe-fixes (e.g. KIS002), the summary breaks safe and unsafe-only counts out separately, and the suggested fix command is adjusted accordingly.

Configuration

Add a [tool.konform] section to pyproject.toml (or a standalone konform.toml):

[tool.konform]
cache-dir = ".konform_cache"
workers   = 0         # 0 = os.cpu_count()
src       = [".", "src"]   # search roots for KIS001's module-existence probe;
                            # see "Module search roots" below.

[tool.konform.lint]
select = []        # [] = all rules; prefix match: "KIS" = all KIS* rules
ignore = []
level  = "error"   # "warning" | "error"

# ── KIS001 — import style ──────────────────────────────────────────────────
[tool.konform.lint.module-only-imports]
exceptions = [
    "__future__", "typing", "typing_extensions", "collections.abc",
    "mycompany.compat",
]
level = "error"
unresolved-level = "warning"   # "warning" (default) | "error" | "off"
                                # Used when a package isn't installed in this
                                # environment, so KIS001 can't tell whether the
                                # imported name is a module or not.

# ── KIS002 — unnecessary import alias ──────────────────────────────────────
[tool.konform.lint.unnecessary-import-alias]
level = "warning"

# ── KPT001 — user-defined patterns ─────────────────────────────────────────
[tool.konform.lint.user-defined-patterns]
level = "warning"
# Optional: load patterns from an external file instead of inline rules.
# rules_file = "konform_patterns.toml"

[[tool.konform.lint.user-defined-patterns.rules]]
id      = "KPT001"
message = "Use the project logger instead of bare print()."
pattern = '^\s*print\s*\('
files   = ["src/**/*.py"]
level   = "warning"

# Sub-rules are attached to this rule entry. This inline form makes the
# parent/child relation explicit and avoids table-order confusion.
sub_rules = [
  {
    pattern = ['print\(.*password', 'print\(.*secret'],
    message = "Never print credentials.",
    help = "Use redaction helpers before logging.",
  },
]

Each rule's settings live in its own table, keyed by a stable config name (shown by konform rule --list) rather than by rule code — so renaming a rule code (with noqa-aliases covering old suppression comments) never forces you to also rewrite your config.

When using [[tool.konform.lint.user-defined-patterns.rules.sub_rules]], TOML binds each sub-rule to the most recently declared [[tool.konform.lint.user-defined-patterns.rules]] entry.

Pattern files

Patterns can also live in a standalone konform_patterns.toml placed next to pyproject.toml. konform auto-discovers it (no config key needed):

# konform_patterns.toml
[[rules]]
id      = "KPT002"
message = "Remove breakpoint() — debugging artefact."
pattern = '^\s*breakpoint\s*\(\s*\)'
level   = "error"

Module search roots

KIS001 needs to know whether an imported name is a real module (import os.path) or just an attribute of one (from os.path import join). It answers this by searching the filesystem, starting from your Python environment's sys.path plus a configurable set of extra roots -- this matters for local packages that aren't installed (e.g. a src/ layout, or code laid out some other way).

The extra roots are resolved the same way as Ruff's src setting, including its precedence:

  1. [tool.konform] src = [...], if set.
  2. Otherwise, [tool.ruff] src = [...], if your project already configures Ruff for a non-standard layout.
  3. Otherwise, the default [".", "src"] (covers both flat and src layouts out of the box).

Each entry is resolved relative to the directory containing pyproject.toml / konform.toml. For example, if your package lives under lib/:

[tool.konform]
src = ["lib"]

Suppressing violations

from os.path import join   # noqa: KIS001   ← exact rule
from os.path import join   # noqa: KIS       ← whole category
from os.path import join   # noqa             ← everything on this line

Aliasing noqa codes

When a rule code changes (e.g. a rule is renamed, or a project migrates from another linter's codes), old # noqa comments would otherwise stop working. Define aliases in your config so they keep suppressing the renamed/canonical rule:

# pyproject.toml
[tool.konform.lint.noqa-aliases]
IS001 = "KIS001"
IS    = "KIS"
from os.path import join   # noqa: IS001   ← suppresses KIS001 via alias

Upgrading from an older config format

When konform's config shape changes (as it did in 0.3.0, moving rule selection/settings under [tool.konform.lint]), it auto-migrates an outdated pyproject.toml / konform.toml the first time you run any konform command: the file is rewritten in place (comments and other [tool.*] sections are preserved) and a summary of what changed is printed to stderr. No action is needed beyond re-running konform once.

Language Server (LSP)

konform ships a built-in LSP server that shares the same rule engine as the CLI — no second process, no stale results.

konform server   # starts the LSP over stdin/stdout

Code actions mirror the CLI's fix-safety split: a per-violation quickfix is offered for every fixable diagnostic (including unsafe ones, e.g. KIS002 — editing a single open document is an explicit, reviewable action), plus two document-wide "fix all" actions: Fix all auto-fixable problems (safe fixes only, source.fixAll.konform) and Fix all problems (including unsafe fixes) (source.fixAll.konform.unsafe), the latter only offered when it would change something beyond the safe-only pass.

Neovim (nvim-lspconfig)

vim.api.nvim_create_autocmd("FileType", {
  pattern = "python",
  callback = function()
    vim.lsp.start({
      name = "konform",
      cmd  = { "konform", "server" },
      root_dir = vim.fs.dirname(
        vim.fs.find({ "pyproject.toml", "konform.toml" }, { upward = true })[1]
      ),
    })
  end,
})

VS Code (settings.json)

Add via the generic None ls or any client that supports a custom LSP command:

{
  "nls.server": {
    "command": ["konform", "server"]
  }
}

Zed

Install the zed-konform extension (see extensions/zed-extension/README.md) and Zed will auto-install the konform binary for you — no manual setup required. To override the binary path or pass extra arguments, set:

{
  "lsp": {
    "konform": {
      "binary": {
        "path": "konform",
        "arguments": ["server"]
      }
    }
  }
}

Development

# Compile the Rust binary and install it in the dev venv (required before tests)
hatch run develop

# Run tests with coverage
hatch test -c

# Build release wheels for all platforms
hatch run maturin:build-all

CLI reference

konform check  [OPTIONS] <PATHS>…    Lint files (default subcommand)
konform check --fix-only [OPTIONS] <PATHS>…  Apply all auto-fixes in-place, exit 0
konform server                       Start the LSP server (stdin/stdout)
konform rule   --list                List all rules
konform rule   --explain <CODE>      Show full rule documentation
konform clean  [--config PATH]       Delete the cache directory
konform version                      Print konform's version

Global options (available on all subcommands):
  --color auto|always|never          Colour output control
  --isolated                         Ignore all config files
  -v / --verbose                     Extra output
  -q / --quiet                       Violations only (no summary/hints)
  -s / --silent                      No output; exit code only

Acknowledgements

konform exists because Ruff doesn't (yet) cover rules like KIS001/KIS002 — konform was built to fill that gap, and Ruff's design was a direct inspiration for how konform is configured, how it reports violations, and how it resolves src search roots.

konform is also built on top of several excellent open-source projects, especially:

Thanks to all the maintainers of all used open-source projects.

Metadata

Release files for konform 0.4.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 konform 0.4.0
File Size Uploaded Provenance Actions
konform-0.4.0.tar.gz 154.9 kB With provenance Details for konform-0.4.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for konform 0.4.0
File Actions
konform-0.4.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details for konform-0.4.0-py3-none-win_amd64.whl
konform-0.4.0-py3-none-win32.whl Python 3 none Windows x86-32 Details for konform-0.4.0-py3-none-win32.whl
konform-0.4.0-py3-none-musllinux_1_2_x86_64.whl Python 3 none Linux musl 1.2+ x86-64 Details for konform-0.4.0-py3-none-musllinux_1_2_x86_64.whl
konform-0.4.0-py3-none-musllinux_1_2_aarch64.whl Python 3 none Linux musl 1.2+ ARM64 Details for konform-0.4.0-py3-none-musllinux_1_2_aarch64.whl
konform-0.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details for konform-0.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
konform-0.4.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl Python 3 none Linux glibc 2.17+ x86-32 Details for konform-0.4.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
konform-0.4.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl Python 3 none Linux glibc 2.17+ ARMv7l Details for konform-0.4.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
konform-0.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details for konform-0.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
konform-0.4.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details for konform-0.4.0-py3-none-macosx_11_0_arm64.whl
konform-0.4.0-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details for konform-0.4.0-py3-none-macosx_10_12_x86_64.whl

Total release size: 30.9 MB

Release files / konform-0.4.0.tar.gz

Download URL konform-0.4.0.tar.gz
Size 154.9 kB
Tags Source
SHA-256 checksum
How to use checksums
6b7983cce9d96d145c3385122ba6f7e392e9e541541e4851b78770d11918f624
BLAKE2b-256 checksum
How to use checksums
fe9f5d724667fc5d3a3fd93381153a796109cf476662ac39b4eadc9d22eee557
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / konform-0.4.0-py3-none-win_amd64.whl

Download URL konform-0.4.0-py3-none-win_amd64.whl
Size 3.1 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
9639531757173780b04c7fd46687d127a480f2206b6a9d3730ea9e31db316762
BLAKE2b-256 checksum
How to use checksums
ec0c01c80f6f753c8ff84e7f4d0e5f1c87c01356755ca054621f6af0f3263b06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / konform-0.4.0-py3-none-win32.whl

Download URL konform-0.4.0-py3-none-win32.whl
Size 2.9 MB
Tags Python 3 Windows x86-32
SHA-256 checksum
How to use checksums
b91ee2693a4896d4c2171ba4e009503247f8b230afe5666d1cd6f17c0b30ee78
BLAKE2b-256 checksum
How to use checksums
089eb4e1e5cf9d1c1d176d8621a16ec2370e5e5d36e8a55f93b81c88ea7ad5a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / konform-0.4.0-py3-none-musllinux_1_2_x86_64.whl

Download URL konform-0.4.0-py3-none-musllinux_1_2_x86_64.whl
Size 3.3 MB
Tags Linux musl 1.2+ x86-64 Python 3
SHA-256 checksum
How to use checksums
139fb2ba6b75b4f9c9738187990e126058817647b0be38f5652e646e6be05c15
BLAKE2b-256 checksum
How to use checksums
77aefd27a3c8c2604a31cfdb07c0cc92a572d560df8a24b99ce2e3297c6785b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / konform-0.4.0-py3-none-musllinux_1_2_aarch64.whl

Download URL konform-0.4.0-py3-none-musllinux_1_2_aarch64.whl
Size 3.0 MB
Tags Linux musl 1.2+ ARM64 Python 3
SHA-256 checksum
How to use checksums
f07144e0b1e377744a797fb13ea53e3660ac85216907430a8f45e604c44c2ece
BLAKE2b-256 checksum
How to use checksums
c2d190a70125b1afb64090e94725eb4808e6f292f2083d8881299b1ea11e685c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / konform-0.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL konform-0.4.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 3.2 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
cc3fae47c955ceefd2f28a59d7b6dc6cafcdc0c31d9121ffb31bb430916f1e73
BLAKE2b-256 checksum
How to use checksums
64f0c317b5d18566a86b8714d357084616d64c630280a123eb8376b53d69c58e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / konform-0.4.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL konform-0.4.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl
Size 3.4 MB
Tags Linux glibc 2.17+ x86-32 Python 3
SHA-256 checksum
How to use checksums
54b1b182f710565999129bee44273ce4d2dd0b001db0711a6d43c74d7cdbf38d
BLAKE2b-256 checksum
How to use checksums
2c9f2599f42acc7ba4a582bcf8b1f1c6a27e1cf2858c6af43bc7be41aa556ab4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / konform-0.4.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL konform-0.4.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 2.9 MB
Tags Linux glibc 2.17+ ARMv7l Python 3
SHA-256 checksum
How to use checksums
c89b70ada3ccdf5f9a47c84885097a8fd7ed6baf3c3ecf707ca5f1737bc0f0fc
BLAKE2b-256 checksum
How to use checksums
056b156ba420a871dbc0bce02fb662ee65b48f5b9368b4c70d22ba08516e9f0a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / konform-0.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL konform-0.4.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 3.0 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
b6f91d457c9a94071c29144b23a99b517e0fd44a65eaa9005654eba5f7280dad
BLAKE2b-256 checksum
How to use checksums
27eb82e62914720fa92c96aa9657392434adc99c12335b64599e824935857eb0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / konform-0.4.0-py3-none-macosx_11_0_arm64.whl

Download URL konform-0.4.0-py3-none-macosx_11_0_arm64.whl
Size 2.9 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3eb8e41bb098e4330758e289ab61035920a8e4e9511a1a8b9538f12798291d15
BLAKE2b-256 checksum
How to use checksums
68795e812006d21345afc7d297f896d39eee566c795b4016a865026e13b60207
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / konform-0.4.0-py3-none-macosx_10_12_x86_64.whl

Download URL konform-0.4.0-py3-none-macosx_10_12_x86_64.whl
Size 3.0 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
6b8cfe78d6b6a6df5f789769d0f831d77a1e1949188d1115f28d1b87c838c7a8
BLAKE2b-256 checksum
How to use checksums
ef2ee5ce17434305d6461dbd6962795b3221b1dff06c422f0b517a8968e02cfc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Security for konform 0.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 11 files in this release have been uploaded with provenance metadata.

Select from 11 files

Attestation for konform-0.4.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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