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.10.0.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.10.0-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.10.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (292.6 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

reconcile_text-0.10.0-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.10.0-cp314-cp314-win_amd64.whl (152.0 kB view details)

Uploaded CPython 3.14Windows x86-64

reconcile_text-0.10.0-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.10.0-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.10.0-cp314-cp314-macosx_11_0_arm64.whl (259.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

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

Uploaded CPython 3.14macOS 10.12+ x86-64

reconcile_text-0.10.0-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.10.0-cp313-cp313-win_amd64.whl (152.0 kB view details)

Uploaded CPython 3.13Windows x86-64

reconcile_text-0.10.0-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.10.0-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.10.0-cp313-cp313-macosx_11_0_arm64.whl (259.3 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.12+ x86-64

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

Uploaded CPython 3.12Windows x86-64

reconcile_text-0.10.0-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.10.0-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.10.0-cp312-cp312-macosx_11_0_arm64.whl (259.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

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

Uploaded CPython 3.11Windows x86-64

reconcile_text-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (299.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

reconcile_text-0.10.0-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.10.0-cp311-cp311-macosx_11_0_arm64.whl (260.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

reconcile_text-0.10.0-cp311-cp311-macosx_10_12_x86_64.whl (266.4 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

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

Uploaded CPython 3.10Windows x86-64

reconcile_text-0.10.0-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.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (291.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

reconcile_text-0.10.0-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.10.0-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.10.0.tar.gz.

File metadata

  • Download URL: reconcile_text-0.10.0.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.10.0.tar.gz
Algorithm Hash digest
SHA256 4618c63e99f2b957d4765a9458994b29705003a9021fc5b251eb2e72e06f6775
MD5 7eed028c91eab6770a32be3f3e2dbe2c
BLAKE2b-256 517333e440cf55095dd0bd7cc7b563f13859f580f589ab5fc71736ad7b506076

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f97310003969e38ba7fdb825e6493391473d35a6bb8d7126dd83abf4cee8414b
MD5 41e999ae6cebd8493108fe2e1881739d
BLAKE2b-256 cef24959e9ecedb04de105354f423d7fbe9e0a1c2e04c88187644f46ee19b154

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 eaa05d9c20b52e7b007b68b07447333540744228370c93c9b891f1daa243c4de
MD5 4094343148f346de966709def5555215
BLAKE2b-256 bc2c08ffe2c8815aa0ea58cc51a94ccf3044b30d2b09ab7680d1c48bb9aec701

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 7d9b5feb7c7d0d83aa569cbb40052585add355afc886593187a5c3427b582cfc
MD5 d22c913ada79850a05b9956ec76227cb
BLAKE2b-256 ce754f2840b7a5d93f137d46ed0a4e3fd3ad5ed6cda3947f11020cf4273d5958

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 a9727dc21a12d4efaceb3ffa161d6c40e1f052ea973099bbbb4e3973e0e8fe5d
MD5 67dd93d9ebbb24a00e1796def83f0a26
BLAKE2b-256 353c00219041ba37128fc97c132e1a68f2b2041b4a043e7156c94b84ed9063e3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9fc68238d4ceedd81764ff5db06c3e6e42762e3d096ad06cf1ff28989407982e
MD5 f3b35ca3960c5ae472d2dc1e5395f44c
BLAKE2b-256 488c3025dbd670d5dc23fc3d74ab8a57b4928374e82270097f8051ee1801e114

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d398760e6d15722594f93516fd98e8d8e0b8b8bbf685431c7c24e8aadb3aee8f
MD5 2c7f3074fa8b8678667cbcad0fa1e1db
BLAKE2b-256 0c2febf430d36894ce44cff05864e042f1136e871e13cb15538634b252455766

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3389db7d70254af4a12fc4c45388c219d12bf91966ce547dd3dedf08f3d4ed0e
MD5 80ac889aacf3c859566cacc873649a3a
BLAKE2b-256 75ed6c13427da1752cab263004006118d25ff9c48814cf986cf781b0f5bf3581

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9e680c97073fadb2ffd9308c55d514879c64ad73d14e75f077a14b2857141903
MD5 57e3dbfea55342de0283114c4afc18ff
BLAKE2b-256 d9edcb57c56fdf226231506423750cc76da6ba2be5782ea59f5601724b45ebd8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c6a623c119d38c50cde7164094f0be492a54ff90cd2dc7986b4d7f5f474974ec
MD5 ac53d95c8980dffae4266c952ad39854
BLAKE2b-256 40b340883e95784e36a68b53e4e728701892f7967eddbb41ebdf19f7d10f163e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 7d555460199d37d463b6b52b1d7e1d7e804aeb28d153b1646db667bd6cfb0b5f
MD5 8e31ded3feeb97a16816001d786dde22
BLAKE2b-256 5dbab336eca353a380c600f8f883b742e8fbdd4c84b4b0b29ab6317bc6c7c7b5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8fc9c54b898eed9dfa4af181b78eef27f863dd459f1fce8c325e5a4050336e77
MD5 42cd8776ddd6fe4b26b5d0143d6d05da
BLAKE2b-256 e5f656b8d07f830835c3d09d63966f9b29038da2b872a6f4b306ba4db55e1856

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 592e4d52ec1940c67445b58c1cacdf65b554ba93ee71dad242a3f50313ac53ec
MD5 bca75a7f868a093e1eb72a103cc0c095
BLAKE2b-256 1feae417e4ae25033f018240084c0beba2489938a494d7aa8e0a3e47107dea48

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b02f98d5e39feaa9a780d08351d97718e3122426bce627f577fa5bf396194acd
MD5 a51256f409e87520f48e540f5f3786fd
BLAKE2b-256 73a486359799c217059238f75258f42a3972887c4ecbcd69f827ccba2c32ec31

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d2aa0637bff9b5da23795e6cebe37afde8b0be24bbe96b62f3994e1d3ab18789
MD5 676c0646cd679e0050dbb803f8e65aa6
BLAKE2b-256 2d6e36630349fc084a998b4c2c7f23b3acdfd7f2a8f941becaa2c59b603b6479

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 39da995d3e2ad81595f4d698edc0ea992e32dc8a6f7ab34baa42e7f962c16eb9
MD5 29604447af4498e2b6fefb3f16a0514a
BLAKE2b-256 f7e4e16e961898104747d8ca93da484eb7beae613b27b9ac598dd110ab3a265e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 312755e057a2b6932859763dfc94f385b2bad8953c4ad81e94cb865e3b64b398
MD5 64a8ca34725cba1099fa24fb13fa7ff2
BLAKE2b-256 bfdb47c5103d839097edd462d8474536a1a315ffa89ad27ca90c3e960d9dec38

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9157cd2c8545f62719070ba3276577ee1c690e2a70faea2a36c3ff895eb41891
MD5 988083a3224b9f9e8655b9bf515d78a2
BLAKE2b-256 b366655ce67722487a3b465884edb35d24f15bc6a58f098fd4881decad1b77a4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5963e9a0d3f8cb297dd2ec8ae468ded5ded8c095d0100d169c2cf5bab0849dbd
MD5 c17f2ed012bd6894de5d3560453ea32b
BLAKE2b-256 7fad6533ff4f59e378ca0cca86bbabcd4dc5823f8255bcbcffcd6e5208c23e7e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a9e245fb83d77afb3832a05d1c259fcf4df3c88f292eb8b74cc4ad9567501527
MD5 5fb5505863cbe10cb95284ff6959d7ac
BLAKE2b-256 d4a968ffdbae39196f773c0a0c8a911855af1001ee16a4ae83b7cc0e92e8cbc7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4eae05e47f228cbc2c5c86b69f74714045a498a1272f2fa89ad8310b4db468eb
MD5 c7735b473a3d071ab454d53a4a552baf
BLAKE2b-256 c13fdb9cf9c05cb34ad9de733fe251121c092105690f84b6d8a86d91d5f29917

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 77c7585a4ce0b17926e7b64f4b5b75b95c1547ed03b40e1abf3125cf7e4ce418
MD5 e33216d070aa42c0d3f2c7cc54b2cdfa
BLAKE2b-256 0a6ae9757dd9787161330d48392ab0f2b1f8c3c83ad6f233bd2cb372d64f85ae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b5222b729b2d4a95842ebd5af846d4accfb041ae8d0594f2a473bac0eab1363c
MD5 097ed75a153d7b1724661a4ec4e77611
BLAKE2b-256 029df451750fb29b7aeba79828c49fa9a0d4e724172e9cf662d887cc2d3debb2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4b8a83d7476f23e76551ea7b350558e0b646ddc012e427eb540c26b2df11e885
MD5 74988ac236545f47b131cbb81e78f53d
BLAKE2b-256 3e62ec85f19e4b87a25e441824a4aec10d06fd06d645284b9ae57f1d421b7d10

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 35dc125bacff6c2d406a6f0435ec19e6f91a071522b695a3f44ed8b8efbf1363
MD5 d68c40a5cf33d15a8e0f8aac08a78029
BLAKE2b-256 9ba2ac6ffb93df8808222298b2807719e022102b22a12a07a4f1c1942f6e886e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b57b467d47e18e0d3baee6dccfc8892b1f566eb7234fa809dfe29109989d17bf
MD5 87f73cbd0cf80ecec6f37befb6d75628
BLAKE2b-256 ca7587322954939a8c35c76b0509828dccb94550b27b7092baf4908b6880ef78

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c2af61edb740819dfb763feba46e2af3c759f05ad048959d91172edbc8b091e1
MD5 bc13a3c814933480cfa00d7e77df06b7
BLAKE2b-256 405f8d1215369881b684b9a43b9a2037d329eb50ec570cc746d6b7f63f861653

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5630e48ad66a2a7f471952cb66c84323502834a394525733a1051bb0917d653d
MD5 ea629ae894355c60d766d3ed126075f3
BLAKE2b-256 f28eabbe47d3d70eaf5215bb8e61d838d649ca44fe757b80eeeb97a19a099fd8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 37d1daae4eacb0ca215c86cc12825ea8c61833b351fb557d395391ef741ed5e4
MD5 1d88ad497902639f78e32e1307201c00
BLAKE2b-256 b300d1b7c3e91cd687ff9d882220da274e8ab2835ee6cf4189b2ef70426d1f49

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 df2086fd38f83ef469e80a1ce7640a94c59527765931a74c6099a7cea78f15ad
MD5 1c7539d7c31cc981d646198a741459c0
BLAKE2b-256 8568460d0156a2a14b38b8aa819944c5d412028452e2b44acf4fdc155394b3b9

See more details on using hashes here.

Provenance

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