A presenter for LATEX Beamer and PDF slides:
private notes, audience screen, live LaTeX editor, rehearsal analytics, animation and video.
macOS, Windows and Linux.
Download · Features · Quick start · Guide · Shortcuts · Build
TeXora shows the speaker the notes, the current and next slide and the time, while the audience sees
only the slide. It opens PDF files and LaTeX Beamer sources; a .tex file is compiled on opening and
can be edited in the built-in LaTeX studio or in any other editor.
| Presenter view | Notes, current and next slide, overlay step, elapsed time, pace against a set duration, and a clock. Large-slide and split views. |
| Audience window | Fullscreen on a projector or second display (F5). Black screen, whiteboard and freeze. |
| LaTeX studio | Source editor with code folding and block guides, beside a slide and notes preview; errors and warnings listed apart; SyncTeX links. |
| LaTeX Beamer | Compiles with pdfLaTeX, XeLaTeX or LuaLaTeX, chosen from % !TEX program or the packages used. Rebuilds when the file is saved in any editor. |
| Required packages | Lists every package, theme and program a file needs, with how to install the missing ones. |
| Speaker notes | From Beamer notes pages, \note{}, .pdfpc files or a Markdown file; editable in the app, in any language. |
| Animations and video | animate package animations, GIFs and video clips play inside the slide (see it); video uses an installed ffmpeg or VLC. |
| Drawing and pointing | Pen, highlighter, eraser, laser pointer and zoom to an area. Ink is kept per slide. |
| Navigation | Contents, bookmarks, question marks and full-text search in a sidebar. Tabs for several presentations. |
| Analytics | Time on each slide for every rehearsal, compared with the previous one. |
| Tools | Configurable shortcuts, a system check, a command-line interface and update notices. |
Each system has an installer and a portable package in the latest release.
| System | Installer | Portable |
|---|---|---|
| macOS, Apple silicon (M1 and later) | TeXora-<version>-mac-arm64.dmg |
…-mac-arm64.zip |
| macOS, Intel | TeXora-<version>-mac-x64.dmg |
…-mac-x64.zip |
| Windows 10 and 11 (x64) | TeXora-<version>-windows-x64-setup.exe |
…-windows-x64.zip |
| Debian, Ubuntu and derivatives (x64) | texora_<version>_amd64.deb |
TeXora-<version>-linux-x64.tar.gz |
| Debian, Ubuntu and derivatives (arm64) | texora_<version>_arm64.deb |
TeXora-<version>-linux-arm64.tar.gz |
- macOS: open the
.dmgand drag TeXora to Applications. macOS asks for confirmation the first time; see First launch on macOS. - Windows: run the setup program. It installs per user without administrator rights (or for all
users), adds Start menu and "Open with" entries for PDF and
.texfiles, and can be removed from Installed apps. Windows may warn about an unknown publisher. - Linux:
sudo apt install ./texora_<version>_amd64.deb, then start TeXora from the menu or runtexora. The.tar.gzruns from any folder with./TeXora. Requires glibc 2.31 or newer (Ubuntu 20.04, Debian 11 or later) and an X11 or Wayland desktop.
Requirements. Presenting PDF files needs nothing else: each package includes the PDF engine.
| To | Install |
|---|---|
Presenting PDF files |
nothing |
Compile .tex files |
A TeX distribution: MacTeX (macOS), MiKTeX or TeX Live (Windows), TeX Live (Linux) |
| Play MP4 and other videos | ffmpeg (plays inside the slide, with sound through ffplay) or VLC (plays in its own window). Optional; GIFs need neither. |
Every release file is listed with its checksum in SHA256SUMS.txt; VALIDATION.txt records how each
file was tested.
TeXora is signed ad hoc rather than with an Apple Developer ID, so macOS blocks the first launch.
Steps to open TeXora the first time
macOS 15 Sequoia and later
- Open TeXora and click Done on the warning.
- Open System Settings > Privacy & Security.
- In the Security section, find the entry for TeXora and click Open Anyway.
- Confirm with the password or Touch ID.
macOS 14 Sonoma and earlier: right-click (or Control-click) TeXora in Applications, choose Open, then Open again.
Terminal (any version): remove the download mark.
xattr -dr com.apple.quarantine /Applications/TeXora.appThis is needed only once.
- Start TeXora. Home lists recent files and ways to begin.
- Choose New LaTeX presentation, Open PDF presentation or Open LaTeX project, pick a recent file, or drop a file on the window. Try the sample lecture opens a complete example talk.
- A
.texfile is compiled on opening. Edit it in the LaTeX studio (Cmd/Ctrl+E) or in another editor. - Press F5 to open the audience window, then move through the slides with the arrow keys or Space.
Each presentation opens in its own tab, with its own position, ink and timer. Every button shows its name and shortcut on hover.
Templates for new LaTeX presentations
Each template is a complete Beamer file with speaker notes.
| Template | Contents |
|---|---|
| Classic Green, Midnight, Minimal White, Conference, Sunrise | Static themes |
| Motion Lab | Animations drawn with TikZ |
| Flipbook | The frames of a GIF and charts that grow |
| Media Studio | A video clip and charts that draw themselves |
| Video Guide | \includevideo explained slide by slide, with a video and a GIF playing inside the slides |
Flipbook, Media Studio and Video Guide save their pictures and clips in a media folder beside the
new file.
The left panel holds the speaker notes; the right panel shows the current slide (what the audience sees) and the next slide. The timer, slide number and sections bar run along the bottom.
Areas of the presenter screen
| Area | Content |
|---|---|
| Top row | Open files; readiness (displays, duration, notes) or, while presenting, what the audience sees; the time of day; Present, which opens the audience window. |
| Notes | Speaker notes for the slide on screen. Scroll or pinch to change the text size. |
| Current slide | What the audience sees. |
| Next slide | The next slide or overlay step. |
| Timer | Elapsed time (click to pause or resume), talk duration (click to set), and play, pause and stop buttons. |
| Previous and next | One step back or forward, with the slide number and overlay step. |
| Sections | The talk's sections in their colours, sized by number of slides. A black line marks the position; ribbons mark bookmarks. Click a section to go there. |
| Pace | Time left, or time ahead, behind or over. When behind, a button offers to skip slides to recover the time. |
Large slide view (N) shows the slide across the main panel with the drawing tools beside it. Drag the dividers to resize panels; View > Fit all panels automatically resets them.
The second row of buttons acts on the open presentation: views, the audience screen, notes, drawing, zoom and navigation.
All toolbar buttons
Views
Audience screen
Notes
| Button | Name | Action | Key |
|---|---|---|---|
| Edit notes | Opens this slide's notes for editing | E | |
| Save notes | Saves the edited notes | Cmd/Ctrl+Enter | |
| Cancel | Discards the changes | Esc |
Drawing and pointing
Ink stays with each slide. C clears the ink on the current slide.
Zoom
| Button | Name | Action | Key |
|---|---|---|---|
| Zoom out | Makes the slide smaller | - | |
| Zoom in | Enlarges the slide; the wheel or a pinch zooms around the pointer | + | |
| Fit to page | Shows the whole slide | 0 |
Navigation
| Button | Name | Action | Key |
|---|---|---|---|
| First slide | Goes to the start | Home | |
| Previous | One step back | Left | |
| Next | The next overlay step or slide | Right, Space | |
| Last slide | Goes to the end | End |
Click the slide number between Previous and Next to type a slide number. Shift+Right and Shift+Left skip whole slides; Backspace returns to the previous position.
Top right
These buttons open a sidebar on the left; the same button or the cross closes it.
Notes come from Beamer notes pages (\setbeameroption{show notes on second screen=right}), from
\note{...} in the source, from a .pdfpc file, or from a Markdown notes file beside the
presentation. Edit notes (E) edits them in place; Cmd/Ctrl+Enter saves and Esc cancels.
Where notes are saved, formatting and languages
| Opened file | Notes saved in |
|---|---|
Lecture.pdf |
Lecture.note.md in the same folder |
Thesis defense.tex |
Thesis defense.tex, as \note{...} in each frame (or Thesis defense.note.md with Also save in the .tex file off) |
- PDF: keep the
.note.mdfile with the PDF when moving or sharing it. Each slide has a## Slide Nheading; the file can also be written in any text editor. Files namedLecture.notes.mdby earlier versions are still read and renamed on the next save. - LaTeX: the source is the single place for notes, so the presenter and the studio always agree.
A note saved in the presenter is written into the frame's
\note{...}, shows at once, and the slides rebuild. Settings > Speaker notes shows where the current notes are stored. - Formatting: Markdown
**bold**,*emphasis*,- listsand# headings; in a.texfile these become\textbf,\emphand lists. Clearing all text removes the slide's note. - Languages: any language and emoji, using the computer's fonts. Arabic and Hebrew are laid out right to left while typing and when shown. Notes are saved as UTF-8; UTF-16 and older encodings are read.
Any Beamer presentation works, including custom Beamer classes and themes. LaTeX
builds the slides, so every theme, colour scheme, template and package behaves as in any other editor;
TeXora reads the frames from Beamer's own .nav file.
What is supported, and the limits
- Own class or theme files:
\documentclass{acmedeck}or\usetheme{Acme}withacmedeck.clsorbeamerthemeAcme.styin the presentation's folder. The package check counts them as found. - Every frame form:
\begin{frame}…\end{frame}, the command form\frame{…}, and frame environments defined around a frame, in the file or in a local.sty/.cls, for example\newenvironment{customframe}[1]{\begin{frame}[environment=customframe]{#1}}{\end{frame}}. Their\note{…}, titles, overlays, folding and slide-to-source links all work. \againframe{label}counts as a slide of its own: it shows the note of the frame it repeats, and a note written there goes into that frame.- Limits: frames kept in separate files (
\input,\include) or made by a macro cannot be matched to the source one for one. TeXora still presents everything (slides, overlays, PDF notes pages and.note.mdnotes), but does not read\note{…}from the source and saves edited notes in the.note.mdfile, so no note lands on the wrong slide.
View > LaTeX studio (Cmd/Ctrl+E) shows the source on the left, the slide and its notes on the right, and compile messages at the bottom. Typing never saves or rebuilds by itself: Compile (Cmd/Ctrl+B) builds the slides, and Save (Cmd/Ctrl+S) rebuilds when Rebuild on save is on.
Studio controls and editing
| Control | Action |
|---|---|
| Compile | Saves the source and builds the slides. Cmd/Ctrl+B |
| Save | Saves the source; rebuilds if Rebuild on save is on. Cmd/Ctrl+S |
| Engine | pdfLaTeX, XeLaTeX or LuaLaTeX; Auto reads % !TEX program or the packages used |
| Check packages | Lists every package, theme and program the file needs, and how to get missing ones |
| Rebuild on save | Rebuilds whenever the file is saved, in the studio or another editor |
| Follow cursor | Shows the slide for the line under the cursor |
| Wrap text | Wraps long lines at the editor's width |
| Present | Returns to the presenter view |
- Folding: an arrow beside the line numbers folds an environment (
\begin{…}to\end{…}), a section up to the next heading of its level, the preamble, or a multi-line{…}group such as a long\note. A folded block shows "⋯ N lines"; the arrow or that label opens it, as does moving the cursor into it. The file always keeps every line. - Block guide: a green bar beside the line numbers marks the block containing the cursor; its first and last lines are highlighted.
- Errors and warnings: the Problems tab counts them separately and lists errors first. Errors stop the build; warnings do not. Line numbers are red for errors and orange for warnings.
- The editor keeps the keyboard while the studio is open, so typing never triggers presenter shortcuts. Other text fields, such as Search, receive their own input.
- Cmd/Ctrl+/ comments or uncomments the current or selected lines; Cmd/Ctrl+] always comments and Cmd/Ctrl+[ always uncomments.
- Double-click the slide preview to jump to its source. The < and > buttons move between slides; the wheel zooms.
- The bottom panel has Problems, Packages and Full log tabs. Click a problem to go to its line. Drag the panel's top edge to resize it.
- Drag the divider between source and preview to resize; double-click it to split evenly.
- A file that fails to compile on opening opens in the studio with its problems listed.
- The first time a file is opened, an untouched copy is kept as
<name>.tex.texora-backup. - Slide and source links use SyncTeX, included with TeX Live, MacTeX and MiKTeX.

An MP4 video and a GIF playing inside the slide, then two animate package animations.
Animations made with the LaTeX animate package (animateinline or \animategraphics) play on the
slide. Click to play or pause; in the presenter view a bar under the animation steps through frames.
Supported settings and using a GIF with animate
| Setting | Behaviour |
|---|---|
autoplay |
Starts when the slide is shown and stops on leaving it; otherwise waits for a click |
loop |
Restarts from the first frame |
palindrome |
Plays forward, then backward |
| Frame rate | Follows the source, including changes with \newframe[rate] |
Other animate options are untested. The audience sees the same frame as the presenter.
LaTeX cannot include a .gif directly. Split it into pictures with ffmpeg and
play them with \animategraphics, or use \includevideo (below), which plays GIFs without splitting.
mkdir frames
ffmpeg -i anim.gif frames/f%d.png # add -vf "fps=10,scale=640:-1" to shrink a large GIF
ls frames | wc -l # number of frames\usepackage{animate}
\animategraphics[autoplay,loop,width=0.5\textwidth]{10}{frames/f}{1}{30} % 30 = number of framesTeXora includes the LaTeX package texoravideo and finds it when compiling. GIFs play by themselves;
MP4 and other formats play through ffmpeg or VLC installed on the computer. TeXora contains no video
decoder and never downloads or installs one.
\usepackage{texoravideo}
\hypersetup{hidelinks}
...
\includevideo[width=0.5\textwidth]{clip.mp4}
\includevideo[height=5cm][loop,autoplay]{media/wave.gif}Options, players, sound and safety
Options. The first optional argument goes to \includegraphics. The second takes:
| Option | Effect |
|---|---|
autoplay |
Starts when the slide is shown |
loop |
Restarts at the end |
mute |
Plays without sound (in the slide and in VLC) |
posterat=<percent> |
Takes the poster from that point of the clip (default: first frame) |
poster=<image> |
Uses an image as the poster |
Files. The video must be in the .tex file's folder or a folder inside it, written with its folder:
{videos/clip.mp4}. Names may contain spaces and accents, but not % or #. Before compiling,
TeXora makes one poster per video in a texora-video folder, updated only when the clip changes, so
every PDF viewer shows the poster; only TeXora plays the clip.
Playback. Click to play or pause; another slide stops the clip, while overlay steps of the same slide keep it playing. Settings > Video chooses the player (Auto, ffmpeg, VLC or Off), each with a path field and a Test button. ffmpeg plays inside the slide; VLC plays in its own window. Without a player, the clip shows "This video needs VLC or ffmpeg installed on your computer." with Get VLC, Get ffmpeg and, on macOS and Linux, Copy install command. TeXora only copies the command; it never runs it.
Sound. With ffmpeg, the sound plays through ffplay, part of every ffmpeg install. It starts,
pauses and loops with the picture and stops on leaving the slide. The picture follows the sound's own
clock, so the two stay in sync (within about 5 ms in tests). Settings > Video > Play sound turns
sound on or off. GIFs have no sound. With VLC only (no ffmpeg), VLC plays the sound itself in its own
window; Play sound and mute apply there too.
Problems. A missing file, a file that is not a video, or a path outside the presentation's folder
(absolute paths, .., links leading out, web addresses) shows a message over the poster and under
Problems.
Safety.
- ffmpeg, ffplay and VLC run as separate programs with an argument list, never through a shell, and end when the slide changes.
- ffmpeg and ffplay read only local files (
-protocol_whitelist file) in real video formats, so a playlist or concat list disguised as a video cannot reach other files or the web. - VLC receives the full path after
--, and only files whose content is a video. - The program and its arguments come only from Settings. A presentation, or any file in its folder, cannot set them.
Clips that open in an external video player (\movie, media9)
Beamer's \movie (multimedia package) and media9's \includemedia show a play button in the
presenter view. A click opens the clip in the system's video player, which can be moved to the
projector; some players start paused.
\usepackage{multimedia}
\movie[width=4cm,height=2.25cm]{\fbox{Play}}{clip.mp4}- A media9 clip set to
activate=pageopenopens when its slide is shown while the audience window is open. - Keep a
\moviefile in the presentation's folder. Clips embedded by media9 are extracted by TeXora. \movie[externalviewer],\href{run:...}and\href{file:...}links are not opened.- These clips do not play inside the slide; use
\includevideofor that.
- F5 opens the audience window, fullscreen on a second display; on a single display, F11 makes it fullscreen.
- B blanks the screen, W shows a whiteboard, F freezes the audience view.
- Ink, the laser pointer and zoom appear on the audience screen as they are used.
- Contents (T) lists the talk's sections in colour, with bookmarks and questions; Back to where I was returns to the previous position.
- Analytics (Y) times every rehearsal slide by slide, compares it with the previous run and exports CSV.
- Settings covers text size, the LaTeX engine, required packages, video, notes, updates and every keyboard shortcut.
- The ? menu has Documentation, System check, Command-line tool, Keyboard shortcuts, Check for updates and About TeXora.
Updates
When a new version is published, a notice appears in the lower right corner with See what's new, Later and Skip this version, and a dot appears on the ? button. The update box links the package for the current system and the release page; installing over the existing copy keeps the settings. ? > Check for updates checks at any time; Settings > Updates turns automatic checks off. See CHANGELOG.md for the changes in each version.
On macOS, Cmd is used; on Windows and Linux, Ctrl. All shortcuts can be changed in Settings. In the LaTeX studio, single-key shortcuts are inactive while editing.
All default shortcuts
| Action | Keys | Action | Keys |
|---|---|---|---|
| Next / previous step | Right, Space / Left | Next / previous slide | Shift+Right / Shift+Left |
| First / last slide | Home / End | Go to slide | G |
| Audience window | F5 | Fullscreen | F11 |
| Black / white screen | B / W | Freeze audience | F |
| Overview | O | Split view | S |
| Large slide | N | Back | Backspace |
| Start or pause timer | P | Stop and reset timer | R |
| Set talk duration | U | Bookmark slide | M |
| Mark a question | Q | Contents | T |
| Search | Cmd/Ctrl+F | Analytics | Y |
| Pointer / pen / highlighter | V / D / H | Eraser / laser | X / L |
| Zoom to area | Z | Zoom in / out / fit | + / - / 0 |
| Undo ink / clear ink | Cmd/Ctrl+Z / C | Edit notes / save notes | E / Cmd/Ctrl+Enter |
| LaTeX studio | Cmd/Ctrl+E | Compile LaTeX | Cmd/Ctrl+B |
| Save source | Cmd/Ctrl+S | Check required packages | Cmd/Ctrl+K |
| Toggle comment (studio) | Cmd/Ctrl+/ | Comment / uncomment | Cmd/Ctrl+] / Cmd/Ctrl+[ |
| Open file | Cmd/Ctrl+O | Home | Cmd/Ctrl+L |
| Close tab | Cmd/Ctrl+W | Settings | Cmd/Ctrl+, |
| Cancel | Esc |
TeXora talk.pdf # open a presentation (PDF or .tex)
TeXora --self-test # check this copy; exit code 0 means it passed
TeXora --help # all options? > Command-line tool shows the path of the installed copy.
Requires Rust (stable). The PDF engine (PDFium) is downloaded on the first build.
git clone https://github.com/khalidt/TeXora.git
cd TeXora
cargo build --release
./target/release/TeXora
cargo testProject layout
| Path | Content |
|---|---|
src/ |
The application, in Rust with egui and PDFium |
assets/ |
Icon, Home picture, fonts, sample lecture, templates and the texoravideo LaTeX package |
scripts/ |
Packaging, installer, release and icon scripts |
installer/ |
Windows installer (Inno Setup) |
.github/workflows/ |
Continuous tests and the release workflow |
screenshots/ |
Pictures used in this README |
Copyright 2026 Khalid Alkhaldi. Licensed under PolyForm Noncommercial 1.0.0: free to use, modify and share for any non-commercial purpose, including personal use, study, teaching, research and non-profit work. Commercial use requires the author's permission. The app icon and Home picture are the author's artwork and are not covered by the licence. Libraries and fonts are listed in CREDITS.md and THIRD-PARTY-LICENSES.md.
