PowerPoint Viewer Sidekick
A read-only PowerPoint viewer for Visual Studio Code with the same compact,
native-feeling workflow as PDF Viewer Sidekick. It opens presentations from
local folders, Remote SSH, WSL, Dev Containers, virtual workspaces, and other
VS Code filesystem providers without copying them to a local path or uploading
them to a service.
Current features
- Default read-only editor for
.pptx, .pptm, .ppsx, .ppsm, and .potx
- Folder gallery of first-slide previews, with double-click to open in the
viewer
- Continuous slide scrolling with windowed rendering near the viewport
- PowerPoint-style slide overview with resizable, lazy previews and keyboard navigation
- PowerPoint-style slideshow mode: one slide per screen, VS Code chrome
hidden, and slide transitions
- Presenter laser pointer and pen, with ink kept per slide
- Slide tone cycling between normal, inverted, and dimmed for dark themes
- Save the current slide as a PNG image
- Previous, next, direct-slide, Home, End, Page Up, and Page Down navigation
- Full-presentation text search with snippets, match-case and whole-word modes
- Active search-result highlighting on the rendered slide
- Lazy slide thumbnails and an automatically derived slide-title outline
- Fit-slide, fit-width, preset, custom, Ctrl/Cmd+wheel, and double-click zoom
- Clockwise rotation
- Selectable rendered text
- Embedded SVG pictures, including PowerPoint's newer
asvg:svgBlip format
- Animated slides shown at their final static stage: entrances are visible,
exits are hidden, and supported motion, rotation, and scale effects use
their endpoints
- Local-font detection with a missing-font indicator and automatic
Aptos/Calibri/Arial-compatible fallback stacks
- In-presentation and external hyperlinks
- Per-URI slide, zoom, rotation, sidebar, and overview restoration
- External-change notification and reload
- Light, dark, and high-contrast VS Code theme integration
- File-size confirmation and bounded ZIP parsing for untrusted presentations
- Local and virtual/remote filesystem support
Presentation contents are parsed and rendered locally in the VS Code webview.
The extension does not make network requests, execute VBA macros, or collect
telemetry. Font diagnostics check only family names requested by the current
presentation; the extension does not enumerate or copy installed fonts.
Commands
PowerPoint Viewer Sidekick: Open PowerPoint Presentation
PowerPoint Viewer Sidekick: Open Current Presentation in Viewer
PowerPoint Viewer Sidekick: Go to Slide
PowerPoint Viewer Sidekick: Find in Presentation
PowerPoint Viewer Sidekick: Toggle Navigation Sidebar
PowerPoint Viewer Sidekick: Toggle Slide Overview
PowerPoint Viewer Sidekick: Zoom In
PowerPoint Viewer Sidekick: Zoom Out
PowerPoint Viewer Sidekick: Rotate Clockwise
PowerPoint Viewer Sidekick: Reload Presentation
PowerPoint Viewer Sidekick: Cycle Slide Tone (Normal, Invert, Dim)
PowerPoint Viewer Sidekick: Save Slide as Image
PowerPoint Viewer Sidekick: Start Slideshow
PowerPoint Viewer Sidekick: Exit Slideshow
PowerPoint Viewer Sidekick: Open in Desktop (PowerPoint)
PowerPoint Viewer Sidekick: Browse Presentations in Folder
Folder gallery
PowerPoint Viewer Sidekick: Browse Presentations in Folder opens a grid of
first-slide previews for every presentation in one folder. The same command
sits on the explorer context menu for folders and presentations, and on the
viewer toolbar, where it browses the folder holding the open presentation.
Double-click a preview to open that presentation in the viewer. A single click
selects; the arrow keys, Home, and End move the selection, and Enter or
Space opens it. Each tile also carries buttons to open the presentation in
the viewer, open it in desktop PowerPoint, and reveal it in the explorer.
The toolbar filters by name, sorts by name, date modified, or file size, sets
the preview size, and toggles subfolders. Sort order, preview size, and the
subfolder choice are remembered for the next gallery; the filter always starts
empty.
Previews are rendered only while a tile is near the viewport and are released
again once it scrolls away, so a folder of large decks does not hold every
presentation in memory. Only the first slide of each presentation is parsed in
detail, at most two at a time. Presentations above
powerpointSidekick.gallery.previewSizeLimitMB are listed without a preview,
and the gallery reloads itself when presentations in the folder are added,
changed, or removed.
Slideshow
Press the play button in the viewer toolbar (or run
PowerPoint Viewer Sidekick: Start Slideshow) to present the presentation one
slide per screen. The slideshow starts on the current slide, so selecting a
thumbnail in Slide Overview first — or pressing Shift+Enter on it — presents
from there.
| Key |
Action |
Space, Enter, →, ↓, Page Down |
Next slide |
Backspace, ←, ↑, Page Up |
Previous slide |
Home, End |
First or last slide |
B |
Blank the screen to black; any key resumes |
W |
Blank the screen to white; any key resumes |
L |
Toggle the laser pointer |
P |
Toggle the pen |
E |
Erase the ink on this slide |
Escape |
Put the laser or pen away, then end the slideshow |
Clicking a slide advances it, right-clicking goes back, and the mouse wheel
moves one slide per gesture. A control bar and slide counter fade in when the
pointer moves and fade out again while it is still.
Pen strokes are stored per slide in slide-relative coordinates, so going back
to an annotated slide shows the ink again, and it stays anchored to the same
spot on the slide when the window is resized. Ink lives only for the duration
of the slideshow and is never written to the presentation. While the pen is
armed, clicking draws instead of advancing.
A slideshow hides the window chrome with VS Code's Zen Mode, which also takes
the window full screen unless zenMode.fullScreen is turned off. VS Code
exposes no way to read the current Zen Mode state, so starting a slideshow
while Zen Mode is already on leaves it, and exiting turns it back on; set
powerpointSidekick.slideshow.enterZenMode to false to leave the window
chrome alone. The slideshow is not part of the saved view state, so it never
resumes on its own when a presentation is reopened, and it ends when its
editor tab is hidden or closed.
Slide tone and slide images
The slide tone button cycles the rendered slide between normal, inverted, and
dimmed, which makes a white slide bearable inside a dark theme. The tone is
remembered per presentation alongside slide, zoom, and rotation, and it
applies to thumbnails and Slide Overview too.
The camera button saves the current slide as a PNG next to the presentation.
The export renders a detached copy of the slide, so the saved image carries
the presentation's real colors no matter which slide tone is on screen, and it
is written through the workspace filesystem so it works over Remote SSH and in
virtual workspaces.
Settings
powerpointSidekick.defaultZoom
powerpointSidekick.rememberViewState
powerpointSidekick.fileSizeWarningMB
powerpointSidekick.slideshow.transition
powerpointSidekick.slideshow.showSlideCounter
powerpointSidekick.slideshow.advanceOnClick
powerpointSidekick.slideshow.wheelAdvance
powerpointSidekick.slideshow.controlsIdleTimeoutMs
powerpointSidekick.slideshow.enterZenMode
powerpointSidekick.slideshow.penColor
powerpointSidekick.slideshow.penWidth
powerpointSidekick.gallery.thumbnailWidth
powerpointSidekick.gallery.sortBy
powerpointSidekick.gallery.includeSubfolders
powerpointSidekick.gallery.previewSizeLimitMB
powerpointSidekick.gallery.maxFiles
The viewer supports PowerPoint Open XML packages. Legacy binary .ppt files
are intentionally not registered. Macro-enabled packages can be viewed, but
macros are never executed.
PowerPoint's format is extensive, so some content may be approximated or
omitted. Animations do not play: the viewer resolves entrance/exit visibility,
paragraph exits, motion, rotation, and scale to a final static stage.
Emphasis/color effects, media commands, and complex timing may be approximated
or ignored, and slide transitions do not play. Other current renderer
limitations include 3D effects and true 3D charts, equations, slide notes,
embedded OLE objects, and full EMF/WMF vector rendering. Password-protected
presentations are not supported. Editing, printing, and slide reordering are
not implemented; source files are never modified.
Development
npm install
npm run typecheck
npm test
npm run build
Press F5 in VS Code to launch an Extension Development Host. Run
npm run test:integration for the VS Code smoke test and npm run package to
produce a VSIX.
PowerPoint rendering is provided by @aiden0z/pptx-renderer under the
Apache-2.0 license. Its license is included in packaged builds.