Download the single file below and open it in any modern browser — it's the document, the viewer and the editor in one. Shipped files self-update through the signed release channel.
-
One page for PowerPoint, in and out: bento.page/convert. Drop a
.pptxto open it as a bento/slides deck, or drop a bento/slides deck (or
its document JSON) to save it as PowerPoint. The page detects what you
dropped and offers what it can become; there's a sample deck to try. As
before, nothing is uploaded: the conversion runs in your browser, and the
page only downloads the signed bento/slides release when it makes a deck.
bento.page/import now opens this page, so its links keep working. In
slides, the Save menu has both ways in: "Import PowerPoint…" opens the page
ready for a .pptx, and "Export for PowerPoint…" opens it for this deck's
saved file. -
Saving as PowerPoint keeps more of your deck. Speaker notes, links,
tables, charts, pictures and hidden slides come across, and now code
blocks too (as editable text in Consolas, indentation kept) and embedded
documents (as a picture of what they show). WebP pictures are converted to
PNG on bento.page/convert. Interactive states come along as hidden slides
that their links lead to (untick the box on the page, or pass--no-states,
to leave them out). After each conversion you get a list of
what was approximated or left out, and on which slides: animations show
their final frame, Morph becomes a plain cut, formulas stay as their LaTeX
source, and code loses its syntax colours. Page numbers stay right after
hidden slides. Every export is checked before it is written, so you never
get a file PowerPoint wants to repair. From a terminal:
node convert/cli.mjs deck.bento.html --to pptx(with--no-statesand
--report r.json). Export is a page, a library and a command-line tool
rather than a button in the app, so every shared file stays small and the
app stays focused. -
Security: update this file. This release closes further issues found in
our own review. None needs anything from you beyond updating, except one
step if you share decks live: open each shared deck after updating and use
Reset access once. What each issue was is described here once people have
had time to update. -
An edit made while the deck is saving is no longer marked saved. Saving
takes a moment, and an edit made in that moment — by you, or by someone in a
live session — used to be shown as saved while the file on disk was still
missing it. The unsaved-changes dot now goes out only when the file holds
exactly what is on screen; otherwise it stays on and the next save (or
auto-save) writes the edit. ⌘S, auto-save and "Update this file" also wait
for each other instead of writing the file at the same time. -
Turn text into code without leaving the text box. Type a fenced block
— a line of three backticks (optionally with a language, like```js
or```python), your code, and a closing line of three backticks —
and when you finish editing it becomes a real Code element: highlighted,
with its language set, and able to morph between slides. If the box held
only the fence it turns into the Code element in place; text above or below
stays as text boxes stacked around it. Pasting fenced text works the same,
into a text box or straight onto the slide. Backticks inside the code are
kept as typed, and an unclosed fence stays plain text. You can also select
one or more lines and press`to set them in code style; press it
again to undo that. -
Ghost Cut: move elements with ⇧⌘X (Ctrl+Shift+X). The selection fades
where it stands instead of disappearing; paste moves it to the pointer — on
this slide or another — keeping it the same element, in one undoable step.
Escape puts it back. It is also copied, so pasting in another deck works as
after ⌘C. Plain ⌘X is unchanged. Thanks to senthan-07 (#679). -
Long speaker notes scroll in presenter view. Notes that are taller than
the space beside the current and next slides now get their own vertical
scrollbar instead of being cut off. -
Dollar amounts next to escaped dollars stay text. In a line like
"$10, and $x$", the first dollar could pair with an escaped one and the
words between were treated as a formula: the editor flagged them as a
formula that failed to render. An escaped\$now never opens or closes a
formula, inline or display, while an escaped dollar inside a formula still
belongs to it. -
Copy several slides at once. With several slides selected in the
sidebar, ⌘C (or Copy in the context menu) now copies all of them, in deck
order, ready to paste into any deck; it used to copy only the current
slide. Interactive states stay behind for now, since a pasted state would
arrive as an ordinary slide cut off from its parent. Thanks to tikurahul
(#615). -
Screen readers announce what each Save-as and Share command does. The
menus keep one-line rows with the description on hover, and the same text
is now read out as the command's description; the Save-as list scrolls when
a short window cannot hold it. The Share menu's actions are plain rows like
Save as, rather than a stack of boxed buttons. Dialog
titles are a little smaller (17px), keyboard shortcuts in the help sheet are
set in the interface font and line up on the right, and keyboard focus
draws a clear amber ring. Also fixed: the Save caret's ▾ vanished at
medium window widths, rows in the phone ⋯ menu were centred, and menus in
the dark theme cast a navy shadow that did not show. -
Save is the top bar's primary button; the bar's other buttons line up.
Save and its save-as caret are now filled with the text colour, like the
primary buttons in dialogs, in light and dark themes. The amber
unsaved-changes dot has a dark ring so it still shows on the light fill of
the dark theme. The ? help button is now the same 36×30 as its neighbours
(it was 28×29). The bento/slides wordmark is a real button: it can be
reached with Tab, Enter opens About, screen readers name it, and on a phone
it is a 44px target. Switching the interface language no longer leaves the
old top bar's resize listener, size observer and menu listeners running
behind the new one. Found by spaces' top-bar parity check (#567).