Skip to content

Basic static, client-side editor and compiler of LaTeX documents with GitHub integration

License

Notifications You must be signed in to change notification settings

busytex/busyide

Repository files navigation

Client-side GitHub-enabled LaTeX editor and compiler: https://busytex.github.io

  • Inspired by awesome Overleaf
  • Fully client-side functioning, including project compilation and GitHub integration
  • Survives well missing internet connection
  • Syntax highlighting
  • GitHub integration for both repositories and gists
  • Importing papers' LaTeX sources from https://arxiv.org
  • Removing TeX comments for preparing paper submissions
  • Export and download projects as ZIP and TAR.GZ
  • Installing TexLive packages in one click
  • Three LaTeX engines: PdfLaTeX, XeLaTeX, LuaHBLaTeX
  • Supports BibTeX
  • Search in files
  • Basic diff tool
  • Preview for BMP, PNG, JPG, SVG, PDF
  • Share projects using base64-encoded URLs, useful for sharing small MWEs at https://tex.stackexchange.com
  • As fast as your local machine, even at conference deadline times
  • No browser tracking, not even Google Analytics
  • High hackability and minimal codebase size: three JavaScript files, single HTML file, no UI frameworks used

GitHub integration

  • Both repositories and gists
  • Clone
  • Push
  • Pull
  • Publish PDF to Releases

Help needed

BusyTex architecture

  1. TexLive programs compiled to WASM: https://github.com/busytex/busytex
  2. TexLive data packages
  3. Busybox programs compiled to WASM: busybox.js, .config, Makefile
  4. IDE shell: index.html, busyide.js
  5. GitHub integration: github.js

CORS proxy is used only for:

Try out supported URIs


Comparison with Overleaf

