Skip to main content

Compare text, and produce human-readable differences or deltas which look like track changes in Microsoft Word.

Project description

Redlines

Repository banner image PyPI - Version GitHub Release Date - Published_At GitHub last commit (by committer) PyPI - License

Redlines compares two strings/text and produces structured output showing their differences. Changes are represented with strike-throughs and highlights, similar to Microsoft Word's track changes. The output includes detailed change information, positions, and statistics for programmatic use.

Supports multiple output formats: JSON (default, with structured change data and statistics), Markdown, HTML, and rich (terminal display).

Quick Start

# Install
pip install redlines

# CLI: Compare two texts (outputs JSON by default)
redlines "The quick brown fox jumps over the lazy dog." "The quick brown fox walks past the lazy dog."

# Python: Compare and get markdown
from redlines import Redlines
test = Redlines(
    "The quick brown fox jumps over the lazy dog.",
    "The quick brown fox walks past the lazy dog.",
    markdown_style="none"
)
print(test.output_markdown)
# Output: The quick brown fox <del>jumps over </del><ins>walks past </ins>the lazy dog.

Supported: Python 3.10 - 3.14 (Python 3.8 and 3.9 support dropped)

Optional dependencies:

  • pip install redlines[nupunkt] for advanced sentence boundary detection (Python 3.11+, handles abbreviations, citations, URLs)
  • pip install redlines[levenshtein] for additional statistics

Usage

Python API

The library contains one class: Redlines, which is used to compare text.

Basic comparison:

from redlines import Redlines

test = Redlines(
    "The quick brown fox jumps over the lazy dog.",
    "The quick brown fox walks past the lazy dog.",
    markdown_style="none"
)
assert (
    test.output_markdown
    == "The quick brown fox <del>jumps over </del><ins>walks past </ins>the lazy dog."
)

Multiple comparisons with one source:

from redlines import Redlines

test = Redlines("The quick brown fox jumps over the lazy dog.", markdown_style="none")
assert (
    test.compare("The quick brown fox walks past the lazy dog.")
    == "The quick brown fox <del>jumps over </del><ins>walks past </ins>the lazy dog."
)

assert (
    test.compare("The quick brown fox jumps over the dog.")
    == "The quick brown fox jumps over the <del>lazy </del>dog."
)

JSON output with structured data:

from redlines import Redlines

test = Redlines(
    "The quick brown fox jumps over the lazy dog.",
    "The quick brown fox walks past the lazy dog."
)

# Get JSON with changes, positions, and statistics
print(test.output_json(pretty=True))

CLI

Basic usage (outputs JSON by default):

redlines "old text" "new text"
redlines file1.txt file2.txt --pretty

Output formats:

redlines text "source" "test"              # Rich terminal display
redlines markdown file1.txt file2.txt      # Markdown output
redlines stats old.txt new.txt             # Statistics only

Run redlines --help or redlines guide for the Agent Integration Guide. See also: redlines-textual.

Advanced Features

Custom Processors

Use NupunktProcessor for sentence-level tokenization with intelligent boundary detection:

from redlines import Redlines
from redlines.processor import NupunktProcessor

processor = NupunktProcessor()
test = Redlines("Dr. Smith said hello.", "Dr. Smith said hi.", processor=processor)

Use NupunktProcessor for: Legal/technical documents with abbreviations, URLs, citations, decimals Use WholeDocumentProcessor (default) for: Simple documents, speed-critical tasks (5-6x faster), paragraph-level granularity

See demo comparison for benchmarks.

For AI Agents & Automation

🤖 Using with AI coding agents? See the Agent Integration Guide for JSON schemas, automation patterns, error handling, and runnable examples.

Documentation & Resources

Full Documentation: https://houfu.github.io/redlines

Example Use Cases:

License

MIT License

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

redlines-0.6.1.tar.gz (301.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

redlines-0.6.1-py3-none-any.whl (25.5 kB view details)

Uploaded Python 3

File details

Details for the file redlines-0.6.1.tar.gz.

File metadata

  • Download URL: redlines-0.6.1.tar.gz
  • Upload date:
  • Size: 301.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for redlines-0.6.1.tar.gz
Algorithm Hash digest
SHA256 e5db4886b9a1b4d334d02ff7f03b8e702bbc40873ee222fe34b0054b4f55e836
MD5 9388813214e2d1ae258ac10490103002
BLAKE2b-256 07683b222458300a3aa0baf45dcc508ecaaa5dd5ab2d25e6d550699f392fdd3f

See more details on using hashes here.

Provenance

The following attestation bundles were made for redlines-0.6.1.tar.gz:

Publisher: python-publish.yml on houfu/redlines

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file redlines-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: redlines-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 25.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for redlines-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 acf56b0f4f2c68b328b1c0890e5808fb34eaac89d199a0c7e4a5f4957c40c13a
MD5 03207cc46bdbb125e24d4b082208c360
BLAKE2b-256 7fa1fd575a81a363d8ef66997eaca21973ea98468ae6d8c8886f8d69472c3bbc

See more details on using hashes here.

Provenance

The following attestation bundles were made for redlines-0.6.1-py3-none-any.whl:

Publisher: python-publish.yml on houfu/redlines

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