Skip to main content

Intelligent 3-way text merging with automated conflict resolution

Project description

reconcile-text: conflict-free 3-way text merging

A Rust, TypeScript, and Python library for merging conflicting text edits without manual intervention. Unlike traditional 3-way merge tools that produce conflict markers, reconcile-text automatically resolves conflicts by applying both sets of changes (while updating cursor positions) using an algorithm inspired by Operational Transformation.

Try it

Try the interactive demo to see it in action!

Install it in your project

Key features

  • No conflict markers - Clean, merged output without Git's <<<<<<< markers
  • Cursor tracking - Automatically repositions cursors and selections throughout the merging process
  • Flexible tokenisation - Word-level (default), character-level, line-level, or custom tokenisation strategies
  • Unicode support - Full UTF-8 support with proper handling of complex scripts and grapheme clusters
  • Cross-platform - Native Rust performance with WebAssembly bindings for JavaScript and native bindings for Python

Quick start

Rust

Install via crates.io:

cargo add reconcile-text

Alternatively, add reconcile-text to your Cargo.toml:

[dependencies]
reconcile-text = "0.8"

Then start merging:

use reconcile_text::{reconcile, BuiltinTokenizer};

// Start with the original text
let parent = "Hello world";
// Two users edit simultaneously
let left = "Hello beautiful world";  // Added "beautiful"
let right = "Hi world";              // Changed "Hello" to "Hi"

// Reconcile combines both changes
let result = reconcile(parent, &left.into(), &right.into(), &*BuiltinTokenizer::Word);
assert_eq!(result.apply().text(), "Hi beautiful world");

See the merge-file example for another example, or the library's documentation.

JavaScript/TypeScript

Install via NPM:

npm install reconcile-text

Then use it in your application:

import { reconcile } from 'reconcile-text';

// Start with the original text
const parent = 'Hello world';
// Two users edit simultaneously
const left = 'Hello beautiful world';
const right = 'Hi world';

const result = reconcile(parent, left, right);
console.log(result.text); // "Hi beautiful world"

See the example website source for a more complex example, or the advanced examples document.

Python

Install via uv or pip:

uv add reconcile-text
# or: pip install reconcile-text

Then use it in your application:

from reconcile_text import reconcile

# Start with the original text
parent = "Hello world"
# Two users edit simultaneously
left = "Hello beautiful world"
right = "Hi world"

result = reconcile(parent, left, right)
print(result["text"])  # "Hi beautiful world"

See the merge-file example for a file-merging CLI, or the advanced examples document for cursor tracking, change provenance, and compact diffs.

Motivation

Collaborative editing presents the challenge of merging conflicting changes when multiple users edit documents simultaneously or asynchronously whilst offline. Traditional solutions like Conflict-free Replicated Data Types (CRDTs) or Operational Transformation (OT) work well when you control the complete editing infrastructure and can capture every individual operation (1). However, many workflows involve users editing with various tools, for example, Obsidian users editing Markdown files with various editors ranging from Vim to VS Code.

This creates Differential Synchronisation scenarios (2, 3): we only know the final state of each document, not the sequence of operations that produced it. This is the same challenge Git addresses, but Git requires manual conflict resolution. The key insight is that while incorrect merges in source code can introduce bugs, human text is more forgiving: a slightly imperfect sentence is often preferable to conflict markers interrupting the flow.

Note: Some text domains require more careful handling. Legal contracts, for instance, could have unintended meaning changes from conflicting edits that create double negations. At the same time, semantic conflicts can still arise when merging code, even in the absence of syntactic conflicts.

Differential sync is implemented by universal-sync, and it requires a merging tool that creates conflict-free results for the best user experience.

How it works

reconcile-text starts off similarly to diff3 (4, 5) but adds automated conflict resolution. Given a parent document and two modified versions (left and right), the following happens:

  1. Tokenisation - Input texts are split into meaningful units (words, characters, etc.) for granular merging
  2. Diff computation - Myers' algorithm calculates differences between (parent ↔ left) and (parent ↔ right)
  3. Diff optimisation - Operations are reordered and consolidated to maximise chained changes
  4. Operational Transformation - Edits are woven together using OT principles, preserving all modifications and updating cursors

