a13n
Build AI agents and run them on cloud.
Free collaborative LaTeX editor that compiles in your browser (WebAssembly), with Git on GitHub or Codeberg
Developer toolsJavaScript · RustGitHub @neoleaf-scienceOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A modern, collaborative web platform for LaTeX, built in Rust with the Topcoat framework. NeoLeaf brings native versioning and storage through GitHub, 100% WebAssembly compilation in the browser (or through the Local Agent), real-time collaboration (CRDT/Yjs) and zero server cost for compilation.
🌐 Try the production version: neoleaf.science
neoleaf topic.isomorphic-git and lightning-fs in the browser, backed by the Rust server..sty, .cls) and font families from TeX Live / CTAN and downloads them on demand.neoleaf-agent):
irm https://neoleaf.science/install.ps1 | iex): curl -fsSL https://neoleaf.science/install.sh | sh (checks the SHA-256, no sudo).tlmgr, a system tray icon and secure pairing through a local token.The server does not compile and does not store projects: the project lives only in the browser (local Git clone) and on your GitHub. The server handles authentication, relays Git and the GitHub API (stateless proxy), downloads packages from CTAN/TeX Live and relays live editing in memory.
\cite), labels and cross-references (\ref)./admin panel, the 🚫 Block button ends the person's sessions, prevents new logins and disconnects them from live editing. The "Blocked users" section shows the reason, who blocked and when, lets you block by login (for someone who has not signed in yet) and unblock. The block applies by GitHub id and is kept in blocked.json (variable BLOCKLIST_FILE).my-paper-deleted-20261009-031507) and gets the deleted tag. The Trash view (side menu) lists the deleted projects, with the date, and the Restore button brings back the original name and removes the tag. Nothing is erased; only the repository owner can delete and restore.+ tag button..zip files (read in the browser itself) and export the source code as .zip (the GitHub one when there is nothing to push, or built in the browser) or just the compiled .bbl file..otf, .ttf, .sty, .cls) with project or global scope.curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
scripts/).To connect and sync your repositories with GitHub:
NeoLeafhttp://localhost:3000http://localhost:3000/auth/callback.env file in the project root (use .env.example as a base):GITHUB_CLIENT_ID=your_client_id_here
GITHUB_CLIENT_SECRET=your_client_secret_here
REDIRECT_URI=http://localhost:3000/auth/callback
PORT=3000
# Administrators, by numeric GitHub id (comma-separated; replace with your own).
# When set and not empty, only these ids are administrators and the login/e-mail rules (ADMIN_EMAILS) are ignored.
# ADMIN_GITHUB_IDS=123456,7890123
Without ADMIN_GITHUB_IDS, administrators are the logins or e-mails listed in ADMIN_EMAILS (which can change hands) and the server prints a warning at startup; with neither set, nobody is an administrator. Set ADMIN_GITHUB_IDS in production. Session cookies are Secure unless REDIRECT_URI explicitly starts with http://localhost or http://127.0.0.1.
💡 Developing without a GitHub account: run
mise run dev:fake. It starts a local "fake GitHub" (API, login and Git protocol) and points NeoLeaf to it; click "Start with GitHub" and you sign in as thedemouser, with a sample project. None of this exists in production, and NeoLeaf does not store projects on the server in any mode.
Download dependencies and run the server:
cargo run
Open it in the browser:
http://localhost:3000
neoleaf-agent)The repository includes a companion agent in Rust located in the agent/ folder:
cd agent
cargo build --release
It runs as a user daemon (./neoleaf-agent install), listening on 127.0.0.1:47474, and connects the compilers installed on your machine to the web editor without sending your files to third-party compilation servers.
neoleaf/
├── Cargo.toml # Rust project manifest and dependencies
├── mise.toml # Development, test and quality tasks
├── .env.example # Example environment variable configuration
├── agent/ # Local companion daemon in Rust (neoleaf-agent)
│ ├── src/
│ └── README.md
├── scripts/ # Download and packaging scripts for WASM/TeXMF assets
│ ├── fetch_xelatex_assets.py
│ ├── fetch_lualatex_assets.py
│ ├── fetch_bibtex_assets.py
│ └── build_font_packs.py
├── src/
│ ├── main.rs # Entry point: only builds the Topcoat router
│ ├── routes/ # HTTP handlers (pages, admin, auth, catalog, projects, Git proxy, lookups, static files)
│ ├── assets.rs # List of the static files embedded in the binary
│ ├── admin.rs # Metrics, administrative panel and telemetry
│ ├── collab.rs # Yjs WebSocket server and collaboration CRDTs
│ ├── ctan.rs # Stateless CTAN/TeX Live proxy: downloads packages and indexes file -> package
│ ├── deps.rs # List of the files the browser compiler already ships with
│ ├── import.rs # New project name (the rest of the import happens in the browser)
│ ├── session.rs # User session management
│ ├── auth/ # GitHub OAuth 2.0 authentication
│ │ └── github.rs
│ ├── drive/ # GitHub API client (repos, topics, invitations, permissions)
│ │ └── client.rs
│ ├── templates/ # Starter templates (.tex) for new papers
│ └── views/ # SSR screens in Topcoat (reactive HTML)
│ ├── dashboard_page.rs # Dashboard for projects, tags and invitations
│ ├── editor_page.rs # Monaco editor interface, PDF and tools
│ ├── login_page.rs # Login and presentation page (landing)
│ ├── admin_page.rs # System metrics panel
│ └── agent_page.rs # Local agent guide and download
└── static/
├── css/editor.css # Complete styling of the editor and components
├── img/ # Logos and icons
├── js/ # Client scripts (Monaco, Yjs, SyncTeX, PDF.js, etc.)
└── texlive/ # WebAssembly modules (TeX Live, bibtexu)