Repository navigation
Releases: Zack-Will/interleaf
Release list
Interleaf 0.3.0
Images: ghcr.io/<owner>/interleaf:6.3.0, ghcr.io/<owner>/git-bridge:6.3.0,
built on ghcr.io/<owner>/interleaf-base:6.3.1; also published as
docker.io/zackwill/interleaf:6.3.0, docker.io/zackwill/git-bridge:6.3.0 and
docker.io/zackwill/interleaf-base:6.3.1.
Based on Overleaf Community Edition 6.3.1 (public commit e039ad26c5 plus the
6.3.1 hotfix patches), up from a pre-6.2.1 main snapshot. The image now runs
Node.js 24 and TeX Live 2026. No database migrations; upgrading is a change of
config/version after the usual backup.
Changed
- MCP and git-bridge writes send their origin in the shape history stores it
in; the 6.3 services validate origins strictly and rejected the extra
revert/mergefields. editor-core's origin schema knows themcpkind. - document-updater: the tracked-change write moved from
POST .../doc/:doc_id
withtrack_changestoPOST .../doc/:doc_id/suggest, built on upstream's
own trackedsetDoc. Adding a comment and rejecting changes keep their
routes, now served fromReviewApiController. - document-updater's
setDocaccepts an origin object assourceagain; 6.3
only accepted a string, which madeedit_fileandrevert_tofail. - The image is built on
interleaf-base, built in this repository from
upstream'sDockerfile-baseplus the TeX Live collections
(build-image.ymlwithbuild_base), because upstream no longer publishes
its base image. A release now replaces only the application layers.
Internal
- Fewer edits to upstream files, to make upstream merges smaller: module
settings live inservices/web/config/settings.interleaf.js, the review
panel's track-changes setter moved into thereviewmodule, and the history
panel styles moved intoagent-sync.scss. No behaviour change. See
doc/upstream-sync.md.
Fixed
- Agent and git-bridge writes no longer open the "Document updated externally"
dialog in an editor that has the document open. The editor checked
meta.source, while these writes carry their origin asmeta.origin. - The first comment or suggestion from the review agent in a project shows the
agent's name in open editors instead of "Deleted user": adding the agent as a
collaborator now tells open editors to reload the member list.
See doc/upstream-sync.md for how the fork tracks upstream releases and doc/deploy-toolkit.md for building and deploying.
Interleaf 0.2.1
Images: ghcr.io/<owner>/interleaf:6.2.6, ghcr.io/<owner>/git-bridge:6.2.6,
also published as docker.io/zackwill/interleaf:6.2.6 and docker.io/zackwill/git-bridge:6.2.6.
Fixed
server-ce/config/env.shno longer aborts container start underset -uwhen
OVERLEAF_REDIS_PASS(or the web API credentials) are unset. After upgrading,
theOVERLEAF_REDIS_PASS=workaround can be removed fromconfig/variables.env.- Live paragraphs newer than a background pass's snapshot survive the layout
and move to its new placements. Base PDFs are prefetched and normally switch
after one second of quiet, including extra live rows that fit on existing pages.
Visible page pixels and live overlays stay in a separate freeze layer across
document and zoom resets until each replacement page renders. - Missing font glyphs produce deduplicated live warnings with preamble guidance
and editor gutter markers on affected lines. - The compile dropdown has a Live preview section with checked On/Off choices;
English strings are registered in both locale catalogs.
Changed
- Layout max-wait adapts to twice the last pass duration, with a 3000 ms floor.
rtex and its children default to nice 10 and at most two allowed CPUs when
taskset is available. Each setting is configurable. - Viewerless live sessions now stop after 120000 ms (two minutes).
- The image workflow also pushes to Docker Hub when the
DOCKERHUB_USERNAMEand
DOCKERHUB_TOKENsecrets are set;mirror-dockerhub.ymlcopies an existing
GHCR tag there without rebuilding.
Interleaf 0.2.0
Images: ghcr.io/<owner>/interleaf:6.2.5, ghcr.io/<owner>/git-bridge:6.2.5.
Opt-in LuaLaTeX live preview, with collaborative paragraph updates and complete
background page passes. rtex is pinned to release interleaf-0.0.3-2.
Added
- Live preview in the Recompile menu, PDF paragraph overlays, source gutter
markers, live diagnostics, collaborator outlines and independent detached
preview connections. Normal Recompile and PDF downloads continue through CLSI. - A gated web module, separate supervised rtex service and shared protocol
library, with private project snapshots and project-bound opening/access tokens. - Session budgets, viewerless LRU eviction, idle cleanup, crash recovery and Retry.
- Chinese
ctexbook/Fandol acceptance, real-paper memory measurements and operator
guidance indoc/live-preview.mdanddoc/deploy-toolkit.md.
Fixed
- Snapshot materialization rejects unsafe paths and symbolic links, bounds file
counts/downloads, and replaces source files without changing retained hard links. - A trusted LuaLaTeX wrapper reasserts paranoid input/output and disabled shell
escape after rtex's native environment overrides. - Preview sockets enforce origin, connection, incoming-message and heartbeat
limits; PDFs and glyphs require fresh authorized requests and prevent stale caches. - Preview nginx preserves public Host ports for same-origin WebSocket connections
through proxies using nonstandard ports. - Source-service outages report Failed without restart loops, and startup removes
disposable session directories left by an earlier service process. - Deployment docs: CE toolkit installs must override
GIT_BRIDGE_API_BASE_URL
tohttp://sharelatex/api/v0/; the toolkit's default port 3000 does not serve the
git-bridge API on CE, which made every clone fail with 403.
Interleaf 0.1.1
Images: ghcr.io/<owner>/interleaf:6.2.4, ghcr.io/<owner>/git-bridge:6.2.4.
MCP usability and safety fixes from an external evaluation of the tools
through the claude.ai connector (issue ids H1–H3, M1–M10, L1–L5 refer to that
evaluation).
Breaking
write_filesrefuses to overwrite an existing file unless the call
passesoverwrite: true(H3). New files and deletes need nothing;
base_versionkeeps its conflict check. The error code isfile_exists.
revert_to,merge_branchand git pushes are not affected.read_fileleaves pending suggestions out by default (M8). The text
reads as if every pending tracked change were rejected; pass
include_suggestions: truefor the live text, whichedit_fileworks on,
and the list of pending suggestions.read_fileno longer returnslines(L4); the numberedcontentstring
is the one content form.write_filesreturnsproject_version;versionis kept as a deprecated
alias and will be removed in the next release (M7).diffwith apathreturns a unified diff string instead of project-history's
internal parts; without a path it lists only changed files (L1).diff_branchlists only changed files (unchanged_countcounts the rest);
merge_branchnames the files it writes or deletes instead of returning
their merged content (L3).list_historyentries have a new shape shared by labels and updates (L2).comments_affectedreports a comment shifted along its own line as
unchangedrather thanmoved(L5).- Error results have a multi-line text (
error: <code>…next_action: …)
instead of the bare message. archive_branchneeds write access to the parent project, not just read.
Fixed
replace_sectionstops at the back matter:\appendix,
\bibliographystyle,\bibliography,\printbibliography,
\begin{thebibliography}, an appendix\inputand\end{document}are no
longer replaced with the last section (H1). Every edit reports
replaced_lines; a replacement that removes at least 5 more lines than it
adds, and at least twice as many, carries awarning.list_historyreturned updates without versions, time or users, because it
read the wrong field names from project-history (L2).- A read-only collaborator could archive another user's branch.
Added
- The
editsschema ofedit_fileandsuggest_editsis a union ontype,
one variant per edit type with its own described fields, and the tool
descriptions carry an example of each (H2). - New edit type
insert_at_anchorwithside: "before" | "after"(H2). - Edits are validated before any runs; an unknown type lists the valid ones,
a missing field is named, and every error names the failingedits[i]
(edit_index) (M1, M4). An out-of-rangeoccurrencesays how many matches
exist. replace_sectionwithoutlevelmatches any heading level; several matches
are an error listing each heading's level and line (M2).new_textmust
start with the heading line, as documented (M3).- Version conflicts carry
current_versionandchanged_paths, the files that
changed sincebase_version(M5). - Every write tool returns
project_version, including the comment and
suggestion tools (M7). add_commentandreanchor_commenttakeoccurrence(from 1) and use
start_line/end_linenext toexactorstart_with_ellipsisto narrow
the search (M9).- Branch tools take a branch name together with
project; a project name
where an id belongs lists same-named projects ascandidates(M10). list_projectsreturnslast_updatedand sorts newest first.- Every error's text carries its code, message, details and
next_action,
because some clients show the model only the text of a tool result. - Every timestamp in a tool result is ISO 8601 (L4).
- Every tool description says what it returns;
agentandact_as_agentare
described.
Not changed
- The write lock stays per project (M6); conflicts now name the changed files
instead.
Interleaf 0.1.0
Interleaf is Overleaf Community Edition with an AI agent as a first-class collaborator. This is the first release.
What it adds
- A built-in MCP endpoint at
POST /mcp, stateless and authenticated with a personal access token. An agent reads and writes files, follows the history, opens and merges branches, reads review comments and replies to them, and offers edits as tracked changes for a person to accept or reject. - Comment-driven collaboration. The review panel exists in the Community Edition source but is switched off; this turns it on, adds the web routes it needs, and gives an agent its own service account so a thread reads as a conversation between named participants. Comments survive rewrites of the text they anchor to.
- A readable change history. Every agent write carries the client name and the message it sent, shown under the author line. Labels stay what they are upstream, milestones a human chose, rather than one per machine edit.
- Git access on Community Edition. The web half of the official Java git-bridge, written from scratch; the bridge itself is upstream's MIT-licensed service, built from source in this repository.
- One-way GitHub backup. Link a project to a repository and its history is mirrored there on a schedule or on demand, fast-forward only, tokens encrypted at rest.
- TeX Live scheme-full in the image, installed in groups so the layers stay pullable on a slow link.
Images
| Image | Contents |
|---|---|
ghcr.io/<owner>/interleaf:6.2.3 |
Community Edition plus the modules above, with full TeX Live |
ghcr.io/<owner>/git-bridge:6.2.3 |
Upstream's MIT-licensed Java bridge, built from source |
Image tags follow the Overleaf release the image is built from, because the Overleaf Toolkit requires a version-shaped tag and derives the bridge tag from the same string. Project releases are tagged interleaf-vX.Y.Z in git.
Installing
doc/deploy-toolkit.md has the full runbook, including the one patch the Overleaf Toolkit needs before it will run git-bridge outside Server Pro. doc/agent-sync-usage.md covers tokens, the MCP tools and the comment workflow.
Fixes carried in this build
Two bugs that stock Community Edition shares: the production image installs only runtime dependencies, so a package imported at runtime must not sit in devDependencies; and server-ce/config/settings.js assigned the link-sharing encryptor options onto module.exports before the file replaces it, so OVERLEAF_INVITE_TOKEN_SECRET never took effect.
Relationship to Overleaf
An independent fork of overleaf/overleaf, not affiliated with or endorsed by Overleaf. No Server Pro source was used. Licensed AGPL-3.0, the same as upstream.