GitHub Integration
BusyTex BusyTeX has client-side integration with GitHub. This means, you clone the latest version of GitHub repo and branch when you start a BusyTeX session and then you upload updates to GitHub in form of Git commits. GitHub integration is very primitive (e.g. does not support viewing history)
Overleaf Overleaf has paid sever-side integration with GitHub.
Documentation
BusyTex BusyTex has almost no documentation besides this README at the moment :(
Overleaf Overleaf has extensive documentation, including great https://www.overleaf.com/learn resource that has beginner and expert documentation about LaTeX itself.
Spell checking
BusyTex Not supported for now
Overleaf Supported
Compilation error reporting
BusyTex Displays raw compilation logs
Overleaf Presents errors' file and line numbers
Project storage
BusyTex BusyTex does not have its own server-side storage and fully relies on GitHub integration as project storage as well.
Overleaf Overleaf provides server-side project storage and does not require any third-party services for basic work.
Project collaboration
BusyTex BusyTex support collaboration only via GitHub. BusyTex does not support multiple users editing the document or online collaboration.
Overleaf Overleaf supports multiple users editing the document and also supports online collaboration. Overleaf supports GitHub integration as a paid feature.
Project compilation
BusyTex BusyTex compiles projects locally on your machine, in the browser. This requires a good internet connection for first-time downloading ~100 megabytes of binaries / TexLive distribution, CPU resources, ~100 megabytes of RAM. Speed of compilation is limited by your CPU speed / efficiency of WASM support in browser.
Overleaf Overleaf compiles projects server-side. This does not require and significant local resources. This normally means faster compilation times than BusyTex, except for conference deadline times, during these peak load times, compilation may take indefinitely longer or fail.
Work recovery
BusyTex BusyTex currently does not support any recovery of un-committed work (e.g. after browser crash or closing the browser unintentionally).
Overleaf Overleaf does not have this problem because edits are sent to the server in real-time. The only problem for recovery may be during internet connection problems.
Open source
BusyTex BusyTex is open source and lives at https://github.com/busytex/busytex and https://github.com/busytex/busyide
Overleaf Overleaf is open source as well and lives at https://github.com/overleaf/overleaf
Hackability
BusyTex BusyTex is highly hackable, it does not use any UI-frameworks, so hacking is approachable even for people who don't have web development experience
Overleaf Overleaf is also hackable but its codebase is more complex
Hosting
BusyTex BusyTex is completely client-side software and runs on your machine. Besides using BusyTex at https://busytex.github.io, There are multiple options of hosting your own copy of BusyTex.
Overleaf Overleaf requires running server-side services. Besides using Overleaf at https://overleaf.com, one can run your own free copy as a Docker image. Overleaf provides paid service for supporting on-premises version: https://www.overleaf.com/for/enterprises.
Expertise
BusyTex BusyTex is just some tinkering without understanding of LaTeX, TexLive, fonts, CJK specifics etc.
Overleaf Overleaf is developed by LaTeX experts.

Notes

  • drop console / xterm.js
  • broken cd
Uncaught (in promise) TypeError: Cannot read properties of null (reading 'startsWith')
    at Shell.abspath (busyide.js:106:37)
    at Shell.find (busyide.js:1541:34)
    at Shell.refresh (busyide.js:1591:22)
    at Shell.commands (busyide.js:366:14)
Error: Stray end tag input.

From line 387, column 118; to line 387, column 125

renaming"></input>↩

Error: Stray end tag input.

From line 395, column 154; to line 395, column 161

ttps url"></input>↩

Error: Stray end tag input.

From line 396, column 148; to line 396, column 155

o branch"></input>↩

Error: Stray end tag input.

From line 397, column 185; to line 397, column 192

one/push"></input>↩

Error: Stray end tag input.

From line 411, column 140; to line 411, column 147

res case"></input>↩

Error: Element img is missing required attribute src.

From line 425, column 9; to line 425, column 51

>↩        <img hidden id="imgpreview" class="busyui"></img>

Attributes for element img:
Global attributes
alt — Replacement text for use when images are not available
src — Address of the resource
srcset — Images to use in different situations, e.g., high-resolution displays, small monitors, etc.
sizes — Image sizes for different page layouts
crossorigin — How the element handles crossorigin requests
usemap — Name of image map to use
ismap — Whether the image is a server-side image map
width — Horizontal dimension
height — Vertical dimension
referrerpolicy — Referrer policy for fetches initiated by the element
decoding — Decoding hint to use when processing this image for presentation
loading — Used when determining loading deferral
Error: An img element must have an alt attribute, except under certain conditions. For details, consult guidance on providing text alternatives for images.

From line 425, column 9; to line 425, column 51

>↩        <img hidden id="imgpreview" class="busyui"></img>

Error: Stray end tag img.

From line 425, column 52; to line 425, column 57

="busyui"></img>↩

Error: Stray end tag input.

From line 457, column 103; to line 457, column 110

age name"></input>↩

Error: Stray end tag input.

From line 462, column 109; to line 462, column 116

 selection</input></td><

Error: Element thead not allowed as child of element table in this context. (Suppressing further errors from this subtree.)

From line 465, column 25; to line 466, column 23

  </tbody>↩                <thead>↩

Contexts in which element thead may be used:
As a child of a table element, after any caption, and colgroup elements and before any tbody, tfoot, and tr elements, but only if there are no other thead elements that are children of the table element.
Content model for element table:
In this order: optionally a caption element, followed by zero or more colgroup elements, followed optionally by a thead element, followed by either zero or more tbody elements or one or more tr elements, followed optionally by a tfoot element, optionally intermixed with one or more script-supporting elements.
Error: Table column 2 established by element th has no cells beginning in it.

From line 461, column 25; to line 461, column 51

      <tr><th colspan="2" class="tl">ubuntu

Error: th start tag in table body.

From line 477, column 24; to line 477, column 38

   <thead><th class="tl">#line<

Error: Stray end tag input.

From line 489, column 174; to line 489, column 181

 release"></input>↩

Contributors

  • Vadim Kantorov: JavaScript
  • Ilya: HTML, layout

References