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.7.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.7-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (300.6 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

reconcile_text-0.9.7-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.7-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (288.6 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.14Windows x86-64

reconcile_text-0.9.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

reconcile_text-0.9.7-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (288.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.14macOS 11.0+ ARM64

reconcile_text-0.9.7-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.7-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.7-cp313-cp313-win_amd64.whl (152.1 kB view details)

Uploaded CPython 3.13Windows x86-64

reconcile_text-0.9.7-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.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (289.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

reconcile_text-0.9.7-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.7-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.7-cp312-cp312-macosx_11_0_arm64.whl (259.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

reconcile_text-0.9.7-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.7-cp311-cp311-win_amd64.whl (153.6 kB view details)

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

reconcile_text-0.9.7-cp311-cp311-macosx_10_12_x86_64.whl (265.7 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

reconcile_text-0.9.7-cp310-cp310-win_amd64.whl (153.6 kB view details)

Uploaded CPython 3.10Windows x86-64

reconcile_text-0.9.7-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.7-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.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (300.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

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

File metadata

  • Download URL: reconcile_text-0.9.7.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.7.tar.gz
Algorithm Hash digest
SHA256 a3ce054da1aa62320597981b430a755c68f7168a28c83e18af47619e26228723
MD5 0f686cfe5f9e9696b3f04af62673cc9b
BLAKE2b-256 9a13926c992af530cc0d0aa2c1c184fee81e9eacb541911712906f45f680e4a7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0f3067bb3ccd435ca89b703885fa5c252b494553a5bc2e56080475855b6bf93a
MD5 362e5c25e2a553153922ce61a623e3e3
BLAKE2b-256 570882313be019423a62a2c8a0360720f89f2e8a2f88e8b909c50fec4a395abd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 622f10388bfd1beb59727e6bb746ac432f1189eb9d97c37117df3ca526d5ea7c
MD5 5f86411fc5c2f46e6a8113cd62ff43b8
BLAKE2b-256 15756dcd87a4b623a02698d9e33bfd330ad1c30f484d228ae612b4b4cabd0fa8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d800efadf0c3cce216ac073107ea3988598e640616e10ba0ef846910f7b88966
MD5 62b51127fed5fef2c75d285402e06195
BLAKE2b-256 7a6e0b9cad381de3f18bb51d025bfc4b28b06aa517eaa7a042dbd4c7daf9aa2e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 9209493d6941343f9ab45eed5b286548ad6927fba2eaa0dd129e98f8d44da59a
MD5 3be455bbca58b62fa2bfbd61aaecc6e3
BLAKE2b-256 4046c326a35fe83c619987a679aef0a5e39c2da5169c0fcc3520734376ac190d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 20b946e1744667890da3cacd4c9a23c97db8d2433bc0b114c417144d151bd594
MD5 c67364e60c47e282898e3ea55acd294f
BLAKE2b-256 ec846871d94ca9ae76ac53dbf6f64f505063ee97111a2410490b51cbe096366e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 26f7f4b86a83f993b6cf1b1145e6a5ccffc43d1e3dd4cb656da2490c7f21225c
MD5 ac26f313f4ebec06ead411c7b7bb7941
BLAKE2b-256 1e2574d14e25b680552568efb2b2f30249a67dd7578f191159e9ddf9b9965b1d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 19b936658d69cec6e49984bca1f094403be410d2f8862eb47bf7790d4e07d955
MD5 8b56e24987911bbe9f6938908b736533
BLAKE2b-256 61c4f1cb0081bd971da21922623d1e68f745f1d299845569a16038b6427c7ac6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9a41b7e5599d1fece58fd98c38cdf34b99f48ead153805f219fb1c85baac9aad
MD5 5a6a8756bd4f7b7db92b4a0257a92db2
BLAKE2b-256 37b22518e32e515c1bbce6cbaca148b2773460274781c45fde4b04e6fb5b5195

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 65f5fc2a417ce2dbea70efad898bb3415604ca277db39800178935e79bbd88ed
MD5 f113205d99a2fac105d0566a793643a1
BLAKE2b-256 a9984a65cf1a95eccbba01ff300f57a01c497f1bbc4bdd06992dc23f1e9ff473

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e2c6cf219f334eeb5effaed5b359f8040cc0e4deb36cdd6970e9451421de69e9
MD5 795e78585740a288410ef34de27dc7b5
BLAKE2b-256 9ac18a8f9742dbe3c89589b62fa1e092edf2557ebbb432005bc80bb1299715e9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 620a3e4f9ebef592d028a6ab01edcc896c06a3da99f7f714a7733b64affad531
MD5 a32623ada790b770aa1fc1c3886e27f5
BLAKE2b-256 11eb798c1dc71f4840be710be9b0bf7ad5264f0c377106bbe049000a193c7774

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 685d8e0de339c6787690578e0e52698c5069ffd3f048cfb7b64c6a6cc51c1f30
MD5 b3e2ac7e8a8bfb4ca46180128cd6a29f
BLAKE2b-256 e0ab97a15b300b4bff9a0f8a428a87dae4b93cd2a6f7b01fa73e4618b217dd51

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c58b76e014c45e3d89ec2f5b5383c14bc28f8a3a6456b324ac969de14098dc01
MD5 23d432e3979af00aa29fbfcddf19517a
BLAKE2b-256 63c2261bda1d2dab9a0ba7df04b75649dd94a26a6d3161ff6fd34522a10b56c6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 60a9c132984d51028a451f8b5ccf0d1d5b9aab5e400b492f87750970805dbe6e
MD5 05d87018261970219130f453e8eb03ed
BLAKE2b-256 5aa7d31a7d116d53a25cd97b5e3e4b33ab46c64f626951f2ff26f2b2c6730405

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 2ac3a639f0a3b65cb435d597ae56babd3afeb9f76718221db397eac342bde003
MD5 d5ae2f33a40e4426300f37831138689e
BLAKE2b-256 eb485f055afd8d9b12c5cdb23bb2dab91e90bd86909731c39a7e7508e1cd8379

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1316038c8ef05188136ca4ebca1f11c1ba1aed4e041f219ace510adff400bb33
MD5 09649767a4db8afaa5d75e045ef74350
BLAKE2b-256 6146c64ec634bf1998a9d2cc4531628fe81043ddbc641533915dabec113078bb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 84d939554da7785c20a2c8ad695cfb4cadf3cbe9a99190b9764510b21e9b13e3
MD5 8aae521613cba4f8e0ce1b3488bc77de
BLAKE2b-256 d8d9d02bb3dfe2f9dea45724291d23ebdd4c617676c402f950e4590f97d357ad

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6ce4de3c6942c036cd3870ab6ddab1324333ab34667561ed35bd78bd78c8c662
MD5 0a59c8adbdfbf33b9ac3b6d6b8dea134
BLAKE2b-256 5cb7241449908ea33e466b54e34fd64ab92f5995f14a4cda7ce7e33c92e9dc45

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 deb7f5661820cc12c85e48501874a7746b0cc92fffef8e32457ad4a1b47297d0
MD5 2f3d8acac80ad089d2303164fcd37a6e
BLAKE2b-256 c1d1436ed0065d1b00bc65014b2af40067a9221c802d54d6c5e494848d75da6b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1deeea0b0efc9e451f7903f9656bf47d3016b692ad4c31d9c71dba234fb04a93
MD5 955e4e19b87277c335a634e780dd7baa
BLAKE2b-256 3e3dcfc07bace5af0be32596e2a693d5c3b68ced7d37aee06deb2ffe4b35a00b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 51345ba4ab00499d961720324c3fc8898c34e129e3d28747f0dbebd7d43814a7
MD5 82c12838d44ddee857b7892e237bb311
BLAKE2b-256 4daeef313b7b10c6f408556c258ceb27904d78831c67530925d69627c38cd25d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 20a721be0720bbfbf387564ea0f5ff6bb75173f12b5298fecd1200a81bbf5cda
MD5 9b88529494f2ab1fe349df3723e26d9a
BLAKE2b-256 14a86b819f94c2795984fd5479623a0a3efb4710fc42f325d8d3002368d0e811

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 52dc3020ae756ae7b2549648fb54ff6c40bb923eb2c7d92e8b368be70664771e
MD5 6f9bdc87db9378d3e663f53d0afe4c64
BLAKE2b-256 46eca9361f9cac8db39e12549fd8fde8d3e8ab5e43489629a12d0172f8f877b7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5bf4530bdd6dde1e257894ffc8c4a84505c19301f4d2b6522e0d6235be3dc5b3
MD5 1887789ae32786eeb609051a228994ac
BLAKE2b-256 72a5c2b93f1be1e96e0e6fe75eb8b6ec2605ca0abb0127c9d26a8092e6136c47

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 54c2872c74dd6ce73eb6e5004848c21d0a779e6abe0e8cd3de427ad9d96e9c5a
MD5 5a8c7a19db839bd323aed964cfa901cc
BLAKE2b-256 3f7c44a4650096c6d4a3cc8017d4b35142cbb8a5beac9601b2db985f9ed664bc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5f701e3032eeb2635b2b786ab573e383d36fe844a79e2d15099371d34f7e05f8
MD5 005c93c27e6434ecd6706400a64f298e
BLAKE2b-256 f6228060ad8f72f2e4faed71092a90b1a7353065cc7473eef84ee6e9b876b6d9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a9bdc4795af21518b9f6e9d93cf37eedec1e9e6c304bd8ddab9c09a6f01458e6
MD5 1d6f6f4bf27f496c8df6271ee0836f1b
BLAKE2b-256 2e16f5365160689d84d1e12236f8ec8249b473c800175b2c6dc1c42d08d0e757

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1f36368c3891eaf138a80028d1b4f98dbb513cea72e3aa17a79bffe6d9a1d857
MD5 4f6e67cd1f484f76c940c3e053e776e5
BLAKE2b-256 749e2731ecf6bcf47986aa1558c8fd27ba68f432dbc678d4db5aba676bda815d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3e8e48bd339950be1442bf723af5e33600d33fa8216e1d1178383925f9b0d81a
MD5 188f4e49142fca87af193a717264b59d
BLAKE2b-256 daaaaa3e6cec5d680f203b1098cfaa922b87635cae4d722fc6e2961a5337da36

See more details on using hashes here.

Provenance

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