Skip to main content

A Polars plugin for fast lexical text embeddings

Project description

Polars Luxical

A high-performance Polars plugin for Luxical text embeddings, implemented in Rust.

Overview

This plugin provides Luxical embeddings directly within Polars expressions. Luxical combines:

  • Subword tokenization (BERT uncased)
  • N-gram feature extraction with TF-IDF weighting
  • Sparse-to-dense neural network projection via knowledge distillation

Luxical models achieve dramatically higher throughput than transformer-based embedding models while maintaining competitive quality for document-level similarity tasks like clustering, classification, and semantic deduplication.

It should be noted that they were not trained on queries, so you cannot use them for search! A demonstration of this is given in the benchmarks, where the results are fast but not useful.

Installation

pip install polars-luxical

Or build from source:

maturin develop --release

Model Download

Models are automatically downloaded from HuggingFace Hub and cached locally on first use.

Cache locations:

  • Linux: ~/.cache/polars-luxical/
  • macOS: ~/Library/Caches/polars-luxical/
  • Windows: C:\Users\<User>\AppData\Local\polars-luxical\

To use a local model file instead:

register_model("/path/to/your/model")

Both .safetensors and .npz formats are supported.

Usage

import polars as pl
from polars_luxical import register_model, embed_text

# Register a Luxical model (downloads and caches automatically)
register_model("DatologyAI/luxical-one")

# Create a DataFrame
df = pl.DataFrame({
    "id": [1, 2, 3],
    "text": [
        "Hello world",
        "Machine learning is fascinating",
        "Polars and Rust are fast",
    ],
})

# Embed text
df_emb = df.with_columns(
    embed_text("text", model_id="DatologyAI/luxical-one").alias("embedding")
)
print(df_emb)

# Or use the namespace API
df_emb = df.luxical.embed(
    columns="text",
    model_name="DatologyAI/luxical-one",
    output_column="embedding",
)

# Retrieve similar documents
results = df_emb.luxical.retrieve(
    query="Tell me about speed",
    model_name="DatologyAI/luxical-one",
    embedding_column="embedding",
    k=3,
)
print(results)

Similar Document (Half) Retrieval

Since text chunks from the same document are generally semantically much more similar to one another than they are to other random text chunks... we expect a well-trained embedding model to embed the majority of document halves within the top 1% or so of nearest vectors to their match’s embedding vector.

The example given by Datology is matching document halves, which you can see we get over 97% on:

  • Running doc_half_match_demo.py from the benchmark subdir:
Loaded 708 PEPs
Loading model from cache (safetensors): "/home/louis/.cache/polars-luxical/model.safetensors"
Embedded all document halves.

Half-document retrieval results on 708 PEPs:
Top-1: 690 (97.46%)
Top-5: 707 (99.86%)
Top-1%: 707 (99.86%)
Mean rank of correct half: 1.05

