Skip to main content

Python async client for Redis key-value store

Project description

coredis

docs codecov Latest Version in PyPI ci Supported Python versions


coredis is an async redis client with support for redis server, cluster & sentinel.

  • The client API uses the specifications in the Redis command documentation to define the API by using the following conventions:

    • Arguments retain naming from redis as much as possible
    • Only optional variadic arguments are mapped to variadic positional or keyword arguments. When the variable length arguments are not optional (which is almost always the case) the expected argument is an iterable of type Parameters or Mapping.
    • Pure tokens used as flags are mapped to boolean arguments
    • One of arguments accepting pure tokens are collapsed and accept a PureToken
  • Responses are mapped as closely from RESP <-> python types as possible.

  • For higher level concepts such as Pipelines, LUA Scripts, PubSub & Streams abstractions are provided to simplify interaction requires pre-defined sequencing of redis commands (see Command Wrappers) and the Handbook.

Warning The command API does NOT mirror the official python redis client. For details about the high level differences refer to Divergence from aredis & redis-py


Installation

To install coredis:

$ pip install coredis

Feature Summary

Deployment topologies

Application patterns

Server side scripting

Redis Modules

Miscellaneous

Quick start

Single Node or Cluster client

import asyncio
from coredis import Redis, RedisCluster

async def example():
    client = Redis(host='127.0.0.1', port=6379, db=0)
    # or with redis cluster
    # client = RedisCluster(startup_nodes=[{"host": "127.0.01", "port": 7001}])
    await client.flushdb()
    await client.set('foo', 1)
    assert await client.exists(['foo']) == 1
    assert await client.incr('foo') == 2
    assert await client.incrby('foo', increment=100) == 102
    assert int(await client.get('foo')) == 102

    assert await client.expire('foo', 1)
    await asyncio.sleep(0.1)
    assert await client.ttl('foo') == 1
    assert await client.pttl('foo') < 1000
    await asyncio.sleep(1)
    assert not await client.exists(['foo'])

asyncio.run(example())

Sentinel

import asyncio
from coredis.sentinel import Sentinel

async def example():
    sentinel = Sentinel(sentinels=[("localhost", 26379)])
    primary = sentinel.primary_for("myservice")
    replica = sentinel.replica_for("myservice")

    assert await primary.set("fubar", 1)
    assert int(await replica.get("fubar")) == 1

asyncio.run(example())

To see a full list of supported redis commands refer to the Command compatibility documentation

Compatibility

coredis is tested against redis versions 6.0.x, 6.2.x, 7.0.x & 7.2-rc1. The test matrix status can be reviewed here

coredis is additionally tested against:

  • uvloop >= 0.15.0

Supported python versions

  • 3.7
  • 3.8
  • 3.9
  • 3.10
  • 3.11
  • PyPy 3.7
  • PyPy 3.8
  • PyPy 3.9

Redis-like backends

coredis is known to work with the following databases that have redis protocol compatibility:

References

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

