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

Uploaded PyPymanylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.14Windows x86-64

reconcile_text-0.9.4-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.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (289.1 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.4-cp314-cp314-macosx_11_0_arm64.whl (259.3 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

reconcile_text-0.9.4-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.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (288.5 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.13Windows x86-64

reconcile_text-0.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.4-cp313-cp313-macosx_11_0_arm64.whl (259.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

reconcile_text-0.9.4-cp313-cp313-macosx_10_12_x86_64.whl (264.7 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

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

Uploaded CPython 3.12Windows x86-64

reconcile_text-0.9.4-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.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (289.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.4-cp312-cp312-macosx_11_0_arm64.whl (259.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

reconcile_text-0.9.4-cp312-cp312-macosx_10_12_x86_64.whl (264.5 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

reconcile_text-0.9.4-cp311-cp311-win_amd64.whl (153.5 kB view details)

Uploaded CPython 3.11Windows x86-64

reconcile_text-0.9.4-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.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (290.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.4-cp311-cp311-macosx_11_0_arm64.whl (260.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.12+ x86-64

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

Uploaded CPython 3.10Windows x86-64

reconcile_text-0.9.4-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.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (291.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

reconcile_text-0.9.4-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.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (291.3 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

File details

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

File metadata

  • Download URL: reconcile_text-0.9.4.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.4.tar.gz
Algorithm Hash digest
SHA256 4ff526e8988090cb8aafac5f9be7a73d6e14af4433a9a8785f848886c4dde305
MD5 d804f4679b77af3782ef6fd1b17f70a3
BLAKE2b-256 c679759b352db2c55a9a99546444d9c3c536bfa6cbcce580a7f1288a7533fa57

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 13c20e9b9c6934b348afb9a58207eefaa323179c84366aa138e25b38e903a02e
MD5 ef9d34c1404fbf6b0f730aeba8dad622
BLAKE2b-256 a132220e985cad4304fc360665723633c2a18b750491ea70dc3b5ce545bb2651

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f47a08bc98f07af53d5e0f91d626cd243d05bae71cbed36685b3ad0237defd70
MD5 b78bb8890ca3be5970866059cbc087a2
BLAKE2b-256 16c21df89aa4cd4ab639a5f10af41de2694ae8ea79ffa9027e1ce423494d7a9d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8753de2ac8da1bd1bbbb4470366c8b052d10bb4e0844246db483562c1d19fcc8
MD5 ecf98e7a9a7b86627cd1aaf9f2fde6ec
BLAKE2b-256 c356919d063f3a18006937a3f807358b2b8e8da403d888b432539486d5db91d7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 4c4bb221365c6c450e9cc2cc55cd0a4f613d9b5359dac085a14429bd6dbe5d41
MD5 689760754a6fdd58ba46652a0dc124bb
BLAKE2b-256 274ebaf6eaf30fecf23592a1007eb0b4e59e278649183944291936a74e97468e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 44f5c566a5d628905337e6ffeb500629e71dc4493ada66f4b0e0cd7df7c20dfd
MD5 0867c37a30e619f867f3e0bbd674c36e
BLAKE2b-256 25265fc4b44902ff50405c43186461ba2f55bdb2160af3b3779749c7ec26fa97

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d7fd011eb84ca92d81e64910b3069bcec1e226ce53be65e956dccf9f7df08eec
MD5 6be6ce1236e25aeab806499dd65ff438
BLAKE2b-256 586cba6b975b504854e2b9d6db1f3aaca3a8b971c1e9d0153f3067c3a3277a83

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4ac31c632442bbbeb423bbf1a156a28c1fdf69005d81430ea1a49534dc102d16
MD5 1585afa5090d0e3c57182e4de7419191
BLAKE2b-256 3b071d1cf3de71737db45f9afb535c49cd4f88a3221a39a4de7883d3f10b1c7a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 aebf0cc579aba031b6de1496588c3e29f60092e98ee428530cd14862b16fc65c
MD5 b926ce5f663a77f6433d6ff741d6501a
BLAKE2b-256 68009ce1c4caef0bbecc7b5585eecfb6f680586820701d474869ab6600432de0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 467133c091ca71419659b622592cff9d35aa870e3234357febe58bbcda1f0188
MD5 1514a4021f7762c2bd220441834b3c7a
BLAKE2b-256 f5a7976414ed3447c960ab9f723a347f216edc8452d774e5d8a210a81b97251f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 d05b815c32dd1fcdc22bd07caf6c4c0c0061250816aca52f78e06da22d9b32d7
MD5 1661acd270f56bbc84b06d795fecddb6
BLAKE2b-256 7fe4afb957ab28bd4683ac560e16ee30a083bf99e21d5207835f5adbf2806a8a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0757d65be81650885e80d69c66aded732d83e70ae47a92fb0b1aeed84227c5a5
MD5 c21f35e117b2d61317168b7da0353d71
BLAKE2b-256 1c3e788ba079dc2eb2f6ff1c9f031957de2a691a932c576f5732a434be74f679

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 11e9c83d4b7839c2d9b186bd99d93ce491998567e211cfd5d39461ef092afd99
MD5 d418862cbd02594f97b499644f1a0f3b
BLAKE2b-256 81144b7c628c068899837b93a06fe60ee85e16501e795e19b4496e615a28f648

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9d128a5dabf2679e3098a73f9595e63d0616babef7ede595ac783203e8fabd2b
MD5 2f97e663a120671ea27c6bcef252c2c9
BLAKE2b-256 7352e9b0538cb4508069ceeeb27020df8a380be00bdfb6625df7d07f9e0f09ca

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f9c6cf76c26f7da3fae9670d5baeac9e1f47bd9973f2cf41b4fa5b4e0a99c93d
MD5 9a18e2fd97f2b981995014993481e388
BLAKE2b-256 13f520bd5961e9718e6b20fad38c4596f11107ae05fc3d898da4bc022a18528f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 4281f9649a002c02a4cbc3e5ba274a71a26d50d7863b9b12684be70edfadfa31
MD5 d15533dc0bff8d9fed256d8e4c28d05e
BLAKE2b-256 dd60fd51cabde070603683d144f4cf86723f167ef64e60c62a7cdfbae727cb25

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1db8377a807940a7ad04a639164ada131de954363b281eee0fd3117cc8594954
MD5 226e81b60d25a3ec933b3924725827e9
BLAKE2b-256 1cf6762989d3915b6b66331fa01f179d2bc2a3094566dfcdb637ed56de0b08f5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0b0da7e4d23f7833c6e12d65300cffeeff01e78bc6edd5d48b11dfdff64cbc81
MD5 94cb39c51a9381702fcb377869be2fa8
BLAKE2b-256 122afd6775ec45a2da6df8755068cfda10a6814aaa16bf5f154d8ab7778e723d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 80c755b5b56456b647995f8371c37cc11e4ddbec6cc41e79d03b9edb99013899
MD5 ce54f4a3a0148b4f03a5949201537c4c
BLAKE2b-256 866e69db109e9e0875720e0a9a9162a6fcf88a564d6d899d447716a6a0afc80a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7f9785fa502b7d67de8fdbeee917677f1b210e3173d253becefd0c01201480a5
MD5 9632ae65afffbb4088b0a268da75d124
BLAKE2b-256 b8aad0e6306af866510c2f33e6252883ac783ae0f5dfbea91bb1b91fab1a651e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 aae7f6469d00f0ff48c4b8e049e5d7b02d2c175f54c143cd948d6e91afe93c97
MD5 088af88a427ae62e5467efd5169aca0f
BLAKE2b-256 dd27f500b91161589bf1b073ed07e0cdd58faf7fc514f357c438ec6ced19c8ce

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2146da6b78219ccb034f9c45b61d521f8b33cc90c45f91ea571f19560c9b21db
MD5 ffcfe464e323fa36aec484e009f4f641
BLAKE2b-256 220aea9a39db35a96b98312c24a26b2273d833c3411ad39135e82a3892669c03

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a5cd2b39221272141600f5d138d67a20fce47b7fa7b82413d3ec89dd4901b2a1
MD5 d061e824361eeec3aeda3645293ebadc
BLAKE2b-256 127ffd8e69e8a3c8cb6d20e949c9ef1da60d3a3a853f66662bd897189f5527e7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d580710ff0660c4cacf0856037fd5ad70999f6fd5999ae6e07e79bca36166e8a
MD5 799219b0fd90cfd1869c39611a7c558b
BLAKE2b-256 9536b1b08232893a6998075d8b51b996b01c3921a75b79a2272ddf23280fb5ac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1fb8c05dd80f9bf0d1f870f1609f9bc0b2f39c067d5a4df4e2254a8abba09d61
MD5 44b54a719bcdd3b617b0ab4c38b18880
BLAKE2b-256 d2475532ba60c4e02dce80024ea39c355af87f4d76d8da4eee8c14f9363ca96a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a9d2e2e42f1a0251739154602fbf3c32a644c04797a818e5ff88008e08c1fac1
MD5 5f42a2e3f29b02b9e28cee7048868069
BLAKE2b-256 c88d0798e7769ae7d6d5fffa00bf533d60b9e0eccde2af991a452be909ce5491

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 391cf331e326a628c7c6eeb4a76a295fb79b817f52d3ad1884fd4bb135f0b061
MD5 d909ef882229fd5270854c2160d79189
BLAKE2b-256 e9154f334ee0ea41d102d8ceff7b413867311f060048fa931557cede2884f4d7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 30191dd87812e4c29c6ab7e9ff4c025bce60e7c4fa479756ba7744a39315c01d
MD5 6ee77e29fcf569a46158e1ad1557447b
BLAKE2b-256 ac78a35c80c2fd80bc414e6a7157b85f9025fab709000954a119461c3820c43c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 18a4bb0eac0f68d773dece27cc64e068d08d76bcf31380035807109de7ccda0a
MD5 1e8f0176a987234693ca4ced63d7bffe
BLAKE2b-256 c7b4964f77aeb62055be9b0951da7ec89c037c752bbbeeaaf8efbc81615914d0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4310febb324190813dca8dd636f0691027e720b34aa0bd1c9d2b2d6adafe8326
MD5 c86cc4ac4bb243f55ffe668e2853ca1d
BLAKE2b-256 59bcde8a9e4061804e6c1a0a1539a28d6bd0531a3f4d4ae31af3fbb8108ec324

See more details on using hashes here.

Provenance

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