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.11.0.tar.gz (769.2 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.11.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.11.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.11.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.11.0-cp314-cp314-win_amd64.whl (152.2 kB view details)

Uploaded CPython 3.14Windows x86-64

reconcile_text-0.11.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

reconcile_text-0.11.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.11.0-cp314-cp314-macosx_11_0_arm64.whl (259.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

reconcile_text-0.11.0-cp314-cp314-macosx_10_12_x86_64.whl (264.9 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

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

Uploaded CPython 3.13Windows x86-64

reconcile_text-0.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

reconcile_text-0.11.0-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.11.0-cp313-cp313-macosx_11_0_arm64.whl (259.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.12+ x86-64

reconcile_text-0.11.0-cp312-cp312-win_amd64.whl (152.4 kB view details)

Uploaded CPython 3.12Windows x86-64

reconcile_text-0.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

reconcile_text-0.11.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.11.0-cp312-cp312-macosx_11_0_arm64.whl (259.3 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

reconcile_text-0.11.0-cp312-cp312-macosx_10_12_x86_64.whl (264.6 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

reconcile_text-0.11.0-cp311-cp311-win_amd64.whl (153.8 kB view details)

Uploaded CPython 3.11Windows x86-64

reconcile_text-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (299.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

reconcile_text-0.11.0-cp311-cp311-macosx_10_12_x86_64.whl (266.6 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

reconcile_text-0.11.0-cp310-cp310-win_amd64.whl (153.7 kB view details)

Uploaded CPython 3.10Windows x86-64

reconcile_text-0.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (300.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

reconcile_text-0.11.0-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.11.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.11.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.11.0.tar.gz.

File metadata

  • Download URL: reconcile_text-0.11.0.tar.gz
  • Upload date:
  • Size: 769.2 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.11.0.tar.gz
Algorithm Hash digest
SHA256 af3813e0d4843428bebceb80e06e60229d8a7253af2a94b8db81974ed6d1b598
MD5 725f312f2da61f68b7f8366cd5584ac4
BLAKE2b-256 aad6fb4b6dd9f7019eecef346c31b38543072dda32f5227d47326d66d75a83dc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6aacb2079bd5d6632d5546b9379e4195ae24ccc540cead3a790e16a7deb9e3f2
MD5 80aea32327b2d2bde8cf68566ea4c409
BLAKE2b-256 4263dac1676ab1f1b58e501a117d67959cb296a806bcac5b83bd6b0f4d0e1195

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c8c45d1f2c4edb3d009f04dede61da38e2f088bd228c1a59cc958de65fa16d6e
MD5 442180bff2684f39a46fe6886db21565
BLAKE2b-256 0711a30fb4374b46ffdcac291f444f71fdf58f4c6d4f8b28aa282c73e31e0191

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b4579452c0197081377e429221f216e0514bba772bd906fd1598f0669ae714a3
MD5 fe49ee18907a496fcc628a1d86a0b5a5
BLAKE2b-256 bb4db308fbae36b0efaabadfad7c78c3a4d586552fbe61730fffef445aa6d346

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 5e7272bdc405ccb8509c3990fefbb5db9840898453b960841dcf5909279fddbd
MD5 e818e1d9f2d497533943b957410d389a
BLAKE2b-256 4e3c76274ab99afef28c665960c1a9cfa881c8dfe393dce7a8d2ae2ec52ddb34

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 844bcf744f1e39729afdd6d0631bfbb6aefe575ec3231e03cb854463679123c6
MD5 785362bfbc84f91bacf389ce6a533160
BLAKE2b-256 0ada3b3638f6038711d2965869dd06e938b31b46d0515d4bcfac26532d6910ab

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ebe111d9ee64a6af13651a799536360dfa9a445164c7d9d933fb9e1e1ccdc8c0
MD5 c40f6133f4867efb8c4d11549784114c
BLAKE2b-256 12b036bbb35785cc221b6744c1d1cfdd6d287ced4f260d2ad499ad477fe10a36

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56717f80d84fdb3b49496a92d355d81cd24365da32673a95124d8f57e1c57b41
MD5 3e4bbeebbd5a8843b94704c4aeff2465
BLAKE2b-256 0d4acef7c42a9ed907d7fead033e725ab3f108f7698a2a971e1e66bc13df11d6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9502247605333f55448443e211996eb1c63a6e067145f6c57825df4d54c66024
MD5 c4466020b27ed2b66001f1f5d8f78554
BLAKE2b-256 0b04da8b7e4d200dced78121bbf3281e6dc295dc159c7f60354adb85a12bcb30

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 872f86a2fd579c7473fb993073eee58f32cecb89992a104fd0029c3583716a22
MD5 e02ce0a83e9dc4d72c0215d00d98ee82
BLAKE2b-256 5a61bbabeaa19a59098b6c20a8eb30b2b5412aaf033c91ad01ea5fad52872446

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2328accd559625ff2972085b01dabfcc951131de2f4f5450d90b0e461200a877
MD5 f8569ee88b2547d35842336043bd4248
BLAKE2b-256 5b2abe571698dccc338e2ec46bd573350f8f0a9eb2801ef0213c73ed6a411558

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 289115979108d7cf47d48ff55f0caefa52c08bc4ccd8979d4c3f8f4da75b67fb
MD5 3340181467245b8b8019ff5e3665c4a1
BLAKE2b-256 705ea79a838665a41d72af013cc692cf3b551f79c6243bd78b88c9dd6b929e32

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a05011876f13c2eb9a2016475731853914484233370930b9afb3a998a150670b
MD5 311adc336883d35c399dea8a2fa2b8bc
BLAKE2b-256 7086fcf9d7750cc694730a594d1c4e209978ebc0064883e02de3db5bc34f9691

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1e56bc1f52813c284d7bad2571e683184fb9da6625f6487dfeeb85c2a77570d2
MD5 c7220ec60c4586b0f2cb86c18f0347f6
BLAKE2b-256 859f22bf5225e31b1771b8fbe1e43e3b1955c7af66fcb6ea7af2416207327ca2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 db062bb03df7d02d091698a93402acedb44b9d4bcdaa130faa761d79369fcecb
MD5 becd6a2d49c5803d426312b6243d0eff
BLAKE2b-256 cd02b5f958cb4e0b73449b4f65f83d5cd1c7458652f7fa090db7cd0fdf069711

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3f3e33f19e145d7e6407e89fc753a525204d5bde47f05e406093cc2f65a4e6f7
MD5 a849891376e2671ba1277aa4b9f47b8c
BLAKE2b-256 9cc9935366e5de1a81d5677276590b4a2c058e5b782bbf7a124b8a554c4ec33f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 10fa9dfd10f25a06337c02b2f714a6490a977063535c51811cc6ddf23ae799c8
MD5 192c53af1995310446cd9a3448b5c86f
BLAKE2b-256 f0d6ec9c19c98fbb1a80d1f8025e27eb3eaed2d3ee33bb2a7eb58aaaaa23e0c0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2147d676c76138397bb682d26420a182546529d2c7d58da50740c09618d6187d
MD5 a6dadf2b7e69ed53b614954796b27485
BLAKE2b-256 62c10f13f9166d51c36eee17ef1c23ce342e69f86488c6c6deba318f357f0931

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a58c0f03d18f056b71e8142c10b366284d5784706b1a80049f2a9c67ffa4acb7
MD5 70b7cb225d420a17234eb19ee79acc0c
BLAKE2b-256 fbea859fd9f0ab1e0b780af3a6a7d2eafa80475c49b839c831c2cf99afe509e3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 34292bfa76a8cb438837236e01217be717cd926155e9be4210dab9cd4ff75eb8
MD5 2b04ec2de6d063be11c0869cc14bbd81
BLAKE2b-256 d02238f6b641f3715e98898fb697e19597e0352e357e9c2b8b921c1c437056a4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 647b9b0f9ccf2153bb551172ccf9e2b9b6da542e8bc26e717a41d65b812a0549
MD5 30a6108ca2894717c3380a0fae02477e
BLAKE2b-256 3ec3104d400a559edd9fadb536702b4a63a6d5e9d2dad828df9a996fef33903d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0e0f67abe718e38e4e714a6f362a8b57b2a7bcf7859a6c6f49e9b6b9c84984c2
MD5 07fb59f838943db9a7fb7c2d94e526f9
BLAKE2b-256 cdf72047181099baabc27b4b12eff9f04ea029cfce1d88cba1139608412593ee

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b60e43adc37a2f056b1006a95b2e86532b7ce4f9d12456eef9e079771ae3a62a
MD5 b2063069c3f26424e9a303f8952cc0ea
BLAKE2b-256 a52d8acd0a96047c34c7d7aed45d7b7ee9e9a6395b1afb24f7f82a8dc7bd4535

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bdf3990bb635320dafe13450b4942ef5c42c507ffb9379a30e54e95fb12f5a51
MD5 b44c951cbc1f03f3f263b5b8ca7d3d7e
BLAKE2b-256 d41f8e87414b5b0dde26a249e9be50e195bb8ecbf66dcf88afd8ea9244dc71de

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5715dd62434e606f6109e2c8e0cf619980b3d0be904bc6f0301a4579e10017c7
MD5 3771d2cbd2c280df401b125bbb856377
BLAKE2b-256 bb638de1d073eed433b68c845ba39d8f0d7064e2bc3aeacdd75dd32bce8f44f6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c9e1b8f0e3ed0c9b7acbec9dc65176d81dbe8cee9d3786343f2d55fda01c1c18
MD5 e0f0d0f51ea9fd022896fc7b341c7321
BLAKE2b-256 852925acd6f938ce5df078af78c07d04a6972b0bbd224e3fb55458c0c788e2f0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 734a4c1bed5229bce42869e7f89db4ea6c579755f6839d2c69d691278ddb312f
MD5 d81866e8da758bb6cd5f572ee29d37c7
BLAKE2b-256 d972d94e233013759b7f329d6adcc523efd50c526c438498c29f7c17c98d551b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d9bb6326160d18d78553d34ae61371ee2557faba8879526b03622f9a2c6989b5
MD5 d583bbfe8008fd68b27c93f45ad3bbcd
BLAKE2b-256 b8e43128baace648284cb83703a67ef2af195e02475fc94d165c1da7c9ac2ae4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 def45c022798fcd6e54b97b049bd05d8a8b24a81503eea7ac4f4693af37f035a
MD5 cff185bf3f1f849baaa2e6c3d5ec2617
BLAKE2b-256 b2e64c40133222767d8a1289c7c01916479fd8b0ab3b0ea35731c9059d29023e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for reconcile_text-0.11.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5ef860715fa001ea352ce4446eae6eb42722aec8956c805a8555ad12de75fc6b
MD5 83697bc3034425f8e2e1ef9b44e7f2ba
BLAKE2b-256 21a2a1fd57cc78ce80a16d9840eba12b13feeef4b8564c9435404eeff3772b46

See more details on using hashes here.

Provenance

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