coredis-4.12.0rc1.tar.gz (239.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

coredis-4.12.0rc1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (353.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

coredis-4.12.0rc1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (350.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

coredis-4.12.0rc1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (356.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

coredis-4.12.0rc1-cp311-cp311-macosx_11_0_arm64.whl (327.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

coredis-4.12.0rc1-cp311-cp311-macosx_10_9_x86_64.whl (329.7 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

coredis-4.12.0rc1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (355.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

coredis-4.12.0rc1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (352.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

coredis-4.12.0rc1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (359.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

coredis-4.12.0rc1-cp310-cp310-macosx_11_0_arm64.whl (329.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

coredis-4.12.0rc1-cp310-cp310-macosx_10_9_x86_64.whl (331.3 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

coredis-4.12.0rc1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (355.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

coredis-4.12.0rc1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (351.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

coredis-4.12.0rc1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (359.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

coredis-4.12.0rc1-cp39-cp39-macosx_11_0_arm64.whl (329.0 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

coredis-4.12.0rc1-cp39-cp39-macosx_10_9_x86_64.whl (331.3 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

coredis-4.12.0rc1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (354.7 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

coredis-4.12.0rc1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (351.5 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

coredis-4.12.0rc1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (358.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

coredis-4.12.0rc1-cp38-cp38-macosx_11_0_arm64.whl (327.5 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

coredis-4.12.0rc1-cp38-cp38-macosx_10_9_x86_64.whl (329.8 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

coredis-4.12.0rc1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (347.2 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

coredis-4.12.0rc1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (344.9 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

coredis-4.12.0rc1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (351.1 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ i686manylinux: glibc 2.5+ i686

coredis-4.12.0rc1-cp37-cp37m-macosx_10_9_x86_64.whl (325.8 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

File details

Details for the file coredis-4.12.0rc1.tar.gz.

File metadata

  • Download URL: coredis-4.12.0rc1.tar.gz
  • Upload date:
  • Size: 239.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for coredis-4.12.0rc1.tar.gz
Algorithm Hash digest
SHA256 f681f7f82bbd50da7bf0866b95f01846f176e68fdf78f538f84777b30e51fb32
MD5 2c17194418799443ab0acaae62279e1c
BLAKE2b-256 baf703a53412b165d6c57864f6475d1886cbd3a76cd51b8eb3bcb65056cfd8fe

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 33ff61b7ad6bbb6a56a52ebf6df6cda566c832a447108847475d6df786b900b0
MD5 e1570b67568c45c0d58c77923b004d8b
BLAKE2b-256 72e125ad42a09954d4caeef0c4f1f98a69d46a5ce7706478a759d4915c897872

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a56619855fe5d82fb8d6f7ea0c1196ed445e47beeac134ee8911a941c2b12af9
MD5 8a04fb380d6682840decad7ba98031df
BLAKE2b-256 bdc0b1a17d30feb67cff6ec8ce406647880cbb16549926de9c8369b4ece88b7b

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 98733c70583a28cf6c631c1734997b07960d13104e137599933f477be71e26f9
MD5 a7afed098a7efabe7858cce84852f6e6
BLAKE2b-256 a66f9818f5015ed6c115cf7b2c793a5425182eceed6ee2c07799004769409611

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 858ab8bb59aaa94cf7adc9431456a5f6418e3cb7b6eb097063835da304c8b271
MD5 789c8784de40352ae7ffd68ef3b3f765
BLAKE2b-256 4d1e627d8c0c04cddde9fdf93b36413446d0c10cb9bf05004a57969421d2007c

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0530bff211bdcc3d73c63bc55d06083049fd44a410bb8cef44b925d61aaf5d79
MD5 4c040c59f4201ce9eb6861571cdef1e2
BLAKE2b-256 26b1739dcb4f480eca49e872a0795f069c6c90639f1dacaca0e21c0878368279

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eb91bca4a6f88e7841d3f157801be218bb81363fc9739ac5eec7186f757fb332
MD5 cfcbc5112de897025acc7ec604dfb4f2
BLAKE2b-256 55dec964031c3cd37b3fefb02b137c41e736a586d5c153e40a96ba29fdd17742

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 19fc2a2aca9c03673e25ec67860528e0ad7a46dd4e2983357387501db8f5398b
MD5 af116d3618d8d81fcd8a574cd4715694
BLAKE2b-256 fb3b497e3d104b843b32d735f186c3a8cb59e96a427752e3be169f0efbf9de94

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 ab34c3917de88a8542a0e2f8ace6c72ee60af09f7c2d3c46a4da01a9a7d60770
MD5 597245129187fc5f9dd27b7ede7399d2
BLAKE2b-256 351f4e3fce0eef40d2dcc45f0f68b872541eeca867af4085708bfbb9b826262e

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eeaf083844cb585432c2d96ff50438eac02133068bacfb3cb934b735a025a1bc
MD5 f8e0d5fa5d3bf71722b3a17d927a64e9
BLAKE2b-256 aa642673e2b849d9a21ffaf4905c57033ff1713801e4661ab98009f877394acc

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d541352d15867fb02c277de15ee13c539b6bdaa37a8434c792b31bbd99fd0d50
MD5 36cf858a75978a4461313e2b430cb54a
BLAKE2b-256 cd5aceeed40c3f49e800914eb0e1b134449da6ecd88058afcd0c2eff6942806f

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7c966a8c4171e1ed5beb2e1e36ba3491e3eb97c39f546c08811f48c9fd885fe3
MD5 89ca6f664030a63d82d14157e755dadd
BLAKE2b-256 ba7cb91f3b982ebb0efd255f61772b940257a78453c09748a9d7cfbfe5a7273a

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 13db4cdaa1250e657f29e633f8ffe32fd002a0d8cd7ece5c3e74796732c02e3d
MD5 99e068bd7e111752a94e4e731c862d9d
BLAKE2b-256 ef2d8ed5f3524f0ca900871b3739955e3f08f993873c4eba0ad6221ee9bc38a3

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 afbcc4e94aa1cd0ffdc1a8d73b28e0604cab533e27b6f57fd84a2d7342df1871
MD5 d8afded286445b27f035f2bca8d021d6
BLAKE2b-256 5a9ef55c32a87723473cbf439fe569438608644cda687a12622b606e728004ed

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 21f79ad56f52f74a8d13a97be58e6410aceba2b7b3cbcc5c359b9cd6e9617ecd
MD5 b0e74c3df77639e297af09178c372302
BLAKE2b-256 eff7ef8e62754dcce135bebb0d0a1d8d1f2b171580db21cc9df6cae5fb14f650

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3755ffbf5734660af7930ac72ddbfbf2dd3683f45cd4c55fa7095001a87a08fd
MD5 f386c252863438ae51e7a90f644619db
BLAKE2b-256 3c2ba9d44083d912d94cce7fa689a95d7bcd73dd6c38d6b6bea9a21b9105143f

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a0ab746cffd62c1ab43786f705bdef73e955fd9fb2f723808e17755feb6e3cb7
MD5 01fa4b69eb6871319b70f7a2525f92be
BLAKE2b-256 6afe3969b869238c164a4937107aa762be912d4d3a840f69e9aa2ef6801fc662

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dc4c1cadd9db20b288de6f9e48176a45ad8b0798dd9d6350f235f4f792e96b7c
MD5 f96c42f96ea5a088bde60f7c331feea7
BLAKE2b-256 6a42c0b282324e56d778dc55fc3baffb3c651eba336ef49bfa6899f291dccfa2

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5d34d0cda4a816d170b795884d9ae4794ff72bc957be09931931be721fa557b4
MD5 cc545d1c55034b369b456e2c607ed1bb
BLAKE2b-256 e161a13f45fc06d5fbd30e3e44c42528af3f36e87fa348aa472ff802f884f551

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 51390f890da5ae86c29bdfef9ca2ae82e714f361c08545e2c441595236e776b9
MD5 1e79b2ba3f81f3a3391c065dc0e29b95
BLAKE2b-256 7c4bd3e01f5dbd6198aa6d742f3516c136c2f863b48303bf16d11680247aa79c

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d8d4a158d8e1fe00f479bd054d4827450e08aa38884c24b22f1730a248e2ac4a
MD5 22467e52f763ac8cdf891e76fd2f499c
BLAKE2b-256 46ae454eb96154855a8dd6beb66074b0c8c0a2d518cda8a72527e93080584722

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 905aeb79e0248899f9aa6f40529472e3803fde190df020cb8b80dfde32bab516
MD5 e110ba7e11e6407f31ee70430fccddca
BLAKE2b-256 965d9e24eafc83531b8b0c4290f1868f728f9a3e38f5cb4e67d61a18e10c7a42

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7a643dc27bb06fcfadb265a2948048cc1f57f241f3179eb477ac46477133931f
MD5 ae7895701a1037af299b4d199d3d75e3
BLAKE2b-256 81a37f18477e12eac539718320e4421c9fa39394a2bfe53c772f73bbbe8cbdda

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 09da9782917475aafeaf036d3bf5fc46ef7635f7776d7601c78a8a9425c78840
MD5 c23be5abeb505b6e4883d216b91e5f6e
BLAKE2b-256 f2d7049250f2ee702a77e0226ea9148740575bd56a7a29e6682ce014fc0b226a

See more details on using hashes here.

File details

Details for the file coredis-4.12.0rc1-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for coredis-4.12.0rc1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cc4f28c08a7b0f0e4a529425bf94f30935a68500a8ce46d71b175fef5ff1edd9
MD5 3810c99a57413b91f6c2bc48b8500eef
BLAKE2b-256 0ccbf9ef988f3773beb4f2dec150c63e759719002408acf859c6f0e9c6e3f739

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page