- JavaScript 32.5%
- Go 31.8%
- TypeScript 30.8%
- SCSS 2%
- CSS 0.8%
- Other 2%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
- specs/federation-gate.test.e2e.ts 7/7: B OIDC discovery+JWKS live (ES256 keystore bootstrap), S2S LOCKED envelope, invite-preview anchor-required degradation, RP-callback auth-denied envelope, admin peers/keys/audit surface (TOFU window), non-admin Restricted pin, export wizard mounted, OIDF-leaf-not-mounted pin, A https-gate 500 pin - compose: FEDERATION_ENABLED/EXPORT_ENABLED on the overleaf service - instance B (ol-e2e-overleaf-2 :7421, https siteUrl, own mongo/redis) stands up the two-instance surface for the wire legs - full RP dance/S2S/export-bundle legs documented owner-gated (HTTP-only instances vs the https-only OIDF layer); Go live tests SKIP per house pattern; ebb76488 annotated with the bundle-reachability context |
||
| .github | ||
| .pi/todos | ||
| .yarn | ||
| build-images | ||
| cmd | ||
| develop | ||
| dockerfiles/cypress | ||
| docs | ||
| frontend | ||
| go | ||
| hooks | ||
| images | ||
| junk | ||
| libraries | ||
| locales | ||
| public | ||
| references | ||
| test-results | ||
| tests | ||
| toolkit | ||
| tools | ||
| .editorconfig | ||
| .gitignore | ||
| .pnp.register.mjs | ||
| .yarnrc.yml | ||
| CONTRIBUTING.md | ||
| CREDITS.md | ||
| docker-compose.debug.yml | ||
| docker-compose.yml | ||
| go.mod | ||
| go.sum | ||
| GO_CUTOVER_PLAN.md | ||
| GO_SERVICES_INTEGRATION.md | ||
| IMPROVEMENTS_2026-09-16.md | ||
| LICENSE | ||
| Makefile | ||
| OPEN_QUEUE_PROGRESS.md | ||
| package.json | ||
| README.md | ||
| remember.md | ||
| SETTINGS_SERVICE_PLAN.md | ||
| tsconfig.backend.json | ||
| WEB_GO_PLAN.md | ||
| WEB_GO_STATE.md | ||
| yarn.lock | ||
Why OlliTeX? • Features • Getting started • Contributing • License
OlliTeX
OlliTeX is a free, self-hostable, real-time collaborative authoring platform for LaTeX — and, since 2026, for Typst too.
It is a fork of Overleaf Community Edition (open source, GNU AGPL v3), extended and maintained as a complete product. Overleaf runs a hosted commercial service at www.overleaf.com; OlliTeX contains no subscription, billing, or paid-plan components, and no advertising of premium services — it is a fork, full stop.
Why OlliTeX?
The name is a small piece of etymological wordplay that sits exactly on the two meanings of latex.
Olli — from the Olmec ("Olmeco") civilization of Mesoamerica, the "rubber culture": the people who, around 1500 BCE, first tapped the Hevea rubber tree, vulcanized the sap by mixing it with the juice of Ipomoea alba, and made the legendary bouncing rubber ball of the Mesoamerican ballgame. In Nahuatl the word for rubber is ātlātl — literally "water of the water" (ātl = water), because the milky white sap that oozes from the cut bark looks like water. The Olmecs were, in short, the first latex engineers.
-TeX — from TeX, Donald Knuth's typesetting system, and — by extension — LaTeX (La + TeX), Leslie Lamport's macro layer on top of it. This is the second meaning of "latex": the typesetting macro package, where a few typed symbols render as a full equation.
So OlliTeX = the Olmecs' rubber, meets TeX's precise ink. A document system that behaves like the Olmec ball itself — resilient, stretchy, and capable of springing back after a hard hit — while delivering the accuracy only a real typesetting engine can: rubber typesetting, with a Mesoamerican accent.
And, as a practical wink to every student who has ever watched a 40-page PDF compile: the OlliTeX compile queue does not bounce — it flows, like sap, like water, like ātlātl.
Features
Everything in Overleaf CE (real-time collaborative editing, track changes and comments, sandboxed compiles with TeX Live image selection, template gallery, import/export, Git & GitHub sync, SAML/LDAP/OIDC authentication, advanced administrator tools) plus the OlliTeX-specific stack:
- Typst as a first-class format — create, edit, and compile Typst
documents alongside LaTeX: a dedicated
clsi_typstcompile service, Typst project templates (blank, article with bibliography, worked example), syntax highlighting and formatting in the source editor. - The integrated control hub at
/hub— one pane for everything: the user workspace (projects, tags, templates, library, sessions, settings) and the full admin surface (users, projects, active sessions, instance stats, site settings, LLM administration, templates) in a single Mantine-styled console with hash-addressable leaves. - Renovated editor — a modern Mantine design-system layer
(
/editor/:id, dual-run identical to the classic/Project/:idURL), command palette, rail/toolbar redesign, theme tokens. - AI features, admin-gated and BYO — LLM-powered chat, inline completion, and compliance review; bring-your-own provider (OpenAI-compatible endpoints, per-user) with per-feature rate limiting (instance rate, daily token budgets) on a single hub page; grammar checking via LanguageTool and/or LLM; an optional self-hosted LanguageTool service.
- Extended collaboration tools — Zotero integration, Mendeley, reference
search & pick, equation editor, symbol palette,
TikZ / SVG / Draw.io diagram files, document import (
.docx,.md) and export (.docx,.md,.html), WebDAV/Nextcloud sync, Dropbox, sign-up page. - Markdown visual editor —
.mdproject files with a block-based visual editor (headings, lists, tables, links, code blocks) beside the CodeMirror 6 code mode, following the editor theme; new files start empty (no LaTeX boilerplate). - WakaTime, self-hosted — per-user editing-time tracking relayed to a
local Wakapi instance (browser → OlliTeX → local
Wakapi; never wakatime.com), admin master switch + per-user keys
(rate-limited,
200/1hdefault); users enable it under My settings → WakaTime. - In-browser Python runner —
.pyfiles execute through bundled Pyodide (CPython 3.12 / Pyodide 0.29.3) in a browser worker, offline, with an admin package allow-list — no server-side Python. - SSO federation — OIDC provider + relying-party flows for cross-OlliTeX-instance identity and project sharing (PKCE + redirect_uri pinned to registered URIs + consent screens), alongside the classic SAML/OIDC/LDAP login slots and the multi-provider manager.
- Monitoring — self-hosted Grafana (admin-gated same-origin proxy, anonymous access off) + Prometheus with bundled instance-stats alert rules and a token-gated alert webhook relay; the hub's Instance statistics leaf shows the core time series.
- Operations toolkit — environment-driven configuration
(
server-ce/config/env.sh+toolkitseed), a central Makefile entry point, an AGPL-compliant rebrand with provenance kept visible (see the localBRANDING.mdhandoff notes).
Important
Compiles are always sandboxed. OlliTeX enforces the sandboxed (Docker-based) compile runner: every compile — LaTeX and Typst — runs in an isolated compile container, so users can never read or write the server container's filesystem, network, or environment while compiling. The local (in-container) compile path and the local TeX Live installation have been removed from the server image.
- Default compile image:
olpsint/texlive-full:2026.1— TeX Live 2026, built from the ayaka-notestexlive-full2026 recipe (credit kept inCREDITS.md); override with theTEXLIVE_IMAGEenvironment variable, the site-setting (Compilation → Sandboxed compiles), ortoolkit/lib/images.env.- The server needs access to a Docker socket (or rootless Docker) so the compile containers can start — the same mechanism that runs the Typst compile containers. Mounting the Docker socket is the standard way to run sandboxed compiles; keep the Docker host itself trusted, and note the bundled seccomp profile (embedded in the Go
clsitexbinary via//go:embed; the profile source isgo/services/clsitex/config/seccomp/clsi-profile.json, 179 syscalls incl.faccessat2for the 2026 toolchain) restricts the compile containers.
Getting started
Build & run
cd server-ce
make all # builds sharelatex/sharelatex:ext-6.3.0-port (+ TeX Live base image)
The base image Dockerfile builds the
sharelatex/sharelatex-base:* image (dependencies + TeX Live) and the
application image Dockerfile builds the
application image on top. (All image Dockerfiles live under images/,
next to the builder images; make all in server-ce/ drives them.)
Configuration lives in server-ce/config/env.sh
(plus toolkit seeds under toolkit) — one place for site name, URL,
auth providers, LLM admin gates, compile images, and so on.
A ready-to-run local deployment (nginx + overleaf + mongo + redis) lives in
develop/docker-compose.yml.
Development
- Central entry point:
make help(targets:build,unit,hub,lint,format,ci,selftest,release,deploy-test,image,hooks-install). - The production web build is
cd services/web && yarn webpack:production— this is the canonical gate.yarn webpack:devstarts the dev server (since 2026-09 the bareyarn webpackwarns and runs the production build; previously it was the misnamed dev server — IMPROVEMENTS P0.4). - In-repo unit/integration suites:
cd services/web && yarn test:unit(Vitest, all projects) or the rootmake unit. ext_explain.mddocuments the extension surface (features, settings, module wiring) of the fork.BRANDING.mddocuments the OlliTeX rebrand and how to swap the logo set (final art belongs intools/logo/and the referenced app paths).
Testing
- End-to-end suite:
tests/e2e— a disposable, self-seeding stack (scripts/stack-up.sh→playwright test→scripts/stack-down.sh) covering smoke, admin site settings, LLM/BYO, grammar, keybindings, notifications, Zotero, Typst compiles, and a legacy↔hub parity harness (every removed legacy page is asserted to redirect and its capability to exist on the hub; seetests/e2e/parity/check.mjs). - The suite's structure was inspired by the testing practices of Forgejo.
Documentation
The canonical wiki is docs/wiki/ — user guide (hub, editor,
Markdown + diagrams, WakaTime, settings), admin guide (users, projects, site
settings → integrations/services/storage/compilation, LLM, WakaTime relay,
Python runner, instance stats + Grafana, SSO + federation, operations), and
installation (Docker, configuration, upgrade, security & sandbox, TeX
Live 2026, toolkit). Every page ends with a Verified against:
provenance line, and the credential leak guard (no keys, secrets, or personal
data in docs or screenshots, ever) is a hard rule — see
docs/wiki/installation/04-security-sandbox.md.
- Wiki —
docs/wiki: user guide, admin guide, and installation docs, with auto-generated screenshots. A data-safety gate (link integrity + secret/private-e-mail-domain scan + PNG metadata scan) fails any run where something it should not be in the wiki is in the wiki; the audit receipt is atdocs/wiki/AUDIT.md.- Regenerate screenshots (needs the e2e stack running):
make wiki-shots. - Docs-only gate (CI):
make wiki-check.
- Regenerate screenshots (needs the e2e stack running):
- Backlog:
IMPROVEMENTS_2026-09-16.md(P0 first: admin API authorization pass, then SMTP unblock). - Plans (untracked local docs):
BRANDING.md,ext_explain.md,TYPST_INTEGRATION_PLAN.md,docs/WIKI_PLAN.md, and the round plans in the repo root (see.gitignorefor the list).
Contributing
OlliTeX is a community fork; contributions are welcome. Please read
CONTRIBUTING.md, keep the AGPL notices intact, and run
make ci before opening a pull request.
Authors
- The Overleaf Team — Community Edition
- yu-i-i — Extended CE features; adapted code
listed in
CREDITS - davrot — the 6.3.0 port, the OlliTeX extension stack, and maintenance of this fork
License
The code in this repository is released under the GNU AFFERO GENERAL PUBLIC
LICENSE, version 3. A copy can be found in the LICENSE file.
Copyright (c) Overleaf, 2014-2026.
Copyright (c) @yu-i-i, 2024-2026, for the Extended CE features.
Copyright (c) @davrot, 2025-2026, for the 6.3.0 port and extensions.
Portions of the code are derived from other open-source projects; see
CREDITS.
This project is supported by the University of Bremen.