Conversation
Starlight pins the header and the sidebar to the viewport with position: fixed and inset-inline-start: 0, and hands the table of contents container half of whatever width is left over. The table of contents is left aligned inside it, so on a wide monitor all that growth became empty gutter on the right while the sidebar still hugged the far left edge. The design widths total about 90rem, so past that the shell now stops and centres. A max-width cannot do this, because a fixed element resolves against the viewport and ignores an ancestor's width, so the gutter is computed once as a custom property and applied to each pinned element. The token sits with the other structural properties rather than in a theme block, since layout must not depend on the colour scheme. Also removes the second caret on the theme and language pickers. Starlight already draws one as a sibling of the select, and opting into appearance: base-select made the browser draw ::picker-icon on top of it. The browser's is hidden and the rotate-on-open feedback moves to Starlight's icon, which matches the glyphs beside it.
A visitor can now write Texchanges markup and watch the same source
render as a review, as the final document, and as the original, without
installing anything.
The preview is drawn in JavaScript rather than by a TeX engine. A
WebAssembly engine is possible but costs several megabytes plus
on-demand CTAN fetches and a package server, which is a heavy standing
cost for a documentation site; the package's pitch, one source rendering
three ways, needs no compiler to show.
That makes the renderer a second implementation of behaviour
texchanges.sty defines, which is the real risk here, so it is held to
the same expectations as the compiled output: a new playground case runs
it over tests/review.tex and tests/features.tex and asserts the tokens
each mode must and must not contain. Restoring a wrong rule makes it
fail, so the guard is not vacuous. The mode and status table is
transcribed from \tx_render:nn rather than assumed, including the
detail that review mode shows accepted and rejected changes as settled
prose and only marks up pending ones.
Open in Overleaf carries the package with the snippet. Overleaf rebuilds
its TeX Live once a year and Texchanges reached CTAN after the last
freeze, so \usepackage{texchanges} alone would fail there. The snippet
writes the package out with filecontents*, which needs nothing from
Overleaf beyond a standard kernel. Verified by compiling the generated
payload under -jobname=output in a directory with no texchanges.sty and
no TEXINPUTS. The copy under website/public is made at build time and
gitignored so it cannot drift.
The layout splits on a container query rather than a viewport query,
because the column around the component can still be narrow when the
window is wide.
I wrote that Overleaf could not have Texchanges because CTAN received it after the yearly TeX Live freeze. That is wrong. TeX Live's network distribution tracks CTAN continuously, and TeX Live 2026 ships texchanges 0.2.4, verified by reading the package out of tlnet. Bundling is still right, for a different reason: the installed version is whatever CTAN held when the distribution was built, which is not the version the site documents. Sending the package along keeps the playground and the compiled result in agreement, and a project-local file takes precedence over the installed one.
The guide was written by copying typst's posture, including its outright ban on AI-implemented contributions. That posture suits a large project whose maintainers are flooded with drive-by pull requests. It does not suit a package maintained by one person that would like more help than it gets. The LaTeX projects this package sits beside write plainly and without any AI policy at all: latex3/latex3 is 46 lines and opens by thanking the reader for considering a contribution. This follows that register, keeping the parts that carry weight and dropping the parts that read as conditions a submission is graded against. The compatibility rules stay, because they are load-bearing: the five public commands are in released documents, the \txreplace argument order is fixed, the short aliases must not overwrite another package's command, and compiled output does not belong in the repository. The AI section now asks for the thing that can actually be checked. A contributor should understand the change, be able to say why it is right, and write the pull request description themselves. No detector for AI-written code exists, so a ban would have been an honour system whose only real enforcement was a contributor failing to defend their own patch, which review catches anyway. The pull request template said the same thing inside an HTML comment, so it never rendered; it now matches.
Simplify the contribution guide and drop the AI ban
Live playground, wide-desktop layout, single caret
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Website and documentation only. Nothing here is in the CTAN archive:
CONTRIBUTING.mdis not shipped and the playground is website-only, so this cannot affect the 0.3.0 submission.Held back until the release was settled. Both merged cleanly onto the current
develop, and the full suite is green at 22 cases including the newplaygroundcase and the rewrittenversionssweep.