A web based git managed latex editor
- TypeScript 78.2%
- CSS 15.9%
- TeX 4.5%
- Dockerfile 0.8%
- JavaScript 0.4%
- Other 0.2%
- Update ProjectMetadataService to support cloning from remote URL - Add error handling and metadata cleanup for failed clones - Update backend API to accept remoteUrl parameter - Add Git Remote URL input and separator to Create Project modal - Style the new modal elements in CSS |
||
|---|---|---|
| docker/latex-base | ||
| examplelatex | ||
| nginx | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| DEPLOYMENT.md | ||
| docker-compose.yml | ||
| LICENSE | ||
| logo.png | ||
| README.md | ||
Paperoot
Paperoot is a professional-grade, online multi-user LaTeX editor built with Node.js and React. It features real-time collaboration, a sophisticated file management system, and integrated Dockerized LaTeX compilation.
🚀 Key Features
- Real-time Collaboration: Powered by Yjs and CodeMirror 6, allowing multiple users to edit documents simultaneously with live cursor tracking.
- Synchronized Compilation: When any user compiles, all connected collaborators instantly see:
- Compilation results and logs
- Error diagnostics in the editor
- PDF preview updates
- Auto-opening log panel on errors
- Smart Container Management:
- One container per project (automatic cleanup of orphans)
- Auto-destroy after 30 minutes of inactivity
- Manual container control with "Stop Container" button
- Warm containers for near-instant compilation
- Advanced File Explorer:
- Subfolder and nested file support.
- Drag-and-drop file moving.
- Inline renaming and deletion (with confirmation).
- Cloud upload for images and
.texfiles.
- Integrated Version Control: Automatic Git commits on every compilation. Users can also configure remote URLs to push their projects to external servers (GitHub, GitLab, etc.).
- Pro UI/UX:
- Modern Dark Mode interface.
- Resizable Layout: Drag headers to customize the widths of the Sidebar, Editor, and Preview panes.
- Inline Diagnostics: LaTeX errors and warnings appear directly in the editor as underlined text with "jump to error" functionality.
- Compilation Log Panel: Resizable bottom panel with ANSI color coding for errors/warnings
- PDF Preview: Embedded PDF viewer with "Open in New Tab" fallback
- Multi-User Project System:
- Project dashboard with grid view
- Create, share, and manage projects
- Collaborator management by email
- Public/private project visibility
- Owner/collaborator/viewer permission levels
- Security & Persistence:
- JWT-based authentication.
- Persistent user storage in
/projects/users.json. - Automatic disk export of all project files for local backup.
🛠 Tech Stack
Frontend
- Framework: React 19 (TypeScript)
- Editor: CodeMirror 6 with LaTeX (stex) mode.
- Collaboration: Yjs,
y-websocket,y-codemirror.next. - Tree View:
react-arborist,react-icons. - Styling: Modern Vanilla CSS (Global Dark Mode).
Backend
- Runtime: Node.js 20
- Framework: Express (TypeScript)
- Real-time Server:
y-websocket(customized for multi-file support). - Container Orchestration:
dockerode(Docker API for Node.js). - Version Control:
simple-git. - File Parsing:
latex-utensils(Structured LaTeX log parsing). - Uploads:
multer.
Infrastructure
- Orchestration: Docker Compose
- Database: PostgreSQL (Metadata)
- Compiler: Ephemeral
texlive/texliveDocker containers.
🏁 Getting Started
-
Build the base image:
docker compose build latex-base -
Start the entire stack:
docker compose up --build -d -
Access the application:
- Web UI:
http://localhost:5173 - API:
http://localhost:3000
- Web UI:
Paperoot - Write, Collaborate, Compile.