texchanges keeps tracked changes in the LaTeX source instead of in editor chrome. You write \txreplace{old}{new}, \txadd{...}, \txremove{...}, and \txcomment{...} inline, and the same file compiles three ways: as a marked-up review, as the accepted document, or as the original. It is on CTAN as version 0.3.0 and installs with tlmgr install texchanges.
One source, three documents
The mode is a package option, so nothing forks.
\usepackage[review]{texchanges} % or final, or original
\txreplace{old text}{new text}
\txadd{new text}
\txremove{old text} 
Review mode renders the markup and the report. Final mode resolves pending changes to the proposed text, and original mode recovers what was there before the review started.


Changes carry decisions
Every change can name an author, a document-unique ID, a reviewer note, and a status of pending, accepted, or rejected.
\txdefineauthor[name={Phuc Nguyen},color=orange]{phuc}
\txreplace[
author=phuc,
id=R12,
comment={Clarify this claim.},
status=pending
]{human-like behavior}{O\&M-aligned behavior} Because the decision lives in the source next to the text it applies to, it survives later revisions. latexdiff compares two snapshots and produces a diff that has to be regenerated whenever either side moves.
Reports and resolution
\txlistofchanges generates a list or a summary, filterable by change type, status, and author, with hyperlinks back to each change when hyperref is loaded. Report titles and status names are localized through babel for English, British English, German, French, Italian, and Vietnamese.
When a review is finished, the texchanges-merge CLI flips statuses or strips the markup back to clean LaTeX, in place or to a new file, with a dry run available first. The CLI is a separate implementation of the markup grammar and never invokes TeX, so it stays fast and predictable. It uses only the Python standard library, which is what lets TeX Live ship it as a single script.
Coverage
It runs on pdfTeX, XeTeX, and LuaTeX, verified in CI against TeX Live 2023 through the current release, which is the range Overleaf users actually get. An opt-in compatibility layer accepts the changes package commands so an existing manuscript keeps compiling during a migration.
The roadmap tracks what is planned before 1.0.0, including JSONL review manifests, external decision files, Typst interoperability, and a language server.