oc-latex
v0.1.0
Published
OpenCode TUI plugin that renders LaTeX as Unicode using TeXicode.
Maintainers
Readme
oc-latex
Experimental OpenCode TUI plugin that renders selected LaTeX as Unicode with bundled, unmodified TeXicode 1.0.3. Stored messages and model context retain the original source.
[!WARNING] This plugin patches an internal OpenTUI
MarkdownRenderableprototype. Rendering is enabled by default and compatibility is limited to the tested versions below.
Requirements
- OpenCode
1.18.31 - Bun
1.3.5 - Python
3.11or3.12available aspython3
The npm package bundles TeXicode's Python source. Installation does not run pip, download Python packages, require TeX, or execute package lifecycle scripts.
Install
opencode plugin -g oc-latexRestart OpenCode to enable rendering. Omit -g for a project-local installation. Use /latex-toggle to turn chat rendering off or on.
Behavior
The plugin recognizes \(...\), \[...\], $$...$$, and conservative $...$ expressions. TeXicode handles parsing and layout asynchronously; TypeScript handles limits, lifecycle, Markdown transport, and reviewed atomic symbols unavailable from TeXicode.
While rendering is pending or uncertain, the complete original formula remains visible. Formulas also remain raw when output contains errors, placeholders, unsafe controls, invalid UTF-8, excessive geometry, or multiline inline layout.
\(x_i\) -> xᵢ
1
\[\frac{1}{2}\] -> ╶─╴
2Commands
/latex-toggle: enable or disable chat rendering./latex-status: show renderer and integration status./latex-demo: open the seven-page, model-free rendering demo; press Enter to advance./latex-clear: cancel pending work and clear renderer state.
Limitations
- This is a conservative TeX subset, not general LaTeX support.
- Multiline output requires display delimiters.
- Code, links, escaped/incomplete delimiters, Markdown containers, and display math in pipe-containing table rows are preserved conservatively.
- Combining accents depend on terminal font support.
Configuration
Options may be supplied in the OpenCode tui.json plugin entry.
| Option | Default | Purpose |
| --- | ---: | --- |
| enabled | true | Initial rendering state. |
| timeoutMs | 2500 | Per-process timeout. |
| maxInputChars | 12000 | Formula source limit. |
| maxOutputBytes | 65536 | Captured stdout/stderr limit. |
| maxOutputLines | 512 | Output row limit. |
| maxOutputColumns | 512 | Terminal-cell width limit. |
| maxCacheEntries | 256 | Shared LRU entries; 0 disables it. |
| maxRenderAttempts | 32 | Uncached attempts per source update. |
| maxRenderTimeMs | 2500 | Shared source-update deadline. |
| maxPendingJobs | 64 | Queued plus active jobs. |
Invalid values use defaults and produce a warning. One child process runs at a time; identical work is deduplicated and obsolete work is cancelled.
Development
bun install --frozen-lockfile
bun run release:checkCI runs the suite on Python 3.11 and 3.12. A separate scheduled workflow checks the latest OpenCode plugin/OpenTUI APIs; it is not a test of the latest OpenCode executable.
Removal
Remove oc-latex from the relevant tui.json plugin array and restart OpenCode.
License
MIT. Bundled TeXicode retains its MIT license at vendor/texicode/LICENSE.
