Release 4.228.0
12 Nov 2026 · pinned package [email protected]
- A page's sections as tabs on a phone (the owner, 11-11: "consolidate these into tabs, self-contained tabs, so the page isn't so freaking huge … at least on mobile").
showcase.parts({ name, items: [{ id, label, count, html }], front })shows one part at a time with a tab bar (its name and count) at 900 px and under, 600 for a front page; every part stays in the HTML (crawlers, AI readers); radios and:has(), no script; the arrow keys move between parts; wide screens and browsers without:has()stack them.ov-parts.cssis the same look alone, for a page that does not load showcase.css (Live's home). showcase.pick(): the pick block, once. Twenty-five sites kept a copy of a "pick block" (server/render/short.js) whose chips only jumped to a pane, so a phone still showed them all.pick({ key, label, head, panes, checked })is that block onparts(): a heading, then tabs on a phone, every pane in the HTML with its id,ov-parts.csslinked by its hash.parts()takescheckedtoo, and a link to something inside a part opens it (CSS:target, no script).- Caption it with AI. A picture in any composer has ✨: one tap sends it, made small (JPEG, 768 px), to the Frame's
/api/frame/captionon the person's own allowance; the caption fills an empty box (theirs to change) andovc:captioncarries the alt text.ctx.alt(file)andctx.caption(file)for a page;data-ovc-caption="off"leaves it out. OpenVibeNavbar.token()reads the person's Network token the site gaveinit(). Caption it sends it as the Bearer on any site (the Network's session cookie is not sent cross-site), and the composer's settings sync, which asked for it all along, now finds it.- A picture alone is a post. The menu's Feed composer no longer asks for a description of every picture: one left empty is written by AI as it posts, and a post goes without one if that cannot be done.