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.6.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.6-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.6-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.6-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (288.5 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

reconcile_text-0.9.6-cp314-cp314-win_amd64.whl (152.0 kB view details)

Uploaded CPython 3.14Windows x86-64

reconcile_text-0.9.6-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.6-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.6-cp314-cp314-macosx_11_0_arm64.whl (259.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

reconcile_text-0.9.6-cp314-cp314-macosx_10_12_x86_64.whl (264.7 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

reconcile_text-0.9.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (288.3 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

reconcile_text-0.9.6-cp313-cp313-win_amd64.whl (152.0 kB view details)

Uploaded CPython 3.13Windows x86-64

reconcile_text-0.9.6-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.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (288.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

reconcile_text-0.9.6-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.6-cp312-cp312-win_amd64.whl (152.2 kB view details)

Uploaded CPython 3.12Windows x86-64

reconcile_text-0.9.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

reconcile_text-0.9.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (288.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

reconcile_text-0.9.6-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.6-cp311-cp311-win_amd64.whl (153.5 kB view details)

Uploaded CPython 3.11Windows x86-64

reconcile_text-0.9.6-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.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (290.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.6-cp311-cp311-macosx_11_0_arm64.whl (261.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

reconcile_text-0.9.6-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.6-cp310-cp310-win_amd64.whl (153.5 kB view details)

Uploaded CPython 3.10Windows x86-64

reconcile_text-0.9.6-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.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (291.1 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.6-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.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (291.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

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

File metadata

  • Download URL: reconcile_text-0.9.6.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.6.tar.gz
Algorithm Hash digest
SHA256 00827d61cae896f6e40ef1062dd459471aa65abe4e687805be5bd8a529ab9422
MD5 c8c3532dd59a8f64b775cc4a1f51347c
BLAKE2b-256 7870b33edd4baba0d2eb6c4efb9ee9c2c85b7047935e10fe6daf27df6a10c021

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6.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.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ce049e04d8a8861f364e5595d8358af3c941a0ad7499ae6c41f0b80c30ccd883
MD5 2189dc7c5b95e7f8b0c401419d9cf37d
BLAKE2b-256 65477b9f89856e6c2e54a62b9e5fc0e59f70ed9050777ea727af47e1f04083a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4852603396cb138572acd57b49f9e685f17e927eec184d539147d190cb6001f6
MD5 9cf8594eb56c1fbc0cb0dbc75ddda0b6
BLAKE2b-256 abc138b6aa2a17402fa1241fcd3c046c40b7e96bc7aa21d7ab09d0b9d10bb4d2

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6c37286354d937b4a1b0deb7f7b75a381d90bc2479f7b2720b2eb43182bd9311
MD5 f9c7c8143b66536fea75f1c8036f6b68
BLAKE2b-256 320a6260f7e69294756a45dab50b85d04b3c6b4336c1648b14d25ec81269a7c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 b4ae0dd1fb322f948b8e08fdfb0af5d3e66fd5a9d8a4aa13cf2af4ecbd9a5218
MD5 eef9f1b4f6c3c7ad44db44fe50cb3fe5
BLAKE2b-256 9528ffa68bcbfa3898436723510ae2e5d3e23116a752effb2ee2b19ae3cac5c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 65f3f3e7619b99b80739ea35e02831480a5b2cb068ae2800f7c0441526c6dabc
MD5 2b4c6ab667e7d2255d47180d140c5d1c
BLAKE2b-256 79ad90dcf79db12d4c7d5ebbf3024f891e0e9c5a261ed9561fa012f4ba6f5076

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 142c16a675867afc0f938c33daca7fc5bfa56fbf02ea11ead0a7bf2c523111ec
MD5 0206418a38c2384cddc77e9345b2701b
BLAKE2b-256 2b837fb4e4cef320199f7fbc6330758c0bb3f825aa037d4f687d7d267ad109fb

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a491982a8c8f235f1adb280cdafc6d5b6645306870fec0c66fd485b4676daec3
MD5 235ea861a207a0cd33b9a65a26bcf0d9
BLAKE2b-256 8873ed830abeb53976f7dfc081387a48168278369f16ad300913e60c0ca6fdd9

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9e4b4016df75bb0db9b5f56100333741afabb611d2c8ff0a608b36359a543753
MD5 04520cfff22882486ce2fbc8c4c77e54
BLAKE2b-256 50fba954b624938a4b7931c78b78ede1162d466a4bfa60eb45bc0c14638e8bf4

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0d5794be784acd453fb7f4153839a6b917a539b884aaee74566a6feb3d4c1774
MD5 25e9eed1ac4d1cb4497f3158fc97ffc3
BLAKE2b-256 aaeaddfc95145c75d175bbbe088038e97dd6392726cfdbb8d4a1b5316092e25a

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 263946d3d67a51c5eade4fa2c78743a994425ad6d3d445c46ed7dff9c597d04b
MD5 7123371c1045e1d5857b80f3673053b0
BLAKE2b-256 d1677501ae39ba90e177c4b1a0b8bbf633df032a4e0d7a1af20b91a779b4c18e

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e0e6ef6c45abfc0e528c358fc415fad78ec57c410809c9c9c501c2e50e9534a0
MD5 cf3a3d0b8605cceafb3bc07521f9ccca
BLAKE2b-256 1f48370545f758b0370558f8da0a21afbb3e59fee45b2ad0bec6451f939086c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 717c2630bedc8f8dc08c8eca8edaff142610f2108e4b090333903498b3729bfb
MD5 639a610953ecd9ac0ae16acd88616115
BLAKE2b-256 f7b2e0131e9e725d9e2c212d2952236731453e19bff28f26cadb78fb7662709f

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a90d597e8631b976424f21ec7f68bb9872ca8f49563d0422aeabc8386e2917ec
MD5 2ca65cc21eb6998df82acdddd54db9ee
BLAKE2b-256 9e23a7bf5d2561e322480eb4c1270a35496115cae1651a27bd453dda53627b88

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0bd792a0a33d9dc3a02e6256005335fc9732435638dfa4059affc085cb644778
MD5 3b7b74847ff20992583c8a11e8e30cd6
BLAKE2b-256 8385d49ea8647672aca8326e5961201377ff0d53777c779538236dc0e695da93

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4e848b403a8bdaddc37297c40afd51a67a96ab07ca63118b82da72ce9b2d19d5
MD5 77500d925d65629fc0c4b151a3e7d893
BLAKE2b-256 312958ffde5ec9bbfe33147bc27820663273b3961faada762833b8481f1aba57

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 dab5e42eb220e4c1952a87178483809433f6a1de65e8950faaa62a1fffceed9a
MD5 153552762a5935e52b4cba628ee63ec0
BLAKE2b-256 1d6e96d44daf17fc7b654694bb2a0c6acf7b3b50a3eb9f988afe9292be2775df

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4382fb68a75fd3baaffe5ea2744ccced887709d9352457020dd9ced17b32dd42
MD5 e4f94e00b2c76e226279a886b6e2aba1
BLAKE2b-256 03aca331c7690b00777f187b2b9effcd9bac63e02f8ebe481f96136e3d7760e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d9a79e2af3ff173fc567b00394c83a7b46ec03b8bae0e488dbf7064e35e4ed5f
MD5 b35d803656ce456775ad8943069ffb70
BLAKE2b-256 0cd1d2b3182b6edb3d5071f1aa0a849158501d7bbd5ab4ef3217e6c6a9548134

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7af17eff0dc713998c42f860ee3a9f431979ff68fbb3bd3be7b2392b9b220769
MD5 39f241b98ef894edb184bbec02ebd66a
BLAKE2b-256 f91da0b7011ce3eddf834a55e13e5b3c6cc00abfc8e9f053387e58d94825ca9c

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1f84937d3f8ec4d4122a97cebbdada4bed633448077e7f0d286191ad5701e6cc
MD5 e1a4c5c26027f1952c38f0d0d4c8bdfd
BLAKE2b-256 189ca9a2b76a51d6969ea71094765d7a6b6fa1bf4ba53cf858beeb0f8ad7d1f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 95df7ec2717a0f3c45f069076bc66fdbceebf9f41874137e762467fcbc2fde72
MD5 2614777c261c109b70638969df3cc357
BLAKE2b-256 4b81da7cb2356ad4414b9c08148276304b770326145db74090d55693ca1603a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 40bfb14feeae5b3038821766a6405cca430f64c215ac161e80b215c4e2d22055
MD5 d47b3abaac6012177bdaac4f4d628b18
BLAKE2b-256 be91594311c28c8bab436b19fb266fdae0605f9211c2ccde1965bcac395f9013

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bd4f7e1d41a36bfef8e93d06ee7422d597708f1720524a1a8c6692ea63582dc8
MD5 13dfdaf1a9e35f605e9568720b6dac4d
BLAKE2b-256 020b060b84cefe4daa594c07ea19f7845e5a23bf776ca905ecfd7cfe2f68aadf

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 82d3409a376b9596f135b8e84e84f5ea8c817d41639a1a2c3ab22cb751cbe5d3
MD5 201e4a26c2fe102ccaf7d038828d21ae
BLAKE2b-256 ae2052a3aaead4bbe648b45755aeb25217a6129aba8307b33783d618d73744e7

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4f75efa7b48a7d7c1490b15853fb10787c839d3764818eff5844361140def1a2
MD5 38cfd1df851f24dafc4292691fec5a82
BLAKE2b-256 459f360d7bc6c9ad73f35e2b34f99078b43c8460e3aa7e6f69d4b6dfb469f11d

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 614f15e748cf5caedf437468142791107cd53263889cc7fa181c660c2cb9123d
MD5 618a3451fb9e65db4c98880afd0845d3
BLAKE2b-256 520f85e6278d073ad2b343051f303b0261af178deb85a32f40c6fea3d1f2a0c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9ec109afb2a5e5042ea4e7125758fe82e22f5b347a24352aa29a23afd961f8cd
MD5 a117ff5ca4115eee258418153a312ac9
BLAKE2b-256 5898ae0083df209c3af5497686e75fd394223c510041a091fe218525c69c972c

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 87b5f87102c4e35ae3b4f436b25f63cc4f9354fd4a6a0c591be8267e8a6e5052
MD5 3761916e2ffd953f29bf1c62d5ba951e
BLAKE2b-256 675a4ffae45c34c892046962fd214955081b40945284725c9c99402fd5e32329

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for reconcile_text-0.9.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 040fb3609c16470f1a7ef629e0c99cdcc5d023db3588a862abcec0ad06d9d402
MD5 ac4935c6be6ebf105a5feac9dd456118
BLAKE2b-256 6d9bf761fbdacc8f88b45c416e705e9f1ffadb38f990417ad94d6f6121bfc419

See more details on using hashes here.

Provenance

The following attestation bundles were made for reconcile_text-0.9.6-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