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: click or
Space to view,
Ctrl/Cmd+click to view beside, double-click or Enter to open in
PowerPoint
- 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, pen, and highlighter, 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 PowerPoint Files in Folder
Folder gallery
PowerPoint Viewer Sidekick: Browse PowerPoint Files 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.
Click a preview, or press Space, to view that presentation in the viewer;
Ctrl+click (Cmd+click on macOS) views it beside the gallery and keeps focus
in the gallery. Double-click, or press Enter, to open it in desktop
PowerPoint. The arrow keys, Home, and End move the selection. 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 |
Shift+L |
Toggle the laser pointer with a fading tail |
L L (double-tap) |
Switch the laser pointer's fading tail on or off |
P |
Toggle the pen |
Shift+P |
Toggle the fading pen |
P P (double-tap) |
Switch the pen between permanent and fading ink |
H |
Toggle the highlighter |
Shift+H |
Toggle the fading highlighter |
H H (double-tap) |
Switch the highlighter between permanent and fading ink |
E |
Erase the ink on this slide |
| Other letters, with the laser, pen, or highlighter armed |
Pick that tool's color (see below) |
Shift + a color letter |
Pick the complement of that letter's color |
Escape |
Put the laser, pen, or highlighter 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. Each control-bar button
with a letter shortcut shows that letter in its corner.
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 or
highlighter is armed, clicking draws instead of advancing. Highlighter strokes
are translucent and sit beneath pen ink, so text under them stays readable.
Hold Shift while dragging to draw a straight line from where Shift was
pressed; release it to carry on freehand. Hold Alt while dragging to draw a
rectangle from where Alt was pressed to the pointer; release it to keep the
rectangle and carry on freehand. E erases both.
Fading ink, armed with Shift+P or Shift+H (or a Shift-click on the pen or
highlighter button), is for pointing something out without leaving a mark:
each stroke stays for two seconds after you lift the pointer, then fades out
over one more. Double-tapping P or H switches that tool between permanent
and fading ink and leaves it armed: from a permanent pen (or a put-away one) to
a fading pen, and from a fading pen back to a permanent one. While fading ink
is armed, its button's fill fades too. With reduced motion turned on, strokes
vanish at three seconds instead of fading.
The laser pointer has no tail by default. Double-tap L (or press Shift+L,
or Shift-click its button) for a tail that follows the pointer and fades out
within half a second; double-tap L again to switch it off. While the tail is
on, the laser button's fill fades, as it does for fading ink.
Press and hold the laser, pen, or highlighter button in the control bar (or
right-click it) to open that tool's palette. Its top row picks a color from the
eight color-blind-safe Okabe–Ito colors: black, orange, sky blue, bluish green,
yellow, blue, vermillion, and reddish purple. Its bottom row picks one of four
sizes: the laser pointer's diameter, or the pen's or highlighter's stroke
width. Each tool keeps its own color and size until the viewer is closed. Until
one is picked, the laser and pen use the penColor setting, the pen uses
penWidth, the laser is medium, and the highlighter is a medium yellow. Ink
already drawn keeps the color and width it was drawn in.
While the laser, pen, or highlighter is armed, a letter key switches it to a
color, the same palette as KPen. Hold Shift with the letter for that color's
complement (the opposite hue, at the same saturation and lightness; grays stay
as they are). B and W pick blue and white while a tool is armed, so blank
the screen with . and , then; E still erases, and H, L, and P still
arm the tools. With no tool armed, letters do what the table above says.
Slideshow letter keys, and . and ,, also work with a keyboard layout that
doesn't type Latin letters, such as Thai: the key in the letter's position on
a US keyboard does the same thing, so there is no need to switch layouts.
Q |
W |
R |
T |
Y |
U |
I |
O |
#777777 |
#ffffff |
#d81b60 |
#00a6a6 |
#ffcc00 |
#d45087 |
#3b5bdb |
#ff9900 |
A |
S |
D |
F |
G |
J |
K |
#e69f00 |
#56b4e9 |
#009e73 |
#f0e442 |
#89f336 |
#d55e00 |
#000000 |
Z |
X |
C |
V |
B |
N |
M |
#d7b7e8 |
#8fc9f5 |
#00ffff |
#bfe7b2 |
#0072b2 |
#f6c38b |
#ff00ff |
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.