TeXbrain is een gratis, open-source LaTeX-editor die volledig client-side in de browser functioneert, zonder dat er een backend of server nodig is. De applicatie maakt gebruik van een WebAssembly-port van pdfTeX (SwiftLaTeX) voor de compilatie van .tex-bestanden naar PDF en hanteert een privacy-first benadering zonder accounts of tracking.
Belangrijkste functionaliteiten:
- Client-side compilatie: Documenten worden lokaal gecompileerd; packages worden on-demand opgehaald van TeX Live-mirrors en lokaal gecached.
- Git-integratie: Volledige ondersteuning voor git-operaties (clone, commit, push, pull) via
isomorphic-git.
- Bestandstoegang: Directe lees- en schrijftoegang tot lokale projectmappen via de File System Access API (voor Chromium-browsers).
- Geavanceerde Editor: Gebouwd op CodeMirror 6 met syntaxhighlighting, autocomplete en een snippet picker.
- Offline modus: De editor blijft functioneel zonder internetverbinding zodra de initiële assets en benodigde packages zijn geladen.
Technische beperkingen: De editor ondersteunt uitsluitend pdfTeX (geen XeTeX of LuaTeX) en mist volledige BibTeX/Biber-ondersteuning. Bovendien is directe maptoegang beperkt tot Chromium-gebaseerde browsers.
TeXbrain
Probeer het nu: tex.swimmingbrain.dev
Ik heb dit gebouwd omdat ik klaar was met het betalen voor functies die gratis zouden moeten zijn. Vorig jaar schreef ik mijn scriptie in LaTeX en besteedde ik meer tijd aan het worstelen met de tooling dan aan het daadwerkelijke schrijven. Online oplossingen plaatsen git-synchronisatie vaak achter een betaalmuur, terwijl lokale installaties vaak problemen geven bij het wisselen tussen verschillende machines. Ik wilde iets dat gewoon werkt: een browser openen, LaTeX schrijven en een PDF krijgen.
Wat TeXbrain doet
TeXbrain is een volledige LaTeX-editor die .tex-bestanden direct in de browser compileert naar PDF. Er is geen backend en er vindt geen verwerking op een server plaats. Alles — de editor, de compiler en de git-client — draait aan de client-zijde.
Je kunt een lokale projectmap openen, bestanden bewerken, de PDF-update live volgen, wijzigingen commiten en deze naar GitHub pushen. Dit alles vanuit één tabblad.
Kenmerken
- LaTeX-compilatie in de browser: Maakt gebruik van een WebAssembly-port van pdfTeX (SwiftLaTeX). Je
.tex-bestanden worden gecompileerd tot PDF zonder je machine te verlaten. Packages worden on-demand geladen en lokaal gecached, waardoor de eerste compilatie alleen downloadt wat het document daadwerkelijk gebruikt. Hercompilaties duren 1 tot 5 seconden, afhankelijk van de complexiteit van het project.
- Toegang tot het grootste deel van CTAN: Veelvoorkomende packages worden meegeleverd met de app. Andere packages (zoals
memoir, abntex2, KOMA-Script) worden automatisch opgehaald van een TeX Live-mirror wanneer ein document ze voor het eerst nodig heeft, en vervolgens lokaal gecached voor offline gebruik.
- Live PDF-voorbeeld: Gerenderd met
pdf.js. Ondersteunt meerdere pagina's, zoomen en tekstselectie.
- Volledige git-integratie: Clone repos, maak branches, stage bestanden, commit, push en pull, en merge. Dit wordt aangedreven door
isomorphic-git in de browser, waardoor een CLI niet nodig is.
- Toegang tot het lokale bestandssysteem: Maakt gebruik van de File System Access API om direct te lezen en te schrijven naar je projectmap op schijf (ondersteund in Chrome/Edge).
- Projecten met meerdere bestanden: Bevat een bestandsboom, tabbladen en drag-and-drop ondersteuning voor
.tex, .bib, .sty, .cls en meer.
- CodeMirror 6 editor: Syntaxhighlighting, autocomplete voor meer dan 70 LaTeX-commando's, bracket matching, code folding, snippets en een donker/licht thema.
- Command palette: Snelle toegang tot acties via een toetsenbordcombinatie.
- Snippet picker: Doorzoekbare en gecategoriseerde snippets voor wiskundige omgevingen, documentstructuren, Griekse letters en veelvoorkomende commando's.
- Offline functionaliteit: Zodra de app is geladen, werkt deze zonder internetverbinding. Compilatie en bewerkingen zijn lokaal. Alleen packages die nog nooit zijn gebruikt, vereisen eenmalig netwerktoegang.
- Projecttemplates: Start vanaf nul of kies een template (artikel, thesis, beamer, rapport, CV, brief, minimaal).
Hoe het technisch werkt
Er is geen backend; alles gebeurt in de browser.
Editor
Gebouwd op CodeMirror 6 met een aangepaste LaTeX-grammatica (Lezer parser), autocomplete provider en themesysteem. De editor ondersteunt meerdere open bestanden via tabbladen en synchroniseert de inhoud met zowel het lokale bestandssysteem als de in-memory git working tree.
Compiler
LaTeX-compilatie maakt gebruik van de pdfTeX-engine van SwiftLaTeX, gecompileerd naar WebAssembly. De engine draait in een memory filesystem (MEMFS), waar projectbestanden voor elke compilatie naartoe worden geschreven. Wanneer de engine een bestand nodig heeft dat niet aanwezig is (zoals een class, package of font), lost de service worker dit op via de volgende volgorde:
- Reeds gecachte bestanden.
- De package-subset die gebundeld is met de app.
- Een TeX Live-mirror (een
texmf-dist mirror op jsDelivr, met een community SwiftLaTeX-server als fallback).
Elk gevonden bestand wordt opgeslagen in de cache storage van de browser. Na de eerste succesvolle compilatie wordt de gebundelde subset op de achtergrond geprefetched, zodat de kernset aan packages offline werkt.
Git
Alle git-operaties maken gebruik van isomorphic-git, een pure JavaScript-implementatie van git. De repository bevindt zich in een in-memory filesystem (LightningFS) ondersteund door IndexedDB. Projectbestanden worden gesynchroniseerd tussen het lokale bestandssysteem en de git working tree. Remote-operaties (push/pull/clone) verlopen via een CORS-proxy, omdat browsers niet direct het git-protocol kunnen spreken.
PDF-viewer
Gerenderd met pdf.js van Mozilla. Ondersteunt multi-page rendering met een tekstlaag voor selectie en zoeken.
Bestandssysteem
De app gebruikt de File System Access API voor directe lees/schrijfactiviteiten op schijf. Dit vereist een Chromium-gebaseerde browser (Chrome, Edge, Arc, Brave). Voor andere browsers is er een fallback via het Origin Private File System (OPFS).
Frontend
SvelteKit met de static adapter. De volledige app is pre-built naar statische HTML/CSS/JS en wordt gehost op GitHub Pages. Er is geen SSR, geen API-routes en geen server. Tailwind CSS wordt gebruikt voor de styling.
Bekende beperkingen
- Alleen pdfTeX: Geen XeTeX of LuaTeX; functies zoals
fontspec, polyglossia en andere afhankelijkheden hiervan kunnen niet worden gecompileerd.
- Geen bibtex of biber: De engine bevat deze niet. Documenten die
biblatex gebruiken, krijgen een eenvoudige thebibliography gegenereerd vanuit het .bib-bestand, waardoor referenties wel verschijnen maar de citatiestijl wordt genegeerd. Klassieke bibtex-workflows vereisen een .bbl-bestand in het project. Een echte bibtex in WASM staat bovenaan de planning.
- TeX Live 2020 tijdperk: Packages zijn gepind aan hetzelfde tijdperk als het format-bestand van de engine; nieuwere versies van packages zijn dus niet beschikbaar.
- Git remotes vereisen een CORS-proxy: Omdat browsers niet direct het git-protocol spreken. De standaardproxy is configureerbaar.
- Directe maptoegang is alleen voor Chromium: Firefox en Safari vallen terug op een virtueel bestandssysteem.
Beveiliging en privacy
- Alles draait in je browser. Je bestanden verlaten je machine niet, tenzij je expliciet naar een remote pusht.
- Geen telemetry, geen analytics, geen tracking.
- Geen accounts, geen cookies, geen gegevensverzameling.
- Git-authenticatietokens worden opgeslagen in de
localStorage van je browser en komen nooit op een server onder mijn controle terecht.
- LaTeX-compilatie vindt plaats in een WebAssembly-sandbox. Er worden geen shell-commando's uitgevoerd (geen
pdflatex, exec() of spawn()).
- Git-operaties maken gebruik van een JavaScript-bibliotheek, niet van CLI-commando's; command-injectie is onmogelijk.
- De CORS-proxy voor git remotes is een bewuste afweging. Standaard wordt
cors.isomorphic-git.org gebruikt, maar je kunt dit wijzigen naar je eigen proxy.
- Packages die niet gebundeld zijn, worden on-demand opgehaald van publieke TeX Live-mirrors. Alleen bestandsnamen worden verzonden, nooit de inhoud van je document.
Technologie-stack
| Laag | Technologie |
| Framework | Svelte 5 + SvelteKit (static adapter) |
| Editor | CodeMirror 6 + custom LaTeX language support |
| Compiler | pdfTeX via WebAssembly (SwiftLaTeX) |
| Git | isomorphic-git + LightningFS |
| PDF | pdf.js |
| Styling | Tailwind CSS 4 |
| Taal | TypeScript |
| Deployment | GitHub Pages |
Lokaal draaien
git clone https://github.com/swimmingbrain/texbrain.git
cd texbrain
pnpm install
pnpm dev
Open http://localhost:5173 in Chrome of Edge.
Browserondersteuning
Voor volledige functionaliteit is de File System Access API vereist, die beschikbaar is in Chromium-gebaseerde browsers (Chrome, Edge, Arc, Brave, Opera). Firefox en Safari kunnen de editor nog steeds gebruiken via de virtual filesystem fallback, maar kunnen niet direct lezen of schrijven naar lokale mappen.
Licentie
MIT
TeXbrain
Probeer het nu: tex.swimmingbrain.dev
Ik heb dit gebouwd omdat ik klaar was met het betalen voor functies die gratis zouden moeten zijn. Vorig jaar schreef ik mijn scriptie in LaTeX en besteedde ik meer tijd aan het worstelen met de tooling dan aan het daadwerkelijke schrijven. Online oplossingen plaatsen git-synchronisatie vaak achter een betaalmuur, terwijl lokale installaties vaak problemen geven bij het wisselen tussen verschillende machines. Ik wilde iets dat gewoon werkt: een browser openen, LaTeX schrijven en een PDF krijgen.
Wat TeXbrain doet
TeXbrain is een volledige LaTeX-editor die .tex-bestanden direct in de browser compileert naar PDF. Er is geen backend en er vindt geen verwerking op een server plaats. Alles — de editor, de compiler en de git-client — draait aan de client-zijde.
Je kunt een lokale projectmap openen, bestanden bewerken, de PDF-update live volgen, wijzigingen commiten en deze naar GitHub pushen. Dit alles vanuit één tabblad.
Kenmerken
- LaTeX-compilatie in de browser: Maakt gebruik van een WebAssembly-port van pdfTeX (SwiftLaTeX). Je
.tex-bestanden worden gecompileerd tot PDF zonder je machine te verlaten. Packages worden on-demand geladen en lokaal gecached, waardoor de eerste compilatie alleen downloadt wat het document daadwerkelijk gebruikt. Hercompilaties duren 1 tot 5 seconden, afhankelijk van de complexiteit van het project.
- Toegang tot het grootste deel van CTAN: Veelvoorkomende packages worden meegeleverd met de app. Andere packages (zoals
memoir, abntex2, KOMA-Script) worden automatisch opgehaald van een TeX Live-mirror wanneer ein document ze voor het eerst nodig heeft, en vervolgens lokaal gecached voor offline gebruik.
- Live PDF-voorbeeld: Gerenderd met
pdf.js. Ondersteunt meerdere pagina's, zoomen en tekstselectie.
- Volledige git-integratie: Clone repos, maak branches, stage bestanden, commit, push en pull, en merge. Dit wordt aangedreven door
isomorphic-git in de browser, waardoor een CLI niet nodig is.
- Toegang tot het lokale bestandssysteem: Maakt gebruik van de File System Access API om direct te lezen en te schrijven naar je projectmap op schijf (ondersteund in Chrome/Edge).
- Projecten met meerdere bestanden: Bevat een bestandsboom, tabbladen en drag-and-drop ondersteuning voor
.tex, .bib, .sty, .cls en meer.
- CodeMirror 6 editor: Syntaxhighlighting, autocomplete voor meer dan 70 LaTeX-commando's, bracket matching, code folding, snippets en een donker/licht thema.
- Command palette: Snelle toegang tot acties via een toetsenbordcombinatie.
- Snippet picker: Doorzoekbare en gecategoriseerde snippets voor wiskundige omgevingen, documentstructuren, Griekse letters en veelvoorkomende commando's.
- Offline functionaliteit: Zodra de app is geladen, werkt deze zonder internetverbinding. Compilatie en bewerkingen zijn lokaal. Alleen packages die nog nooit zijn gebruikt, vereisen eenmalig netwerktoegang.
- Projecttemplates: Start vanaf nul of kies een template (artikel, thesis, beamer, rapport, CV, brief, minimaal).
Hoe het technisch werkt
Er is geen backend; alles gebeurt in de browser.
Editor
Gebouwd op CodeMirror 6 met een aangepaste LaTeX-grammatica (Lezer parser), autocomplete provider en themesysteem. De editor ondersteunt meerdere open bestanden via tabbladen en synchroniseert de inhoud met zowel het lokale bestandssysteem als de in-memory git working tree.
Compiler
LaTeX-compilatie maakt gebruik van de pdfTeX-engine van SwiftLaTeX, gecompileerd naar WebAssembly. De engine draait in een memory filesystem (MEMFS), waar projectbestanden voor elke compilatie naartoe worden geschreven. Wanneer de engine een bestand nodig heeft dat niet aanwezig is (zoals een class, package of font), lost de service worker dit op via de volgende volgorde:
- Reeds gecachte bestanden.
- De package-subset die gebundeld is met de app.
- Een TeX Live-mirror (een
texmf-dist mirror op jsDelivr, met een community SwiftLaTeX-server als fallback).
Elk gevonden bestand wordt opgeslagen in de cache storage van de browser. Na de eerste succesvolle compilatie wordt de gebundelde subset op de achtergrond geprefetched, zodat de kernset aan packages offline werkt.
Git
Alle git-operaties maken gebruik van isomorphic-git, een pure JavaScript-implementatie van git. De repository bevindt zich in een in-memory filesystem (LightningFS) ondersteund door IndexedDB. Projectbestanden worden gesynchroniseerd tussen het lokale bestandssysteem en de git working tree. Remote-operaties (push/pull/clone) verlopen via een CORS-proxy, omdat browsers niet direct het git-protocol kunnen spreken.
PDF-viewer
Gerenderd met pdf.js van Mozilla. Ondersteunt multi-page rendering met een tekstlaag voor selectie en zoeken.
Bestandssysteem
De app gebruikt de File System Access API voor directe lees/schrijfactiviteiten op schijf. Dit vereist een Chromium-gebaseerde browser (Chrome, Edge, Arc, Brave). Voor andere browsers is er een fallback via het Origin Private File System (OPFS).
Frontend
SvelteKit met de static adapter. De volledige app is pre-built naar statische HTML/CSS/JS en wordt gehost op GitHub Pages. Er is geen SSR, geen API-routes en geen server. Tailwind CSS wordt gebruikt voor de styling.
Bekende beperkingen
- Alleen pdfTeX: Geen XeTeX of LuaTeX; functies zoals
fontspec, polyglossia en andere afhankelijkheden hiervan kunnen niet worden gecompileerd.
- Geen bibtex of biber: De engine bevat deze niet. Documenten die
biblatex gebruiken, krijgen een eenvoudige thebibliography gegenereerd vanuit het .bib-bestand, waardoor referenties wel verschijnen maar de citatiestijl wordt genegeerd. Klassieke bibtex-workflows vereisen een .bbl-bestand in het project. Een echte bibtex in WASM staat bovenaan de planning.
- TeX Live 2020 tijdperk: Packages zijn gepind aan hetzelfde tijdperk als het format-bestand van de engine; nieuwere versies van packages zijn dus niet beschikbaar.
- Git remotes vereisen een CORS-proxy: Omdat browsers niet direct het git-protocol spreken. De standaardproxy is configureerbaar.
- Directe maptoegang is alleen voor Chromium: Firefox en Safari vallen terug op een virtueel bestandssysteem.
Beveiliging en privacy
- Alles draait in je browser. Je bestanden verlaten je machine niet, tenzij je expliciet naar een remote pusht.
- Geen telemetry, geen analytics, geen tracking.
- Geen accounts, geen cookies, geen gegevensverzameling.
- Git-authenticatietokens worden opgeslagen in de
localStorage van je browser en komen nooit op een server onder mijn controle terecht.
- LaTeX-compilatie vindt plaats in een WebAssembly-sandbox. Er worden geen shell-commando's uitgevoerd (geen
pdflatex, exec() of spawn()).
- Git-operaties maken gebruik van een JavaScript-bibliotheek, niet van CLI-commando's; command-injectie is onmogelijk.
- De CORS-proxy voor git remotes is een bewuste afweging. Standaard wordt
cors.isomorphic-git.org gebruikt, maar je kunt dit wijzigen naar je eigen proxy.
- Packages die niet gebundeld zijn, worden on-demand opgehaald van publieke TeX Live-mirrors. Alleen bestandsnamen worden verzonden, nooit de inhoud van je document.
Technologie-stack
| Laag | Technologie |
| Framework | Svelte 5 + SvelteKit (static adapter) |
| Editor | CodeMirror 6 + custom LaTeX language support |
| Compiler | pdfTeX via WebAssembly (SwiftLaTeX) |
| Git | isomorphic-git + LightningFS |
| PDF | pdf.js |
| Styling | Tailwind CSS 4 |
| Taal | TypeScript |
| Deployment | GitHub Pages |
Lokaal draaien
git clone https://github.com/swimmingbrain/texbrain.git
cd texbrain
pnpm install
pnpm dev
Open http://localhost:5173 in Chrome of Edge.
Browserondersteuning
Voor volledige functionaliteit is de File System Access API vereist, die beschikbaar is in Chromium-gebaseerde browsers (Chrome, Edge, Arc, Brave, Opera). Firefox en Safari kunnen de editor nog steeds gebruiken via de virtual filesystem fallback, maar kunnen niet direct lezen of schrijven naar lokale mappen.
Licentie
MIT