ArXiv Studio is a paper layout editor for academic content, built with one shared codebase for:
- Web app (Vite build)
- Obsidian embedded view (plugin webapp)
It focuses on fast visual editing, arXiv-oriented structure, and local-first persistence.
- Element types:
text,markdownobs,image,math,table,line,shape,connector,toc,glossary,references - Rich text tools: H1/H2/H3, bold, italic, underline, lists, checkboxes, alignment
- Double-click editing for text, markdown, math, and image frame import
- Per-element typography: font family, size, line height, letter spacing, vertical text, mirror mode
- Dynamic blocks:
- TOC generated from headings
- Glossary generated from
Term: Definitionpatterns - References generated from citation patterns
- Multi-page editor with per-page orientation (portrait/landscape)
- Header/Page/Footer editing contexts
- Global and per-side margin controls (inputs + sliders)
- Guides/rulers and grid styles (dots or squares)
- Zoom controls, fit page, and
Shift + wheelzoom - Real-time transform status (x/y/w/h/rotation)
- Alignment guides during drag
- Drag, resize, rotate
- Ratio-aware resizing for images/shapes
- Incremental rotation with modifier keys
- Layer ordering (front/back/up/down)
- Multi-select (
Ctrl/Cmd + click) - Group / ungroup, group rename, group selection
- Move elements and groups between pages
- Asset library with folders
- Drag and drop organization inside asset folders
- Rename folders/files with double click
- Search with clear button
- Add selected canvas element to asset library
- Font import and preview in selectors
- Default font + per-element font support on all text-based blocks
- Paper texture support (global or per page)
- Project grid with create/duplicate/delete/import
- Auto-save to local storage
- Optional web folder mirror (when supported) to also write
projects.jsoninto a user-selected local directory - JSON import/export
- Undo/redo history (
Ctrl+Z,Ctrl+Shift+Z)
- LaTeX export (
.tex) - Print mode
- Save as PDF button (recommended for Obsidian runtime)
- Selection highlights and editor handles excluded from print/PDF output
ArXiv Studio can run embedded inside Obsidian with the same app code.
npm run build:obsidianGenerated outputs:
obsidian-module/main.jsobsidian-module/webapp/*
Copy into:
<vault>/.obsidian/plugins/arxiv-studio-bridge/
Required files:
obsidian-module/manifest.jsonobsidian-module/main.jsobsidian-module/styles.cssobsidian-module/webapp/(full folder)
If the plugin is installed through BRAT and the packaged webapp/ folder is missing, the plugin now auto-downloads the embedded app from the official GitHub Pages build on first launch. The fallback/bootstrap URL can be changed in plugin settings.
- Drag/drop from vault to canvas (images, markdown/text, links)
- URI resolution for
obsidian://open?... - Markdown payload support (
text,html) for dedicated markdown block creation - Optional project mirror to vault/provider target
- Local vault file mirror (
projects.json) - Optional image mode:
- Embedded (base64)
- Linked vault images (
vault-image://...)
- Provider targets:
- OneDrive
- GitHub
- iCloud Drive local path
Inside Obsidian, native print preview may be blank depending on host/runtime restrictions.
Use Save as PDF from the top bar for reliable exports.
| Shortcut | Action |
|---|---|
Delete / Backspace |
Delete selected element(s) |
Ctrl/Cmd + C |
Copy selected element |
Ctrl/Cmd + X |
Cut selected element |
Ctrl/Cmd + V |
Paste element (also works across pages) |
Ctrl/Cmd + Z |
Undo |
Ctrl/Cmd + Shift + Z |
Redo |
Arrow keys |
Move selected element by 1px |
Shift + Arrow keys |
Move selected element by 10px |
Shift + Wheel |
Zoom in/out |
Ctrl/Cmd + Click |
Multi-select |
- React 19
- TypeScript 5
- Vite
- Tailwind CSS v4
lucide-reacthtml2canvas+jspdffor direct PDF export
- Node.js >= 18
- npm >= 9
npm install
npm run devnpm run buildnpm run build:alldeploy-pages.yml- Deploys web build to GitHub Pages
release.yml- Builds web + Obsidian artifacts
- Supports tags with or without
vprefix - Publishes BRAT-compatible plugin assets (
manifest.json,main.js,styles.css,versions.json)
For this repository, GitHub Pages must use GitHub Actions as its source.
If Pages is set to Deploy from a branch, GitHub serves the raw repository index.html instead of the Vite dist/ output. That produces a blank page because the browser receives the unbuilt app entrypoint instead of the generated bundle.
Required repository setting:
- GitHub repository Settings -> Pages -> Source:
GitHub Actions
Expected behavior after a successful deployment:
https://infinition.github.io/arxiv-studio/serves the generateddist/index.html- bundled files load from
./assets/... arxiv-studio-icon.svgresolves under the repository subpath
For Obsidian releases, manifest.json version must match the git tag version without v.
Example:
- Tag
v1.2.3 - Manifest version
1.2.3