Whilst the primary goal of reconcile-text isn't to implement OT, it provides an elegant way to merge Myers' diff outputs. (For a dedicated Rust OT implementation, see operational-transform-rs.) The same could be achieved with CRDTs, which many libraries implement well for text (see Loro, cola, and automerge).

However, when only the end result of concurrent changes is observable, merge quality depends entirely on the quality of the underlying 2-way diffs. For instance, move operations cannot be supported because Myers' algorithm decomposes them into separate insert and delete operations, regardless of the merging algorithm used.

Comparison with other approaches

Traditional 3-way merge (diff3, Git)

Tools like diff3 (4) and Git produce conflict markers (<<<<<<< / ======= / >>>>>>>) when both sides modify the same region. This works for source code where a human must verify correctness, but breaks the reading flow for prose. reconcile-text uses the same diff3-like foundation but adds an OT-inspired resolution step that eliminates conflict markers entirely. Libraries like diffy, merge3 (Rust), and node-diff3 (JavaScript) all fall into this category.

diff-match-patch

diff-match-patch is a widely-used library created by Neil Fraser at Google in 2006, providing character-level diffing (Myers' algorithm), fuzzy string matching (Bitap algorithm), and patch application. It powers Fraser's Differential Synchronisation protocol (2): compute a diff between two texts, apply the patch to a third text that may have drifted, and repeat until convergence. If a patch fails, the failure self-corrects in the next sync cycle.

The key differences from reconcile-text:

  • 2-way vs 3-way - diff-match-patch diffs two texts and applies the result as a patch. It has no concept of a common ancestor and cannot reason about "left changes" vs "right changes". reconcile-text performs true 3-way merging, understanding the intent behind each side's edits.

  • Character-level only - Word-level and line-level diffs require encoding tokens as single Unicode characters before diffing (7). reconcile-text supports word, character, line, and custom tokenisation natively.

  • Patches can fail - patch_apply returns a boolean array indicating success per patch; failed patches are silently dropped. In Differential Synchronisation, failures self-correct in the next cycle, but for one-shot merges edits can be lost. reconcile-text always produces a complete merged result.

  • No cursor tracking or change provenance - diff-match-patch does not reposition cursors or track which side made which edit. reconcile-text does both automatically.

See the comparison example for concrete cases where diff-match-patch garbles adjacent edits and silently drops an entire sentence, while reconcile-text merges both users' changes correctly.

When to use diff-match-patch instead: when you don't have a common ancestor, for example synchronising texts that have diverged through an unknown sequence of edits. If you have a common ancestor (as in most version control and collaborative editing scenarios), reconcile-text produces more reliable results.

CRDTs (Yjs, Automerge, Loro, diamond-types)

Conflict-free Replicated Data Types guarantee convergence by mathematical construction: every operation commutes, so the order of application doesn't matter. Libraries like Yjs (and its Rust port Yrs), Automerge, Loro, cola, and diamond-types implement this approach.

CRDTs capture every individual keystroke or operation, assigning each a unique identity. This makes them ideal when you control the complete editing infrastructure: the editor, the transport layer, and the storage format. They work peer-to-peer, handle arbitrary numbers of concurrent editors, and never lose an edit.

The trade-off is that CRDTs require maintaining document state over time - an operation log or internal data structure that grows with the document's edit history. You cannot simply hand a CRDT library three plain strings and get a merged result. This makes them unsuitable for Differential Synchronisation scenarios where you only observe the final state of each document, which is exactly the niche reconcile-text fills.

When to use CRDTs instead: if you control the complete editing stack and can capture every operation as it happens, CRDTs provide stronger convergence guarantees. They also support more than two concurrent editors naturally, whereas reconcile-text merges exactly two forks at a time (though merges can be chained).

Operational Transformation (OT)

OT libraries like ot.js and ShareJS transform concurrent operations against each other so that applying them in any order produces the same result. Like CRDTs, they capture individual operations and require infrastructure to coordinate them, typically a central server that determines the canonical operation order.

reconcile-text borrows the concept of OT (transforming one side's edits against the other) but applies it to a different problem. Instead of transforming individual keystrokes in real time, it transforms the consolidated diff output of two complete edits. This means it doesn't need a server, doesn't need to capture operations as they happen, and works entirely offline.

When to use OT instead: if you need real-time collaboration with sub-second latency and can run a coordination server, dedicated OT libraries handle this well. reconcile-text is designed for merge points, not live keystroke-by-keystroke synchronisation.

Development

Contributions are welcome!

Environment

Python setup

Install uv and build the extension for development:

cd reconcile-python
uv run maturin develop

Node.js setup

  1. Install nvm:
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
    
  2. Install and use Node 22:
    nvm install 22 && nvm use 22
    
  3. Optionally, set as default:
    nvm alias default 22
    

Rust toolchain

Install rustup:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Scripts

  • Run tests: scripts/test.sh
  • Lint and format: scripts/lint.sh
  • Develop demo website: scripts/dev-website.sh
  • Build demo website: scripts/build-website.sh
  • Publish new version: scripts/bump-version.sh patch

License

MIT

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

reconcile_text-0.9.5.tar.gz (768.7 kB view details)

Uploaded Source

Built Distributions

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

reconcile_text-0.9.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (300.7 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

reconcile_text-0.9.5-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (292.6 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

reconcile_text-0.9.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (288.7 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

reconcile_text-0.9.5-cp314-cp314-win_amd64.whl (152.1 kB view details)

Uploaded CPython 3.14Windows x86-64

reconcile_text-0.9.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

reconcile_text-0.9.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (289.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.5-cp314-cp314-macosx_11_0_arm64.whl (259.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

reconcile_text-0.9.5-cp314-cp314-macosx_10_12_x86_64.whl (264.6 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

reconcile_text-0.9.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (288.4 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

reconcile_text-0.9.5-cp313-cp313-win_amd64.whl (152.1 kB view details)

Uploaded CPython 3.13Windows x86-64

reconcile_text-0.9.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

reconcile_text-0.9.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (289.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.5-cp313-cp313-macosx_11_0_arm64.whl (259.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

reconcile_text-0.9.5-cp313-cp313-macosx_10_12_x86_64.whl (264.6 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

reconcile_text-0.9.5-cp312-cp312-win_amd64.whl (152.2 kB view details)

Uploaded CPython 3.12Windows x86-64

reconcile_text-0.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

reconcile_text-0.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (289.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.5-cp312-cp312-macosx_11_0_arm64.whl (259.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

reconcile_text-0.9.5-cp312-cp312-macosx_10_12_x86_64.whl (264.4 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

reconcile_text-0.9.5-cp311-cp311-win_amd64.whl (153.6 kB view details)

Uploaded CPython 3.11Windows x86-64

reconcile_text-0.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (299.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

reconcile_text-0.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (290.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.5-cp311-cp311-macosx_11_0_arm64.whl (260.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

reconcile_text-0.9.5-cp311-cp311-macosx_10_12_x86_64.whl (266.3 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

reconcile_text-0.9.5-cp310-cp310-win_amd64.whl (153.5 kB view details)

Uploaded CPython 3.10Windows x86-64

reconcile_text-0.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (299.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

reconcile_text-0.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (291.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (300.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

reconcile_text-0.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (291.3 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

Details for the file reconcile_text-0.9.5.tar.gz.

File metadata

  • Download URL: reconcile_text-0.9.5.tar.gz
  • Upload date:
  • Size: 768.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for reconcile_text-0.9.5.tar.gz
Algorithm Hash digest
SHA256 bfe5d99b8a5550c91086c54b8d563ecc35ca0c66b1a951b299b7448345115860
MD5 c34116d248a02ff3f21d3b3ba77df00c
BLAKE2b-256 959f341befcefa2b986f212c72e2ea9b1a37bfb4c74bd3575cc1bef99987c4fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5.tar.gz:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d8caa89e1fdfc67c4812d8338129469b930b8ad39005cf9d8b5472ab3167e45e
MD5 8f2426e8eac3f8840019b37bce24a370
BLAKE2b-256 5e52acfb4c16ebb5450ac7b9f1af5501c497f726a7335e58ba6d627cd7c7bc83

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 eaefab3098588a93ab0e9a7db2eb9dd3f14db35acf4fe0de55e13b8904115551
MD5 dd415b787afc87d6e0e6f054fa6989aa
BLAKE2b-256 939d927037990def5b750561c1563ec4162058f62cb41c1dd06ebf4fdf2e0e04

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0167b398cb8ca8828e18261deb820b64122d52b1efee9ac7c4d54fcc571d5d71
MD5 fe9bf766fa2349b7c73ee1fe21849c8c
BLAKE2b-256 6930e89aa38ee9b84c000d093eb0a2e7abb6890c887464aa748853c1c14a1f7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 75c76fb1f2c6819729779c53a2c73e2e9d86cd0db635fd474e50c9a1b838d13a
MD5 4b04ec14dc8e86655ba3331cff3801ed
BLAKE2b-256 403270c18779a73e5bef3daa2c6f66d3ba754dca9a5dbbae1f0d1dcd36bf33f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp314-cp314-win_amd64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 03bb3fe759b6750fd6dfca21edf4283025e391c4ba4cfd5a7b9a2efee6957f0f
MD5 99d748e6cb9435cdbd8c6a92d9956efa
BLAKE2b-256 680ed1946fae44dce92b0ba2a3a0905b02328fe6221c170a3bec7fc52cec465a

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c04d337b56f031b01971e9d2d596efb1045af21c173b4e99a8953c8b3766680d
MD5 c7e50cfd6058e0173c6654a1820722da
BLAKE2b-256 1dfd9d3354c6a27ba132699ebbb438461e08834aec0b95464c12646204f327c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 55b71d964aaa6399737be8989e8b43a03f4ecf3c86c9ea6c6c1320836239bdbd
MD5 abd7aab9f08df1f1e07cc9d4c63acb78
BLAKE2b-256 a07de37af7ddfd5710af0a6df5baae11f7b517c12bcb3ab399a07338bac12cdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 90c9573e3e7167756d1dc0963c29120360d53845f1aff65317df65cec755c431
MD5 cc39e8417f4e13e4cc33bd393f421006
BLAKE2b-256 e872323bb78b3eb6cb11afc694ee7caf5a08b95300d12ac51caade866e53bff5

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp314-cp314-macosx_10_12_x86_64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a3ee81f62ac8a62c6ceff6f543ac10d8334de75eba46a2b275c063ab0044669e
MD5 8b69f2739aadf00375d0ed87d1a282b0
BLAKE2b-256 bd8ff1fde28ad174cadfe6e8822dcc1aebef0f143ddcc1ba38158710327b58c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 454406f51a890ce09ae1a3405b988b9005e2a4c7ae765c7b6b42c9659239aa33
MD5 d772f3f9565f27ad4b2f3f6831f4fe1c
BLAKE2b-256 636e2bbd67977f47c636eabefcb970d4ddf73e931c6b61d0b3c6d8c1a61889f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp313-cp313-win_amd64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 faccabd41d4407423bd72b0105f70bac39efc08e2e627d144e008f42f455ca19
MD5 9c25a462950a0c9099e9219298af7508
BLAKE2b-256 94de58554fb837d85d26337b0ac1132243884cad02611303d5764fb58b31d668

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0ceac142426094836380f2f11f265ebd3ab90468dc6e0dabe601b6368ffc377a
MD5 b91e6c7cddcce9488e9b3e9339720cdf
BLAKE2b-256 d86951621a1a77b8dfe99d1105df600bd172eb2e953633498c50077350bf4403

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9c072021cddd2d3e22f234172696a3515b0d6b066d319b04f867b27bcfc63677
MD5 434e23ec9f5f24100da4bea94170968e
BLAKE2b-256 2e6c108e9039dcf15000caee9aa71d49512bffa718392857d5e58475341b3f6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0522479665417a065eb0799fe8014a97d8bd4b4f82b9bfb7275469eb8074284b
MD5 e3be8c7caff9cd65f230468598f42e11
BLAKE2b-256 2293c396d8bb5388edd609974870b7c00f31070f66a9e53c625592469563ace3

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f42834f82c7c6b3fa000b548bcfef87f5f32ad67896a5efa59b418f2d306550c
MD5 e3a2977e5fcede23c9529fe61f4ecf75
BLAKE2b-256 f995aa4cc8e31f68ba8846a588287b9dcb71d951d5ed67016c9d60c3d1afc4e6

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp312-cp312-win_amd64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 75deb8dbea721b48ddbec64dc9631df3deb42cd70190c1f26678b5d42e10949f
MD5 d825e072a305e78154e0c870ba6c13a9
BLAKE2b-256 2f95053c8abb5902e0b77fa9921802ad9514420d4cb8d9a16e38ddf2225d5a8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2e1f8b152bf52c085a55c7a9e04c1a1c9a3b6e3e7583795d1c5d221620e8b127
MD5 0a65b51cc2a84b64379d5814fdd6fc86
BLAKE2b-256 1c686a87daff8336bba7a2ac6af8784338f03b39fae53f4c6e1d6e4c18f5d4b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 caa508ed443fed16ae4fa959a768798c68b61049c910f37c8f74ffeb70159d0b
MD5 b9520516d2328fc983e3e5067819dc1a
BLAKE2b-256 cf43b1b2b458417aebc8ae8930958f6f05762b4d22d4916da897615c30f97cfe

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 68883aabc24e63e7cc01996c290e7ef1084c21fc5c97839c3262dcbd317cfbdb
MD5 54414f0534c63ef4d022b07941dde31f
BLAKE2b-256 203f36e8cf7bb1e99e4e7c0255d4d6f4f4ac8bc131ddd7ffc0f974034f4cd4e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c7cbc6c17648c0af5ffed2d4a1db0ebe0cf28d9b032578622fca118eda6277b4
MD5 22aa644caaed6b01d0bd70db9113a553
BLAKE2b-256 8b72ddbde66e54daffd794456c8469406f1ec6650b7f402a125d65f12b645429

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp311-cp311-win_amd64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b46c13facf813ea786c1963e9c95e68a957aaee2388d5fe56637dcd76edc11bf
MD5 4408e128b7781824f69abd374a151a87
BLAKE2b-256 08d0a7082910949536dd2d3a8713cdaed44d0c742ed0412ae0e1daa4c9be3156

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9c14c5931fb32452275aed40edf73372e05f890b05d7c760d3c19a9cb44d5408
MD5 66a2dafe5101ed1c4abb5892deb1390b
BLAKE2b-256 6ea7479b866683608c725531f2a133aa62aa147907a2bde11c4a4157da02bd56

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b5d4cbfb3d2d07f307750b7bc5979d91bc15164c54bc1ea86fd93dec2a8365f2
MD5 8391076495cb45cbd1915b2d4a7e7217
BLAKE2b-256 43322bea6767df21beedfd3a0605761d9bdcd02d70a32cc4aebd44999d3db0fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 69ec22b34dd0212029623bbb7a1126089bd1df45880d4ab8f55cbd89b4114da9
MD5 5e6abda7bacd0fe892edf9c415c1c41b
BLAKE2b-256 ced57f4a8ede20dec4b81d4456a3d3c930c3e131db136f95d39c065805a817a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 56c77d529fa0e41370ecf44ad304697877974c48409f17a0d8bf177b71787007
MD5 48116ec105fc4fa775e4d1533d716906
BLAKE2b-256 98d6343ebe577f43ec98aafda80c0f8c184a11cb459f2c9ca6a8d532cd7be6ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp310-cp310-win_amd64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ae07a2c736502748129788bacb2b63477904018e2106954de36778db2540e21e
MD5 771d71f65f8ad91372d852b9710f8de8
BLAKE2b-256 4b135f38c54b611fe2fbe4ed1ecb50d9b4f5164d4eeed5f895b2dce4d88214a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 620f34894b09ea865223a8f7416b7e11d1a3cfd970b4ed2f69cede8a943fa0cd
MD5 29c57ff530e1357c75f7b110d124bdf2
BLAKE2b-256 c4599f40749ce24e74de4868c9a7789b84187d42b28f500feb88666af6ec9fa6

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0fe5794155cddaf676faf7887a71d92f553d51d86aa788b469ef1b93ececadae
MD5 a538f7ce769324486e086fb42d6cfc0f
BLAKE2b-256 9498c7d6788a4dc1a5daf01397d11c42fd4e790ab9652d690f673a93d85abca6

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reconcile_text-0.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3eb80ee48792af0a2037848e002cb98cca021bfbbda5a988ccb7b8f6966ae5a9
MD5 0dc627a7907698ae23cd30cff7455f5a
BLAKE2b-256 c6aba14b0293da7c8835d64c67366f40cb88921cfeff45433c14b329d4cb2f86

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: check.yml on schmelczer/reconcile

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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