Cases where the correct second half was NOT ranked 1:
shape: (18, 6)
┌──────┬─────────────────────────────────┬─────────────────────────────────┬─────────────────────────────────┬───────────────────┬──────┐
│ pep  ┆ first_half                      ┆ true_second_half                ┆ top_retrieved_second_half       ┆ top_retrieved_pep ┆ rank │
│ ---  ┆ ---                             ┆ ---                             ┆ ---                             ┆ ---               ┆ ---  │
│ i64  ┆ str                             ┆ str                             ┆ str                             ┆ i64               ┆ i64  │
╞══════╪═════════════════════════════════╪═════════════════════════════════╪═════════════════════════════════╪═══════════════════╪══════╡
│ 222  ┆ PEP: 222 Title: Web Library En… ┆ to be standard at all, and the… ┆ code that is not up to the new… ┆ 3001              ┆ 5    │
│ 241  ┆ PEP: 241 Title: Metadata for P… ┆ (optional) -------------------… ┆ must be "../package-0.45.tgz".… ┆ 314               ┆ 2    │
│ 336  ┆ PEP: 336 Title: Make None Call… ┆ semantics would be effectively… ┆ ``in`` keyword was chosen as a… ┆ 403               ┆ 2    │
│ 361  ┆ PEP: 361 Title: Python 2.6 and… ┆ site-packages directory - :pep… ┆ 2020, but the final release oc… ┆ 373               ┆ 2    │
│ 398  ┆ PEP: 398 Title: Python 3.3 Rel… ┆ maintenance release before 3.3… ┆ new features beyond this point… ┆ 392               ┆ 2    │
│ …    ┆ …                               ┆ …                               ┆ …                               ┆ …                 ┆ …    │
│ 3104 ┆ PEP: 3104 Title: Access to Nam… ┆ This proposal yields a simple … ┆ fact(n): ... if n == 1: ... re… ┆ 227               ┆ 2    │
│ 3134 ┆ PEP: 3134 Title: Exception Cha… ┆ open') from exc If the call to… ┆ __init__(self, filename): try:… ┆ 344               ┆ 2    │
│ 8102 ┆ PEP: 8102 Title: 2021 Term Ste… ┆ Roll`_ may participate. Ballot… ┆ not open to the public, only t… ┆ 8103              ┆ 3    │
│ 8106 ┆ PEP: 8106 Title: 2025 Term Ste… ┆ and ``- (approval)`` answers. … ┆ only those on the `Voter Roll`… ┆ 8105              ┆ 3    │
│ 8107 ┆ PEP: 8107 Title: 2026 Term Ste… ┆ Enter voter data using Email l… ┆ only those on the `Voter Roll`… ┆ 8105              ┆ 2    │
└──────┴─────────────────────────────────┴─────────────────────────────────┴─────────────────────────────────┴───────────────────┴──────┘

Available Models

Model ID Description Embedding Dim
DatologyAI/luxical-one English web documents, distilled from snowflake-arctic-embed-m-v2.0 192

Performance

Luxical embeddings avoid transformer inference entirely, achieving throughput up to ~100x faster than large transformer embedding models (e.g., Qwen3-0.6B) and significantly faster than smaller models like MiniLM-L6-v2, particularly on CPU.

For benchmarks and methodology, see the Luxical technical report.

API Reference

Functions

register_model(model_name: str, providers: list[str] | None = None) -> None

Register/load a Luxical model into the global registry. If already loaded, this is a no-op.

  • model_name: HuggingFace model ID (e.g., "DatologyAI/luxical-one") or local path.
  • providers: Ignored (kept for API compatibility).

embed_text(expr, *, model_id: str | None = None) -> pl.Expr

Embed text using a Luxical model.

  • expr: Column expression containing text to embed.
  • model_id: Model name/ID. If None, uses the default model.

clear_registry() -> None

Clear all loaded models from the registry (frees memory).

list_models() -> list[str]

Return a list of currently loaded model names.

DataFrame Namespace

df.luxical.embed(columns, model_name, output_column="embedding", join_columns=True)

Embed text from specified columns.

df.luxical.retrieve(query, model_name, embedding_column="embedding", k=None, threshold=None, similarity_metric="cosine", add_similarity_column=True)

Retrieve rows most similar to a query.

See also

  • polars-fastembed - a similar package with more embedding models, including ones suitable for search retrieval with a query

License

Apache 2.0

Project details


Download files

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

Source Distribution

polars_luxical-0.1.2.tar.gz (8.9 MB view details)

Uploaded Source

Built Distributions

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

polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (5.9 MB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_i686.whl (5.7 MB view details)

Uploaded PyPymusllinux: musl 1.2+ i686

polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl (5.5 MB view details)

Uploaded PyPymusllinux: musl 1.2+ ARMv7l

polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl (5.3 MB view details)

Uploaded PyPymusllinux: musl 1.2+ ARM64

polars_luxical-0.1.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.6 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

polars_luxical-0.1.2-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (5.7 MB view details)

Uploaded PyPymanylinux: glibc 2.12+ i686

polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_i686.whl (5.7 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ i686

polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_armv7l.whl (5.5 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARMv7l

polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl (5.3 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

polars_luxical-0.1.2-cp38-abi3-win_amd64.whl (5.1 MB view details)

Uploaded CPython 3.8+Windows x86-64

polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_x86_64.whl (5.9 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ x86-64

polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_i686.whl (5.7 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ i686

polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_armv7l.whl (5.5 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ ARMv7l

polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_aarch64.whl (5.3 MB view details)

Uploaded CPython 3.8+musllinux: musl 1.2+ ARM64

polars_luxical-0.1.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.6 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ x86-64

polars_luxical-0.1.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (6.0 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ppc64le

polars_luxical-0.1.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (5.3 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.17+ ARMv7l

polars_luxical-0.1.2-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl (5.7 MB view details)

Uploaded CPython 3.8+manylinux: glibc 2.12+ i686

polars_luxical-0.1.2-cp38-abi3-macosx_11_0_arm64.whl (4.6 MB view details)

Uploaded CPython 3.8+macOS 11.0+ ARM64

polars_luxical-0.1.2-cp38-abi3-macosx_10_12_x86_64.whl (5.2 MB view details)

Uploaded CPython 3.8+macOS 10.12+ x86-64

File details

Details for the file polars_luxical-0.1.2.tar.gz.

File metadata

  • Download URL: polars_luxical-0.1.2.tar.gz
  • Upload date:
  • Size: 8.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.10.2

File hashes

Hashes for polars_luxical-0.1.2.tar.gz
Algorithm Hash digest
SHA256 2fd25111b1160b25c15061841c324811ba0682bd5d79c645ac174d5824620eac
MD5 314de0047d82185be2ef8a5e36c3dad8
BLAKE2b-256 119d8f5a9ef5cabb1b06247a4af60065c1f74989fa5b2347a7ad117481a3e901

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 92347fd76f65fb89d4302fd33efcc396bbe1f9f3b73425a826e8c0c40ad1b6ab
MD5 549cbda47a7e2bbb36bbb5e1c4934e23
BLAKE2b-256 40658cb865c1f439ecb329fd54f6b9f18c125de11fd1337b0e1a5d86db755f86

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 de46827fced2b63fd1a787f4f4c5ae4bf9d8ab7e5b2926e23d9252641c359c8f
MD5 77c143e5b08f6ba2a9a2e20b2c5d79bf
BLAKE2b-256 74e4e9f858f4f0acbd3b0c20545a86e5fdec4b5839061e8e51ce6c374c6c774d

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 1fe2013d8318da92266914ee6813ad7906a080c3ca35cb83887371fdf85fa7d9
MD5 bc8f09aeca9df2b46bfc10d44f1d5dd7
BLAKE2b-256 d84e1d98f84d66ef4261f1f664ffe801b03bafc5a71e04568979b8eccecaf34c

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 03d18ed1f7d4c6f652d843441917deaf4f32d5245a598897667227c2b51f772c
MD5 c588633f67052c17d76c3a4173196d0d
BLAKE2b-256 f973de08e85c95d728fd0779d84512a561c1503f3cc0de2e92cf79c64ea492eb

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3509574c6418867ff0ff769d2f9a0330e6f0f9b1cd6523d29249e458a368a0a8
MD5 8d85c9acb267e3aed375667fd75fb9d3
BLAKE2b-256 5fb9ebc8168ed4fc4bd9c597c0c4f145f8fc350f7c84d5967b16dd26f84ecf7b

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-pp311-pypy311_pp73-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 9264a48434522920991e66d1ade90aca8b9f55ba037718341f33be7c32274214
MD5 8d19e552822a04e2a3e5f6f0d9ecad7c
BLAKE2b-256 a4dfe16fef301ee7de0ac246cfd33010bc65862b28d08c86e044615fb6c4b185

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1ab1c9f7b9c8cd8f8197bd9ba1808a86156f4fd4000be8bc06f729cb3792a3ff
MD5 a8095f9909e6fcc1ed8560b0477f42a9
BLAKE2b-256 558c84b34076df38f2a982a58f553e16b7f2736231beeb668db9098b28623a29

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 0e6ecdc5a11dd4b427f1812a324a359c2127b7358447d6b612f021b929c6cfcf
MD5 a62598b42e1353bac6bb191a9957b785
BLAKE2b-256 30619f054af9648ef842e3f202623b4479857a3f9d5fb6179ba0e64423963b9d

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 25135bf46e8d59d6bb8ff6316ecc2b525bbeefdd281923018ddf5a9b25c0efd1
MD5 cd46a692a4b4839e010e91a2979796dc
BLAKE2b-256 4f6b2994b266394ce1a140af13ed8264deb8bce906e68dade67b68526492a61c

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d19e0fee5d4c0b5d76747428e0575e4651df218eec87fc95ea83401f1593dc1c
MD5 f4f04bf2daeab6ffa0b289e769dc1835
BLAKE2b-256 e68df144a41a8802c6c326165456afbb7f5c62fe8cbd662e2452ebbc902a479f

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp38-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 1294a3931049677ecbae417bcb2948600d5388c3023ecfcdbbcb6ab71b615d51
MD5 725a509322ba649e29cb7f8af6674f47
BLAKE2b-256 95b4d9186cafc50144227581f85d437ccc782393f8e6c58eeb4bc3310ffeb5d9

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f83259c3c9a7cd5243c68e924e7c0943f921877cb415d3d022adadf28c2d76be
MD5 328af3c350557cec45339509c9a48195
BLAKE2b-256 2def0f9327d018ca36211093fc9082c0fed9c0c6ab644d27fde0f7e1a9426ef6

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 bc110907d356a73c4ead252c4b122b866259bcdbc47595d149cad45f0e104c21
MD5 2935baa846fd85ff015cfa749923145f
BLAKE2b-256 c6598631e06a095042446c1b37a8bf9344a336c92069895aca93bcea48510cc8

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 a54324a2a3a02ea6346285f7f25e0452c7121d419ebbdc2dbd42320803fb7a87
MD5 4d4f0b72da5aafdafdfab381407bdfe6
BLAKE2b-256 a2c68e533aaa18ed4a1b57b5967a6516cb569f018607d03061643f1cc6bb4a56

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp38-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 2d5a366382799323a050e6d878374b85b0e63cd18576aff1e5dbc97ee0c9293f
MD5 3869b3fff175b4d0d21182da819a7165
BLAKE2b-256 de414665c4a24be202621d202cbb7d7e22e59d53fb8a735def77a757ed9242c9

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b87278eccffb82ca3aa125a998fea3ac630faf7d1982afe66b0e6c02a7c01bfe
MD5 ca027adef40758554871159396d2eade
BLAKE2b-256 080740c81cd29ac9be7eb806837a45a7c4cebe3fa3395d4f2754f018677f59f1

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 f155b9fdd500f8884fdb0971b13fc9b95e9bb456bd3ac9ecaf4fa1bb0bbcb87d
MD5 dfd4aa4663164ef91d79046328f2ccef
BLAKE2b-256 917acb76040d6fd67698a09e7579223f7814f633be78f376cf7230175f1f359b

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 8772dc563bc88247c223294125611609a1ec69ff097a407503ea427f5b3c3cd2
MD5 ae041e8717ae0b8fc00a7988d9b42f85
BLAKE2b-256 59d5ca88fa9654a7106cec3d4905b7e1ec76a977031113703e76cf7aad0bf136

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp38-abi3-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm Hash digest
SHA256 2a91a7ce4f73ad4d5b803c242aac1e1bc04a8297f817548df1b4ca8f428c30e8
MD5 df039eb5903d0adffc81f871e461f9af
BLAKE2b-256 72b672f506a736b94af49a63aec1ab6d346d98b1355cd80851032038a58c1268

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 49e3132aafdf49be970dd16b34e5e39714868f1a6c4ad3160986144d2eaa3834
MD5 b76018f34ebb577ff38c1cb9759542d1
BLAKE2b-256 86550836022c425e36e6ec090cf642bcbf056f1d3924887747eef472413ea25e

See more details on using hashes here.

File details

Details for the file polars_luxical-0.1.2-cp38-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for polars_luxical-0.1.2-cp38-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0aea123b4ad2ad5de7da8245723b0bdb228b2770ec05e80f3624d7c48fcf9f48
MD5 254d2a16f9516af99ae2e6a101c0ee27
BLAKE2b-256 32af64ed2328f9b75c40efd1880fd23c12f62f341104105b0783069add565458

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