openvibers/openvibe.sites Commits

openvibe-shared v1.29.2 (from its earlier pin): navbar dropdowns are no longer clipped by the links row, changing the theme repaints the page background, bright accents get dark button text (WCAG), the navbar brand is more compact. npm test: deploy wrapper: all checks passed

OP OpenVibers committed 29 Sept 2026 · 9f02df53ce · 70 files, +176 −174


Changes

ddiff --git a/dist/_shared/navbar.js b/dist/_shared/navbar.js
iindex 50e0f49..73ccb97 100644
---- a/dist/_shared/navbar.js
++++ b/dist/_shared/navbar.js
@@@ -1,30 +1,4 @@
--// ═══════════════════════════════════════════════════════════════
--// OpenVibe — Universal Navbar
--// Consistent top bar across all services with logo, navigation,
--// notification bell, account switcher, and theme-aware styling.
--// Usage: OpenVibeNavbar.init({ service, token, user, apiBase })
--// Optional: loginUrl (override the Sign In href), sessionUrl (same-origin
--// endpoint returning { user } — asked when no usable ov_token exists, including
--// when a stored token turned out stale), logoutUrl (where Sign out goes, e.g. the
--// site's '/auth/logout?next={path}', so a server-side session ends too; {url} is
--// the full return URL, {path} its local path — loginUrl takes both too),
--// onLogin/onLogout callbacks. When no `user` is passed the navbar resolves
--// it itself: ov_token cookie → localStorage → token opt → sessionUrl, then
--// GET {apiBase}/api/auth/me with `Authorization: Bearer <token>`.
--//
--// Brand: derived from the hostname — `pastes.openvibe.tools` renders as
--// Pastes · OpenVibe · Tools (three segments, the subdomain first so the
--// context reads left-to-right), `openvibe.live` as OpenVibe · Live. Pass
--// brand: { sub, tld, name, icon, variant } to override any part, or the
--// legacy brandName/brandIcon. compact: 'auto' (default — the brand shortens
--// to the subdomain on narrow viewports), 'always', 'never'.
--// Menus are modular: every site keeps the shared account menu and adds its own
--// pieces — links: [{label, href, icon?, active?}] replaces the service's top
--// links; menu: { before: [item], after: [item] } adds dropdown rows
--// ({label, href, icon, onClick, danger, external}); OpenVibeNavbar.addMenuItem()
--// / setLinks() do the same at runtime. Signed-in users also get a
--// "Recently used" row fed by the shared history module when it is loaded.
--// ═══════════════════════════════════════════════════════════════
++// OpenVibe — the shared navbar (the OpenVibe Frame's top bar). Options and behaviour: README.md, "The navbar".
(function (root) {
'use strict';
@@@ -57,7 +31,7 @@
s.textContent = `
.openvibe-navbar {
position: sticky; top: 0; z-index: 10000;
-- height: 52px; display: flex; align-items: center; padding: 0 16px; gap: 8px;
++ height: 52px; display: flex; align-items: center; padding: 0 clamp(8px, 1.6vw, 16px); gap: 6px;
background: var(--bg-secondary, #252530);
border-bottom: 1px solid var(--border, #333340);
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
@@@ -67,19 +41,19 @@
/* Brand group: mark + linked wordmark + launcher read as one control. Every property a host
page might set on bare "nav a" / "a" is reset here, so the brand looks the same everywhere. */
.openvibe-navbar .openvibe-navbar-brand a, .openvibe-navbar .openvibe-navbar-brand a:hover { all: unset; cursor: pointer; color: inherit; font: inherit; }
-- .openvibe-navbar .openvibe-navbar-brand { gap: 8px; padding: 3px 4px 3px 3px; border-radius: 12px; margin-right: 2px; }
++ .openvibe-navbar .openvibe-navbar-brand { gap: 6px; padding: 2px; border-radius: 12px; margin-right: 0; }
.openvibe-navbar .openvibe-navbar-brand a.flame { display: inline-grid; place-items: center; width: 30px; height: 30px; border-radius: 9px; transition: background .15s; }
.openvibe-navbar .openvibe-navbar-brand a.flame:hover { background: var(--accent-glow, rgba(59,130,246,.14)); }
.openvibe-navbar .openvibe-navbar-brand .name { align-items: center; gap: 0; font-size: 15.5px; letter-spacing: -.25px; }
-- .openvibe-navbar .openvibe-navbar-brand .name a { padding: 3px 2px; border-radius: 6px; transition: color .15s, background .15s; }
++ .openvibe-navbar .openvibe-navbar-brand .name a { padding: 3px 1px; border-radius: 6px; transition: color .15s, background .15s; }
.openvibe-navbar .openvibe-navbar-brand .name a.b-sub { color: var(--text-primary, #e6edf7); font-weight: 750; }
.openvibe-navbar .openvibe-navbar-brand .name a.b-core { color: var(--text-primary, #e6edf7); font-weight: 700; }
.openvibe-navbar .openvibe-navbar-brand .name a.b-tld { color: var(--accent-light, var(--accent, #60a5fa)); font-weight: 700; }
.openvibe-navbar .openvibe-navbar-brand.has-sub .name a.b-core, .openvibe-navbar .openvibe-navbar-brand.has-sub .name a.b-tld { color: var(--text-secondary, #a8b3c4); font-weight: 600; }
.openvibe-navbar .openvibe-navbar-brand .name a:hover { color: var(--accent-light, var(--accent, #60a5fa)); background: var(--accent-glow, rgba(59,130,246,.12)); }
-- .openvibe-navbar .openvibe-navbar-brand .b-dot { margin: 0; padding: 0 .5px; opacity: .55; }
++ .openvibe-navbar .openvibe-navbar-brand .b-dot { margin: 0; padding: 0; opacity: .5; }
.openvibe-navbar .openvibe-navbar-brand a:focus-visible, .ovnav-launch:focus-visible { outline: 2px solid var(--accent, #3b82f6); outline-offset: 1px; }
-- .ovnav-launch { all: unset; box-sizing: border-box; cursor: pointer; color: var(--text-secondary, #a8b3c4); width: 32px; height: 32px; border-radius: 10px; display: inline-grid; place-items: center; flex: none; margin-right: 10px; border: 1px solid transparent; transition: background .15s, color .15s, border-color .15s; }
++ .ovnav-launch { all: unset; box-sizing: border-box; cursor: pointer; color: var(--text-secondary, #a8b3c4); width: 32px; height: 32px; border-radius: 10px; display: inline-grid; place-items: center; flex: none; margin-right: 2px; border: 1px solid transparent; transition: background .15s, color .15s, border-color .15s; }
.ovnav-launch:hover, .ovnav-launch[aria-expanded="true"] { background: var(--accent-glow, rgba(59,130,246,.14)); color: var(--accent-light, var(--accent, #60a5fa)); border-color: color-mix(in srgb, var(--accent, #3b82f6) 35%, transparent); }
.ovnav-launch svg { display: block; transition: transform .25s cubic-bezier(.2,1.4,.3,1); }
.ovnav-launch[aria-expanded="true"] svg { transform: rotate(45deg) scale(.92); }
@@@ -96,7 +70,7 @@
@keyframes ovnavPulse { 70% { box-shadow: 0 0 0 6px rgba(239,68,68,0); } 100% { box-shadow: 0 0 0 0 rgba(239,68,68,0); } }
.openvibe-navbar .ovnav-caret { font-size: 10px; opacity: .6; }
.openvibe-navbar .ovnav-dd { position: relative; display: inline-flex; flex: none; }
-- .openvibe-navbar .ovnav-dd-menu { display: none; position: absolute; top: 100%; left: 0; min-width: 180px; padding: 5px; border-radius: 12px; z-index: 1002; background: var(--bg-elevated, var(--bg-secondary, #111826)); border: 1px solid var(--border, rgba(255,255,255,.12)); box-shadow: 0 18px 44px rgba(0,0,0,.45); flex-direction: column; gap: 2px; }
++ .openvibe-navbar .ovnav-dd-menu { display: none; position: fixed; top: 56px; left: 0; min-width: 180px; padding: 5px; border-radius: 12px; z-index: 1002; background: var(--bg-elevated, var(--bg-secondary, #111826)); border: 1px solid var(--border, rgba(255,255,255,.12)); box-shadow: 0 18px 44px rgba(0,0,0,.45); flex-direction: column; gap: 2px; }
.openvibe-navbar .ovnav-dd:hover .ovnav-dd-menu, .openvibe-navbar .ovnav-dd.open .ovnav-dd-menu, .openvibe-navbar .ovnav-dd:focus-within .ovnav-dd-menu { display: flex; }
.openvibe-navbar .ovnav-chip { all: unset; box-sizing: border-box; cursor: pointer; display: inline-flex; align-items: center; gap: 6px; height: 32px; padding: 0 11px; border-radius: 999px; font: 700 13px/1 inherit; color: var(--chip-c, var(--text-primary, #e6edf7)); background: color-mix(in srgb, var(--chip-c, var(--accent, #3b82f6)) 12%, transparent); border: 1px solid color-mix(in srgb, var(--chip-c, var(--accent, #3b82f6)) 38%, transparent); font-variant-numeric: tabular-nums; }
.ovnav-chip[data-tone="gold"] { --chip-c: #fbbf24; } .ovnav-chip[data-tone="green"] { --chip-c: #4ade80; } .ovnav-chip[hidden] { display: none !important; }
@@@ -198,7 +172,7 @@
.openvibe-navbar-dropdown-header .ud-wallet a { display: inline-flex; align-items: center; gap: 5px; margin-top: 5px; padding: 2px 9px; border-radius: 999px; font-size: 12px; font-weight: 700; text-decoration: none; color: #fbbf24; background: rgba(251,191,36,.12); border: 1px solid rgba(251,191,36,.3); }
.openvibe-navbar-dropdown-menu .sep { height: 1px; background: var(--border, #333340); margin: 4px -8px; }
-- .openvibe-navbar-links { display: flex; align-items: center; gap: 4px; margin-left: 8px; }
++ .openvibe-navbar-links { display: flex; align-items: center; gap: 2px; margin-left: 2px; }
.openvibe-navbar-links a {
padding: 6px 12px; border-radius: 6px; font-size: 13px; font-weight: 500;
color: var(--text-secondary, #b0b0b8); text-decoration: none;
@@@ -715,7 +689,7 @@
const item = byId.get(a.getAttribute('data-link-id'));
// A parent of a dropdown opens it on touch (there is no hover); a second tap follows the link.
const dd = a.parentElement && a.parentElement.classList.contains('ovnav-dd') ? a.parentElement : null;
-- if (dd && matchMedia('(hover: none)').matches && !dd.classList.contains('open')) { e.preventDefault(); nav.querySelectorAll('.ovnav-dd.open').forEach(x => x.classList.remove('open')); dd.classList.add('open'); return; }
++ if (dd && matchMedia('(hover: none)').matches && !dd.classList.contains('open')) { e.preventDefault(); nav.querySelectorAll('.ovnav-dd.open').forEach(x => x.classList.remove('open')); dd.classList.add('open'); placeDd(dd); return; }
if (item && typeof item.onClick === 'function') { const r = item.onClick(e); if (r === false) e.preventDefault(); closeDrawer(); if (e.defaultPrevented) return; }
if (typeof _config.onNavigate === 'function' && a.target !== '_blank') {
let same = false; try { same = new URL(a.href, location.href).origin === location.origin; } catch { /* */ }
@@@ -724,6 +698,16 @@
closeDrawer();
});
document.addEventListener('click', (e) => { if (!e.target.closest || !e.target.closest('.ovnav-dd')) nav.querySelectorAll('.ovnav-dd.open').forEach(x => x.classList.remove('open')); });
++ // Dropdowns hang below the links row, which scrolls sideways and would clip them: fixed, under the link (less a filtered bar's offset).
++ const placeDd = (dd) => {
++ const m = dd && dd.querySelector(':scope>.ovnav-dd-menu'); if (!m) return;
++ let cb = dd.parentElement, o = { top: 0, left: 0 };
++ for (; cb && cb !== document.body; cb = cb.parentElement) { const c = getComputedStyle(cb); if (c.transform + c.filter + (c.backdropFilter || 'none') !== 'nonenonenone') { o = cb.getBoundingClientRect(); break; } }
++ const r = dd.getBoundingClientRect();
++ m.style.top = `${r.bottom - o.top}px`; m.style.left = `${Math.max(8, Math.min(r.left, innerWidth - 188)) - o.left}px`;
++ };
++ const place = (e) => placeDd(e.target.closest && e.target.closest('.ovnav-dd'));
++ nav.addEventListener('pointerover', place); nav.addEventListener('focusin', place);
if (burger && drawer) {
burger.addEventListener('click', (e) => { e.stopPropagation(); const open = drawer.classList.toggle('open'); burger.setAttribute('aria-expanded', String(open)); });
document.addEventListener('click', (e) => { if (drawer.classList.contains('open') && !drawer.contains(e.target) && !burger.contains(e.target)) closeDrawer(); });
ddiff --git a/dist/_shared/theme-loader.js b/dist/_shared/theme-loader.js
iindex bcc8ba5..c5190b1 100644
---- a/dist/_shared/theme-loader.js
++++ b/dist/_shared/theme-loader.js
@@@ -98,8 +98,22 @@
// Every token any built-in theme sets. Applying a theme clears the ones it does not set, so a
// theme that names no --success cannot inherit the previous theme's --success on <html>.
const KNOWN_PROPS = (function () { const out = {}; for (const id in THEMES) for (const k in THEMES[id]) out[k] = true; return Object.keys(out); })();
++ /** Readable text on a colour: near-black or white, whichever contrasts more (WCAG relative luminance). */
++ function onColor(c) {
++ const m = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(String(c || '').trim());
++ if (!m) return null;
++ const h = m[1].length === 3 ? m[1].split('').map((x) => x + x).join('') : m[1];
++ const lin = (i) => { const v = parseInt(h.slice(i, i + 2), 16) / 255; return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4); };
++ const L = 0.2126 * lin(0) + 0.7152 * lin(2) + 0.0722 * lin(4);
++ return (L + 0.05) / 0.05 >= 1.05 / (L + 0.05) ? '#0b0d10' : '#ffffff';
++ }
function applyVars(vars) {
if (!vars || typeof vars !== 'object') return;
++ // A theme without its own text-on-accent colours (custom and older server themes) gets readable ones derived.
++ if (vars['--accent'] && !vars['--on-accent']) {
++ const on = onColor(vars['--accent']);
++ if (on) vars = Object.assign({}, vars, { '--on-accent': on, '--on-accent-strong': vars['--on-accent-strong'] || onColor(vars['--accent-strong'] || vars['--accent']) || on });
++ }
const el = document.documentElement;
for (let i = 0; i < KNOWN_PROPS.length; i++) if (!(KNOWN_PROPS[i] in vars)) el.style.removeProperty(KNOWN_PROPS[i]);
for (const [prop, val] of Object.entries(vars)) {
@@@ -109,8 +123,10 @@
const scheme = vars['--color-scheme'];
if (scheme === 'light' || scheme === 'dark') { el.style.colorScheme = scheme; el.setAttribute('data-theme-mode', scheme); }
// The inline critical style paints a fixed dark canvas before any stylesheet; keep it in step with the theme.
-- if (vars['--bg-primary']) el.style.background = vars['--bg-primary'];
-- if (vars['--text-primary']) el.style.color = vars['--text-primary'];
++ // Through the variables (with the value as fallback): a page that sets --bg-primary later (its own theme
++ // switcher) repaints the canvas too, instead of leaving the first theme's colour behind.
++ if (vars['--bg-primary']) el.style.background = `var(--bg-primary, ${vars['--bg-primary']})`;
++ if (vars['--text-primary']) el.style.color = `var(--text-primary, ${vars['--text-primary']})`;
syncBrowserUi();
}
@@@ -217,6 +233,7 @@
const base = variables || THEMES[themeId] || {};
const vars = custom ? Object.assign({}, base, custom) : base;
if (!vars || !Object.keys(vars).length) return;
++ applyVars(vars); // saving a theme shows it: every token, the canvas and the browser UI follow at once
cacheLocally(themeId, vars);
if (opts && opts.sync === false) return;
if (typeof fetch === 'undefined') return;
@@@ -335,6 +352,7 @@
display: { get: readDisplay, set: setDisplay, options: DISPLAY_OPTS },
apply: applyById,
applyVars: applyVars,
++ onColor: onColor,
save: save,
getCurrent: getCurrent,
resolveAndApply: resolveAndApply,
ddiff --git a/dist/admin.openvibe.network/index.html b/dist/admin.openvibe.network/index.html
iindex 690908a..a5e4baf 100644
---- a/dist/admin.openvibe.network/index.html
++++ b/dist/admin.openvibe.network/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://admin.openvibe.network/#site","url":"https://admin.openvibe.network/","name":"admin.openvibe.network","description":"admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://admin.openvibe.network/#page","url":"https://admin.openvibe.network/","name":"admin.openvibe.network — One operator console for every service.","description":"admin.openvibe.network will be the federated operator console: users, roles, bans, registry and policy, event queues, storage, billing, migrations and emergency controls, discovered from each service rather than hard-wired.","isPartOf":{"@id":"https://admin.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"admin.openvibe.network","item":"https://admin.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/admin.openvibe.network/release.json b/dist/admin.openvibe.network/release.json
iindex 7030162..15331fc 100644
---- a/dist/admin.openvibe.network/release.json
++++ b/dist/admin.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "admin",
-- "release": "45530c67b948",
++ "release": "048c077ded26",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/ai.openvibe.network/index.html b/dist/ai.openvibe.network/index.html
iindex 549d050..7f2bc04 100644
---- a/dist/ai.openvibe.network/index.html
++++ b/dist/ai.openvibe.network/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://ai.openvibe.network/#site","url":"https://ai.openvibe.network/","name":"ai.openvibe.network","description":"OpenVibe.AI's public address is now ai.openvibe.services, next to the rest of the network's programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://ai.openvibe.network/#page","url":"https://ai.openvibe.network/","name":"ai.openvibe.network — Moved: OpenVibe.AI's public home is ai.openvibe.services.","description":"OpenVibe.AI's public address is now ai.openvibe.services, next to the rest of the network's programmable services on OpenVibe.Services. This address serves only this notice until every client has moved; then it redirects.","isPartOf":{"@id":"https://ai.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"ai.openvibe.network","item":"https://ai.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -264,7 +264,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/ai.openvibe.network/release.json b/dist/ai.openvibe.network/release.json
iindex e040186..7c1f4f7 100644
---- a/dist/ai.openvibe.network/release.json
++++ b/dist/ai.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "ai",
-- "release": "3fa34cbeed67",
++ "release": "65fd798d06f3",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/ai.openvibe.services/index.html b/dist/ai.openvibe.services/index.html
iindex 62e404f..54ad2c1 100644
---- a/dist/ai.openvibe.services/index.html
++++ b/dist/ai.openvibe.services/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://ai.openvibe.services/#site","url":"https://ai.openvibe.services/","name":"ai.openvibe.services","description":"OpenVibe.AI is the network's AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://ai.openvibe.services/#page","url":"https://ai.openvibe.services/","name":"ai.openvibe.services — One AI gateway for every model you choose.","description":"OpenVibe.AI is the network's AI gateway: OpenAI-compatible providers, Anthropic, local and open models behind one API, with routing for cost, speed, quality or privacy, provider fallback, versioned prompt templates and typed workflows, durable runs, structured output, embeddings, speech to text and media analysis, budgets and your own provider keys. It runs today as an internal service that OpenVibe.Live and OpenVibe.Network call; its public API and playground open here.","isPartOf":{"@id":"https://ai.openvibe.services/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"ai.openvibe.services","item":"https://ai.openvibe.services/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/ai.openvibe.services/release.json b/dist/ai.openvibe.services/release.json
iindex f826d84..44373c5 100644
---- a/dist/ai.openvibe.services/release.json
++++ b/dist/ai.openvibe.services/release.json
@@@ -1,11 +1,11 @@
{
"service": "ai",
-- "release": "b04c87bc23ef",
++ "release": "87098ee4da69",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/api.openvibe.network/index.html b/dist/api.openvibe.network/index.html
iindex 51623c6..784a0ea 100644
---- a/dist/api.openvibe.network/index.html
++++ b/dist/api.openvibe.network/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://api.openvibe.network/#site","url":"https://api.openvibe.network/","name":"api.openvibe.network","description":"api.openvibe.network is the planned home of the network's public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://api.openvibe.network/#page","url":"https://api.openvibe.network/","name":"api.openvibe.network — The network, machine-readable.","description":"api.openvibe.network is the planned home of the network's public APIs. The ecosystem registry (services, capabilities, event topics, namespaces and releases, backed by the OpenVibe contracts) already answers on openvibe.network; this subdomain is not routed to it yet.","isPartOf":{"@id":"https://api.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"api.openvibe.network","item":"https://api.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -276,7 +276,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/api.openvibe.network/release.json b/dist/api.openvibe.network/release.json
iindex f90fbe8..874911e 100644
---- a/dist/api.openvibe.network/release.json
++++ b/dist/api.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "api",
-- "release": "d95c25e35a95",
++ "release": "a7ba4fb27175",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/auth.openvibe.network/index.html b/dist/auth.openvibe.network/index.html
iindex 9a00806..44c27d6 100644
---- a/dist/auth.openvibe.network/index.html
++++ b/dist/auth.openvibe.network/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://auth.openvibe.network/#site","url":"https://auth.openvibe.network/","name":"auth.openvibe.network","description":"auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://auth.openvibe.network/#page","url":"https://auth.openvibe.network/","name":"auth.openvibe.network — Sign in, once, for the whole network.","description":"auth.openvibe.network will be the dedicated home of OpenVibe identity: sign-in, registration, OAuth 2.0 / OpenID Connect for apps, sessions and linked accounts. Today all of this runs inside openvibe.network itself.","isPartOf":{"@id":"https://auth.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"auth.openvibe.network","item":"https://auth.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -275,7 +275,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/auth.openvibe.network/release.json b/dist/auth.openvibe.network/release.json
iindex 4eaaa2f..f233047 100644
---- a/dist/auth.openvibe.network/release.json
++++ b/dist/auth.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "auth",
-- "release": "fc6b743909e3",
++ "release": "b64a21d70133",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openre.stream/index.html b/dist/openre.stream/index.html
iindex d83bd52..5f26994 100644
---- a/dist/openre.stream/index.html
++++ b/dist/openre.stream/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openre.stream/#site","url":"https://openre.stream/","name":"OpenRe.Stream","description":"OpenRe.Stream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openre.stream/#page","url":"https://openre.stream/","name":"OpenRe.Stream — Go live from your browser, or any encoder, and restream everywhere.","description":"OpenRe.Stream is OpenVibe's open streaming engine, split out of OpenVibe.Live. Go live from a web browser with no OBS, no downloads and no follower minimum, or send RTMP or WHIP from any encoder, and restream to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT destination. Browser broadcasts start on OpenVibe.Live today, and move to OpenRe.Stream ingest channel by channel.","isPartOf":{"@id":"https://openre.stream/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenRe.Stream","item":"https://openre.stream/"}]}},{"@type":"FAQPage","@id":"https://openre.stream/#faq","mainEntity":[{"@type":"Question","name":"Can I stream without OBS?","acceptedAnswer":{"@type":"Answer","text":"Yes. Go live from your browser on OpenVibe.Live: press Go Live, allow your camera and microphone, and you are live. There is nothing to install."}},{"@type":"Question","name":"Do I need followers or subscribers to go live?","acceptedAnswer":{"@type":"Answer","text":"No. Every OpenVibe account can go live from the first minute, with no follower, subscriber or past-stream requirement."}},{"@type":"Question","name":"Can I stream from a Chromebook or a phone?","acceptedAnswer":{"@type":"Answer","text":"Yes. The broadcaster runs in Chrome, Edge, Firefox and Safari, on ChromeOS, Android and iOS as well as Windows, macOS and Linux."}},{"@type":"Question","name":"Can I restream to Twitch, YouTube and Kick at the same time?","acceptedAnswer":{"@type":"Answer","text":"Yes. One broadcast can go to Twitch, YouTube, Kick and any RTMP, RTMPS or SRT server at once."}},{"@type":"Question","name":"Can I use OBS if I want to?","acceptedAnswer":{"@type":"Answer","text":"Yes. OBS and any RTMP encoder work, and so do WHIP encoders (OBS 30 and later, ffmpeg, GStreamer)."}}]}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -290,7 +290,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openre.stream/release.json b/dist/openre.stream/release.json
iindex bf82eb4..c52d875 100644
---- a/dist/openre.stream/release.json
++++ b/dist/openre.stream/release.json
@@@ -1,11 +1,11 @@
{
"service": "stream",
-- "release": "019dda87ab8d",
++ "release": "a47f8c8d8a9a",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.actor/index.html b/dist/openvibe.actor/index.html
iindex fadeed7..32388d1 100644
---- a/dist/openvibe.actor/index.html
++++ b/dist/openvibe.actor/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.actor/#site","url":"https://openvibe.actor/","name":"OpenVibe.Actor","description":"OpenVibe.Actor will give you persistent AI agents that work across OpenVibe and, when you allow it, other sites and apps: they use OpenVibe's own APIs first and a sandboxed browser when they must. You decide what each agent may do, for once, a session, a while or always, and anything with real consequences (buying, sending, publishing, applying, moving a robot) waits for your approval, wherever you are on the network.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.actor/#page","url":"https://openvibe.actor/","name":"OpenVibe.Actor — AI agents that act for you, with your permission.","description":"OpenVibe.Actor will give you persistent AI agents that work across OpenVibe and, when you allow it, other sites and apps: they use OpenVibe's own APIs first and a sandboxed browser when they must. You decide what each agent may do, for once, a session, a while or always, and anything with real consequences (buying, sending, publishing, applying, moving a robot) waits for your approval, wherever you are on the network.","isPartOf":{"@id":"https://openvibe.actor/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Actor","item":"https://openvibe.actor/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -275,7 +275,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.actor/release.json b/dist/openvibe.actor/release.json
iindex 9546d8e..72c3219 100644
---- a/dist/openvibe.actor/release.json
++++ b/dist/openvibe.actor/release.json
@@@ -1,11 +1,11 @@
{
"service": "actor",
-- "release": "4703583f81b4",
++ "release": "8f57dc63e5d8",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.bot/index.html b/dist/openvibe.bot/index.html
iindex 17f6b61..d497753 100644
---- a/dist/openvibe.bot/index.html
++++ b/dist/openvibe.bot/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.bot/#site","url":"https://openvibe.bot/","name":"OpenVibe.Bot","description":"OpenVibe.Bot will let you register robots, Raspberry Pis, cameras, motors, sensors and other devices, pair them securely, and control them yourself or hand control to friends, stream viewers, apps or your AI agents with timed turns, queues and permissions. Safety runs on the device too: heartbeats, command time limits, speed and range limits and an emergency stop that works without the cloud. OpenVibe.Live already runs stream-controlled robots; Bot makes the device its own thing.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.bot/#page","url":"https://openvibe.bot/","name":"OpenVibe.Bot — Robots, cameras and devices you can share safely.","description":"OpenVibe.Bot will let you register robots, Raspberry Pis, cameras, motors, sensors and other devices, pair them securely, and control them yourself or hand control to friends, stream viewers, apps or your AI agents with timed turns, queues and permissions. Safety runs on the device too: heartbeats, command time limits, speed and range limits and an emergency stop that works without the cloud. OpenVibe.Live already runs stream-controlled robots; Bot makes the device its own thing.","isPartOf":{"@id":"https://openvibe.bot/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Bot","item":"https://openvibe.bot/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -275,7 +275,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.bot/release.json b/dist/openvibe.bot/release.json
iindex c587b54..089e123 100644
---- a/dist/openvibe.bot/release.json
++++ b/dist/openvibe.bot/release.json
@@@ -1,11 +1,11 @@
{
"service": "bot",
-- "release": "0e6fcf2faecf",
++ "release": "8a4eab12c1ba",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.coupons/index.html b/dist/openvibe.coupons/index.html
iindex 5db25e6..2b608a0 100644
---- a/dist/openvibe.coupons/index.html
++++ b/dist/openvibe.coupons/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.coupons/#site","url":"https://openvibe.coupons/","name":"OpenVibe.Coupons","description":"OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.coupons/#page","url":"https://openvibe.coupons/","name":"OpenVibe.Coupons — Codes that actually work.","description":"OpenVibe.Coupons is community-checked coupon discovery: codes matched to stores, validity reported by real people, expirations tracked, and a browser helper on the way.","isPartOf":{"@id":"https://openvibe.coupons/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Coupons","item":"https://openvibe.coupons/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.coupons/release.json b/dist/openvibe.coupons/release.json
iindex bc1dd65..c048521 100644
---- a/dist/openvibe.coupons/release.json
++++ b/dist/openvibe.coupons/release.json
@@@ -1,11 +1,11 @@
{
"service": "coupons",
-- "release": "d09025b1e4e1",
++ "release": "74c34d28b8d7",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.deals/index.html b/dist/openvibe.deals/index.html
iindex 8543bc0..bfaa39f 100644
---- a/dist/openvibe.deals/index.html
++++ b/dist/openvibe.deals/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.deals/#site","url":"https://openvibe.deals/","name":"OpenVibe.Deals","description":"OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.deals/#page","url":"https://openvibe.deals/","name":"OpenVibe.Deals — Deals worth seeing.","description":"OpenVibe.Deals is community deal discovery for the OpenVibe network: deals people vote on, hotness that reflects real interest, keyword alerts, price comparisons and honest discussion.","isPartOf":{"@id":"https://openvibe.deals/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Deals","item":"https://openvibe.deals/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.deals/release.json b/dist/openvibe.deals/release.json
iindex 2a2de72..5c06550 100644
---- a/dist/openvibe.deals/release.json
++++ b/dist/openvibe.deals/release.json
@@@ -1,11 +1,11 @@
{
"service": "deals",
-- "release": "a8ecb1243272",
++ "release": "0ea3d47ec59b",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.download/index.html b/dist/openvibe.download/index.html
iindex 607cd65..4958142 100644
---- a/dist/openvibe.download/index.html
++++ b/dist/openvibe.download/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.download/#site","url":"https://openvibe.download/","name":"OpenVibe.Download","description":"OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.download/#page","url":"https://openvibe.download/","name":"OpenVibe.Download — Upload anything. Share it anywhere.","description":"OpenVibe.Download will be the file home of the OpenVibe network: large uploads and simple share links with or without an account, folders, sync and backups when you sign in, and AI that previews, sorts and finds your files, in the spirit of MediaFire and MEGA, built on OpenVibe.Media and open through the API.","isPartOf":{"@id":"https://openvibe.download/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Download","item":"https://openvibe.download/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -275,7 +275,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.download/release.json b/dist/openvibe.download/release.json
iindex 3244035..6accd4c 100644
---- a/dist/openvibe.download/release.json
++++ b/dist/openvibe.download/release.json
@@@ -1,11 +1,11 @@
{
"service": "download",
-- "release": "a2841d75b879",
++ "release": "b441873e1043",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.events/index.html b/dist/openvibe.events/index.html
iindex 3760806..52e50f5 100644
---- a/dist/openvibe.events/index.html
++++ b/dist/openvibe.events/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.events/#site","url":"https://openvibe.events/","name":"OpenVibe.Events","description":"OpenVibe.Events is the network's event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.events/#page","url":"https://openvibe.events/","name":"OpenVibe.Events — Events, queues and webhooks you can build on.","description":"OpenVibe.Events is the network's event system: durable events, topics and subscriptions, signed webhooks with retries, dead-letter queues and replay, pull consumers with checkpoints, and realtime delivery to browsers with cursor resume. Every OpenVibe product already publishes through it. This domain becomes its home, with queues, streams, project namespaces and developer tools.","isPartOf":{"@id":"https://openvibe.events/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Events","item":"https://openvibe.events/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.events/release.json b/dist/openvibe.events/release.json
iindex d568ff5..9b6a266 100644
---- a/dist/openvibe.events/release.json
++++ b/dist/openvibe.events/release.json
@@@ -1,11 +1,11 @@
{
"service": "events",
-- "release": "7fa50fa54047",
++ "release": "39f08f6a7383",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.food/index.html b/dist/openvibe.food/index.html
iindex 0575ee9..5bb757c 100644
---- a/dist/openvibe.food/index.html
++++ b/dist/openvibe.food/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.food/#site","url":"https://openvibe.food/","name":"OpenVibe.Food","description":"OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.food/#page","url":"https://openvibe.food/","name":"OpenVibe.Food — What should we eat?","description":"OpenVibe.Food will bring food together: compare delivery prices across apps, find coupons and budget meal kits, plan meals alone, as a couple or as a group, and turn what is in your cupboard into recipes with the network's AI. The food tools on OpenVibe.Tools will live here too.","isPartOf":{"@id":"https://openvibe.food/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Food","item":"https://openvibe.food/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -275,7 +275,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.food/release.json b/dist/openvibe.food/release.json
iindex 1084ecf..67f349b 100644
---- a/dist/openvibe.food/release.json
++++ b/dist/openvibe.food/release.json
@@@ -1,11 +1,11 @@
{
"service": "food",
-- "release": "da1f0167ad10",
++ "release": "b9cc6e51c98d",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.help/index.html b/dist/openvibe.help/index.html
iindex 3ab6507..bae8526 100644
---- a/dist/openvibe.help/index.html
++++ b/dist/openvibe.help/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.help/#site","url":"https://openvibe.help/","name":"OpenVibe.Help","description":"OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.help/#page","url":"https://openvibe.help/","name":"OpenVibe.Help — Answers, support and a way to reach people.","description":"OpenVibe.Help will be the help and support center for every OpenVibe site: search answers drawn from the docs, wiki, blog and service status, follow troubleshooting guides, and open a ticket that stays one conversation on the web and by email. A Report Problem button on every site will attach the safe details staff need (release, request and trace ids) and never secrets.","isPartOf":{"@id":"https://openvibe.help/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Help","item":"https://openvibe.help/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -275,7 +275,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.help/release.json b/dist/openvibe.help/release.json
iindex 2a450fb..47a8fd0 100644
---- a/dist/openvibe.help/release.json
++++ b/dist/openvibe.help/release.json
@@@ -1,11 +1,11 @@
{
"service": "help",
-- "release": "1b2e1d17b075",
++ "release": "48ec28a6807c",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.homes/index.html b/dist/openvibe.homes/index.html
iindex 3fe128f..518e8ca 100644
---- a/dist/openvibe.homes/index.html
++++ b/dist/openvibe.homes/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.homes/#site","url":"https://openvibe.homes/","name":"OpenVibe.Homes","description":"OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.homes/#page","url":"https://openvibe.homes/","name":"OpenVibe.Homes — Homes to own, clearly explained.","description":"OpenVibe.Homes will be the owning side of OpenVibe.Rent: homes for sale, property records and neighbourhood context in one place, with alerts and AI summaries that always link their sources.","isPartOf":{"@id":"https://openvibe.homes/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Homes","item":"https://openvibe.homes/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.homes/release.json b/dist/openvibe.homes/release.json
iindex d0e4c7d..7439cea 100644
---- a/dist/openvibe.homes/release.json
++++ b/dist/openvibe.homes/release.json
@@@ -1,11 +1,11 @@
{
"service": "homes",
-- "release": "6d6153c59675",
++ "release": "f7cb5aaecb7f",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.host/index.html b/dist/openvibe.host/index.html
iindex 5d8fce9..ead6c6f 100644
---- a/dist/openvibe.host/index.html
++++ b/dist/openvibe.host/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.host/#site","url":"https://openvibe.host/","name":"OpenVibe.Host","description":"OpenVibe.Host is the network's deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network's host: deploys with automatic rollback, backups and restore drills for the network's own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at <site>.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.host/#page","url":"https://openvibe.host/","name":"OpenVibe.Host — Static sites for OpenVibe projects.","description":"OpenVibe.Host is the network's deployment tooling and, next, static site hosting for OpenVibe projects. The tooling (ovhost) already runs on the network's host: deploys with automatic rollback, backups and restore drills for the network's own services. The hosting part will let a project upload a folder of HTML, CSS, JavaScript and images, serve it at <site>.openvibe.host and roll back to any earlier deploy in one step. Static files only: nothing uploaded is run as code.","isPartOf":{"@id":"https://openvibe.host/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Host","item":"https://openvibe.host/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -275,7 +275,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.host/release.json b/dist/openvibe.host/release.json
iindex 83a9131..22fc986 100644
---- a/dist/openvibe.host/release.json
++++ b/dist/openvibe.host/release.json
@@@ -1,11 +1,11 @@
{
"service": "host",
-- "release": "de904cc1995a",
++ "release": "f63347076f3f",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.news/index.html b/dist/openvibe.news/index.html
iindex 39a86d3..0d6d070 100644
---- a/dist/openvibe.news/index.html
++++ b/dist/openvibe.news/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.news/#site","url":"https://openvibe.news/","name":"OpenVibe.News","description":"OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can't see.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.news/#page","url":"https://openvibe.news/","name":"OpenVibe.News — Sourced. Summarised. Many angles.","description":"OpenVibe.News aggregates the news with transparency: sourced stories, summaries that show their sources, multiple angles side by side, topic pages and framing you control — not an algorithm you can't see.","isPartOf":{"@id":"https://openvibe.news/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.News","item":"https://openvibe.news/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.news/release.json b/dist/openvibe.news/release.json
iindex 6153e87..7e8251a 100644
---- a/dist/openvibe.news/release.json
++++ b/dist/openvibe.news/release.json
@@@ -1,11 +1,11 @@
{
"service": "news",
-- "release": "5fabafe0e173",
++ "release": "7860fdb46fd7",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.pics/index.html b/dist/openvibe.pics/index.html
iindex 8f55a76..c8cf2a9 100644
---- a/dist/openvibe.pics/index.html
++++ b/dist/openvibe.pics/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.pics/#site","url":"https://openvibe.pics/","name":"OpenVibe.Pics","description":"OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.pics/#page","url":"https://openvibe.pics/","name":"OpenVibe.Pics — Share pictures. Fast, open, yours.","description":"OpenVibe.Pics will be the picture home of the OpenVibe network: quick uploads and share links with or without an account, albums and galleries, image processing and optimisation served from a shared CDN, and AI image tools, an open and modular alternative to Imgur that is also usable through the OpenVibe API.","isPartOf":{"@id":"https://openvibe.pics/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Pics","item":"https://openvibe.pics/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -275,7 +275,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.pics/release.json b/dist/openvibe.pics/release.json
iindex 9a22085..a445053 100644
---- a/dist/openvibe.pics/release.json
++++ b/dist/openvibe.pics/release.json
@@@ -1,11 +1,11 @@
{
"service": "pics",
-- "release": "39a983602623",
++ "release": "8f5b4b79af95",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.quest/index.html b/dist/openvibe.quest/index.html
iindex fcc2976..56ab567 100644
---- a/dist/openvibe.quest/index.html
++++ b/dist/openvibe.quest/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.quest/#site","url":"https://openvibe.quest/","name":"OpenVibe.Quest","description":"OpenVibe.Quest will be the network's shared quest and rewards system: quests that span every OpenVibe site, from a streamer's getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.quest/#page","url":"https://openvibe.quest/","name":"OpenVibe.Quest — Quests across the whole network.","description":"OpenVibe.Quest will be the network's shared quest and rewards system: quests that span every OpenVibe site, from a streamer's getting-started steps on OpenVibe.Live to community challenges, cosmetics and OpenCoins, moddable and open to anyone through the API.","isPartOf":{"@id":"https://openvibe.quest/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Quest","item":"https://openvibe.quest/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.quest/release.json b/dist/openvibe.quest/release.json
iindex c9f63a3..0cde168 100644
---- a/dist/openvibe.quest/release.json
++++ b/dist/openvibe.quest/release.json
@@@ -1,11 +1,11 @@
{
"service": "quest",
-- "release": "5efb54a79d2b",
++ "release": "60f2d7cbdd53",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.rent/index.html b/dist/openvibe.rent/index.html
iindex d1bebc1..9ee18b0 100644
---- a/dist/openvibe.rent/index.html
++++ b/dist/openvibe.rent/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.rent/#site","url":"https://openvibe.rent/","name":"OpenVibe.Rent","description":"OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.rent/#page","url":"https://openvibe.rent/","name":"OpenVibe.Rent — Every rental, one search.","description":"OpenVibe.Rent will bring rentals into one place: apartments, rooms, commercial space, equipment and services from many listing sites, with alerts, AI summaries that link their sources, and one OpenVibe account for your searches.","isPartOf":{"@id":"https://openvibe.rent/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Rent","item":"https://openvibe.rent/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.rent/release.json b/dist/openvibe.rent/release.json
iindex 2058890..04e8926 100644
---- a/dist/openvibe.rent/release.json
++++ b/dist/openvibe.rent/release.json
@@@ -1,11 +1,11 @@
{
"service": "rent",
-- "release": "a8dd0a2e3480",
++ "release": "52cd959f20b1",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.reviews/index.html b/dist/openvibe.reviews/index.html
iindex 75330bb..4323e0b 100644
---- a/dist/openvibe.reviews/index.html
++++ b/dist/openvibe.reviews/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.reviews/#site","url":"https://openvibe.reviews/","name":"OpenVibe.Reviews","description":"OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.reviews/#page","url":"https://openvibe.reviews/","name":"OpenVibe.Reviews — What people actually say.","description":"OpenVibe.Reviews gathers what people say about products, services, employers, hosts and communities across many sources — with provenance, without fake ratings — and lets the community discuss it.","isPartOf":{"@id":"https://openvibe.reviews/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Reviews","item":"https://openvibe.reviews/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.reviews/release.json b/dist/openvibe.reviews/release.json
iindex f504f9f..4ad1169 100644
---- a/dist/openvibe.reviews/release.json
++++ b/dist/openvibe.reviews/release.json
@@@ -1,11 +1,11 @@
{
"service": "reviews",
-- "release": "c6f8a310c542",
++ "release": "b33fec5ccfe3",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.run/index.html b/dist/openvibe.run/index.html
iindex 752328c..f32dc66 100644
---- a/dist/openvibe.run/index.html
++++ b/dist/openvibe.run/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.run/#site","url":"https://openvibe.run/","name":"OpenVibe.Run","description":"OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.run/#page","url":"https://openvibe.run/","name":"OpenVibe.Run — Run anything, safely.","description":"OpenVibe.Run will run code, tools and AI agent tasks in sandboxes: quick jobs in WebAssembly, full environments in small virtual machines, with queued jobs, live output, and files through OpenVibe.Download. A free, limited tier for everyone, and the engine the rest of the network uses to get work done.","isPartOf":{"@id":"https://openvibe.run/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Run","item":"https://openvibe.run/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.run/release.json b/dist/openvibe.run/release.json
iindex f35e167..690a2e4 100644
---- a/dist/openvibe.run/release.json
++++ b/dist/openvibe.run/release.json
@@@ -1,11 +1,11 @@
{
"service": "run",
-- "release": "8909e1162314",
++ "release": "0c90b1047a94",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.services/index.html b/dist/openvibe.services/index.html
iindex 23653df..fa59b6f 100644
---- a/dist/openvibe.services/index.html
++++ b/dist/openvibe.services/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.services/#site","url":"https://openvibe.services/","name":"OpenVibe.Services","description":"OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.services/#page","url":"https://openvibe.services/","name":"OpenVibe.Services — Build with the whole network.","description":"OpenVibe.Services will be the way into everything programmable on OpenVibe. Start from what you want to build (monitor a page and summarise changes, run an AI agent, process uploads, control a robot, add support to a site) and it assembles the services, keys, permissions and working code for you. Then operate it all in one place: projects, grants, usage, quotas, runs, events, deploys and health, with each service keeping its own data.","isPartOf":{"@id":"https://openvibe.services/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Services","item":"https://openvibe.services/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.services/release.json b/dist/openvibe.services/release.json
iindex 171d14b..3e8044c 100644
---- a/dist/openvibe.services/release.json
++++ b/dist/openvibe.services/release.json
@@@ -1,11 +1,11 @@
{
"service": "services",
-- "release": "27b55fe55c9d",
++ "release": "6f42ac8e6dec",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.space/index.html b/dist/openvibe.space/index.html
iindex 4982d00..ec9b86e 100644
---- a/dist/openvibe.space/index.html
++++ b/dist/openvibe.space/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.space/#site","url":"https://openvibe.space/","name":"OpenVibe.Space","description":"OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.space/#page","url":"https://openvibe.space/","name":"OpenVibe.Space — Start a forum for anything.","description":"OpenVibe.Space will be the forums of the OpenVibe network: create a forum for any topic, with the depth of classic boards like XenForo and phpBB, the feel of a modern community, and AI help for topics, research and moderation. The forums on OpenVibe.Community move here when it launches.","isPartOf":{"@id":"https://openvibe.space/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Space","item":"https://openvibe.space/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.space/release.json b/dist/openvibe.space/release.json
iindex ef54b59..6fc0f12 100644
---- a/dist/openvibe.space/release.json
++++ b/dist/openvibe.space/release.json
@@@ -1,11 +1,11 @@
{
"service": "space",
-- "release": "59156b9dce38",
++ "release": "8c49a43fd341",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.tips/index.html b/dist/openvibe.tips/index.html
iindex 7ced1b2..54b5e20 100644
---- a/dist/openvibe.tips/index.html
++++ b/dist/openvibe.tips/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.tips/#site","url":"https://openvibe.tips/","name":"OpenVibe.Tips","description":"OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.tips/#page","url":"https://openvibe.tips/","name":"OpenVibe.Tips — Support the people you watch.","description":"OpenVibe.Tips is the tipping and alerts layer of the OpenVibe network: tips, donation goals, superchats, paid text-to-speech and media requests, with alert overlays for creators.","isPartOf":{"@id":"https://openvibe.tips/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Tips","item":"https://openvibe.tips/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.tips/release.json b/dist/openvibe.tips/release.json
iindex eb236f7..0a3d568 100644
---- a/dist/openvibe.tips/release.json
++++ b/dist/openvibe.tips/release.json
@@@ -1,11 +1,11 @@
{
"service": "tips",
-- "release": "0a3807db22a4",
++ "release": "442a36f0bc11",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.trade/index.html b/dist/openvibe.trade/index.html
iindex da62d99..b833dc9 100644
---- a/dist/openvibe.trade/index.html
++++ b/dist/openvibe.trade/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.trade/#site","url":"https://openvibe.trade/","name":"OpenVibe.Trade","description":"OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.trade/#page","url":"https://openvibe.trade/","name":"OpenVibe.Trade — Watch, discuss, decide.","description":"OpenVibe.Trade is the market intelligence room of the OpenVibe network: watchlists, alerts, summaries and community discussion for markets, collectibles and deals — information and tools, never advice.","isPartOf":{"@id":"https://openvibe.trade/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Trade","item":"https://openvibe.trade/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.trade/release.json b/dist/openvibe.trade/release.json
iindex 4ac159c..296c73b 100644
---- a/dist/openvibe.trade/release.json
++++ b/dist/openvibe.trade/release.json
@@@ -1,11 +1,11 @@
{
"service": "trade",
-- "release": "b2426e78c850",
++ "release": "239f915e9368",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.video/index.html b/dist/openvibe.video/index.html
iindex 88d0e9a..43cf3f6 100644
---- a/dist/openvibe.video/index.html
++++ b/dist/openvibe.video/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.video/#site","url":"https://openvibe.video/","name":"OpenVibe.Video","description":"OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.video/#page","url":"https://openvibe.video/","name":"OpenVibe.Video — Your videos, everywhere.","description":"OpenVibe.Video will be the home of long-form video on the OpenVibe network: watch pages, channels and playlists for uploads and past streams, a creator tool that publishes one upload to many platforms, and AI captions, highlights and editing, delivered by OpenVibe.Media.","isPartOf":{"@id":"https://openvibe.video/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Video","item":"https://openvibe.video/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -275,7 +275,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.video/release.json b/dist/openvibe.video/release.json
iindex 19ec9c2..d10c8b0 100644
---- a/dist/openvibe.video/release.json
++++ b/dist/openvibe.video/release.json
@@@ -1,11 +1,11 @@
{
"service": "video",
-- "release": "69eb8d3a8ed1",
++ "release": "507359603b9f",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.vip/index.html b/dist/openvibe.vip/index.html
iindex 0265515..4170579 100644
---- a/dist/openvibe.vip/index.html
++++ b/dist/openvibe.vip/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.vip/#site","url":"https://openvibe.vip/","name":"OpenVibe.VIP","description":"OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.vip/#page","url":"https://openvibe.vip/","name":"OpenVibe.VIP — Memberships, network-wide.","description":"OpenVibe.VIP is the membership layer of the OpenVibe network: creator memberships, channel subscriptions, VIP tiers and perks that unlock across Live, Community, Blog and more.","isPartOf":{"@id":"https://openvibe.vip/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.VIP","item":"https://openvibe.vip/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.vip/release.json b/dist/openvibe.vip/release.json
iindex 180a259..e87853c 100644
---- a/dist/openvibe.vip/release.json
++++ b/dist/openvibe.vip/release.json
@@@ -1,11 +1,11 @@
{
"service": "vip",
-- "release": "8f5cbc6a3bd7",
++ "release": "14e1cfc08e3d",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.watch/index.html b/dist/openvibe.watch/index.html
iindex b2f6bba..cd2e91a 100644
---- a/dist/openvibe.watch/index.html
++++ b/dist/openvibe.watch/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.watch/#site","url":"https://openvibe.watch/","name":"OpenVibe.Watch","description":"OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.watch/#page","url":"https://openvibe.watch/","name":"OpenVibe.Watch — Watch anything. Hear about what matters.","description":"OpenVibe.Watch will watch web pages, feeds, APIs, prices and stock, Git releases, OpenVibe activity, videos, livestreams and your own cameras, pull out what changed or what matters, and tell you, your apps or your AI agents. Checks respect site terms and robots rules, heavy work runs on shared workers, and cameras are read by a small agent on your own network so nothing is exposed to the internet.","isPartOf":{"@id":"https://openvibe.watch/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Watch","item":"https://openvibe.watch/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -275,7 +275,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.watch/release.json b/dist/openvibe.watch/release.json
iindex 5291b88..f625b71 100644
---- a/dist/openvibe.watch/release.json
++++ b/dist/openvibe.watch/release.json
@@@ -1,11 +1,11 @@
{
"service": "watch",
-- "release": "20aeb8ca25be",
++ "release": "888e9326a89e",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/openvibe.website/index.html b/dist/openvibe.website/index.html
iindex 63199aa..c7e2e64 100644
---- a/dist/openvibe.website/index.html
++++ b/dist/openvibe.website/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://openvibe.website/#site","url":"https://openvibe.website/","name":"OpenVibe.Website","description":"OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://openvibe.website/#page","url":"https://openvibe.website/","name":"OpenVibe.Website — Websites that work, not just pages.","description":"OpenVibe.Website will be an AI-assisted website and small-app builder with a real file tree: generate a site from a description, import one or fork a Git repository, edit HTML, CSS, JavaScript or Markdown by hand or visually, and publish to yourname.openvibe.website or your own domain. Sites can sign people in with OpenVibe, take bookings and forms, show media, run a blog or docs, and add chat, comments, memberships or support, with good SEO built in.","isPartOf":{"@id":"https://openvibe.website/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"OpenVibe.Website","item":"https://openvibe.website/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -275,7 +275,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/openvibe.website/release.json b/dist/openvibe.website/release.json
iindex a8546c3..6e91eaa 100644
---- a/dist/openvibe.website/release.json
++++ b/dist/openvibe.website/release.json
@@@ -1,11 +1,11 @@
{
"service": "website",
-- "release": "5bbfc4a48646",
++ "release": "5f73cfa6fe28",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/realtime.openvibe.network/index.html b/dist/realtime.openvibe.network/index.html
iindex 807eaab..ed8418f 100644
---- a/dist/realtime.openvibe.network/index.html
++++ b/dist/realtime.openvibe.network/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://realtime.openvibe.network/#site","url":"https://realtime.openvibe.network/","name":"realtime.openvibe.network","description":"OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://realtime.openvibe.network/#page","url":"https://realtime.openvibe.network/","name":"realtime.openvibe.network — Closed: realtime delivery is part of OpenVibe.Events.","description":"OpenVibe.Realtime was planned as a separate service for live updates in the browser. Decision record ADR-005 (accepted 2026-09-22) closed it: browser realtime is part of OpenVibe.Events, as server-sent events with cursor resume at events.openvibe.network/realtime/stream. This address serves only this notice.","isPartOf":{"@id":"https://realtime.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"realtime.openvibe.network","item":"https://realtime.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -265,7 +265,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/realtime.openvibe.network/release.json b/dist/realtime.openvibe.network/release.json
iindex 9a83f87..0653760 100644
---- a/dist/realtime.openvibe.network/release.json
++++ b/dist/realtime.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "realtime",
-- "release": "8678e34297ad",
++ "release": "a3a76dc2f772",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/status.openvibe.network/index.html b/dist/status.openvibe.network/index.html
iindex 859cfb3..368d911 100644
---- a/dist/status.openvibe.network/index.html
++++ b/dist/status.openvibe.network/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://status.openvibe.network/#site","url":"https://status.openvibe.network/","name":"status.openvibe.network","description":"OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://status.openvibe.network/#page","url":"https://status.openvibe.network/","name":"status.openvibe.network — Is OpenVibe up?","description":"OpenVibe.Network checks every OpenVibe service about once a minute (its readiness endpoint and the release it runs) and publishes what it saw at openvibe.network/status. This address points there.","isPartOf":{"@id":"https://status.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"status.openvibe.network","item":"https://status.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -305,7 +305,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/status.openvibe.network/release.json b/dist/status.openvibe.network/release.json
iindex 39cbc4b..d9ea0de 100644
---- a/dist/status.openvibe.network/release.json
++++ b/dist/status.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "status",
-- "release": "37a25288e170",
++ "release": "da30bb979607",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/dist/themes.openvibe.network/index.html b/dist/themes.openvibe.network/index.html
iindex 25d2e9c..ad53ba1 100644
---- a/dist/themes.openvibe.network/index.html
++++ b/dist/themes.openvibe.network/index.html
@@@ -26,7 +26,7 @@
<meta name="twitter:image" content="https://openvibe.network/assets/logo-512.png">
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://themes.openvibe.network/#site","url":"https://themes.openvibe.network/","name":"themes.openvibe.network","description":"themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.","inLanguage":"en","publisher":{"@type":"Organization","@id":"https://openvibe.network/#org","name":"OpenVibe","url":"https://openvibe.network/","logo":"https://openvibe.network/assets/logo-512.png","sameAs":["https://github.com/OpenVibers","https://discord.gg/M6MuRUaeJj"]},"isPartOf":{"@type":"WebSite","@id":"https://openvibe.network/#site","name":"OpenVibe.Network","url":"https://openvibe.network/"}},{"@type":"WebPage","@id":"https://themes.openvibe.network/#page","url":"https://themes.openvibe.network/","name":"themes.openvibe.network — Your look, on every site.","description":"themes.openvibe.network will be the theme catalog and API: built-in and community themes, previews, per-site overrides, import/export and the shared design tokens every OpenVibe site renders.","isPartOf":{"@id":"https://themes.openvibe.network/#site"},"datePublished":"2026-09-17","dateModified":"2026-09-29","breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"OpenVibe","item":"https://openvibe.network/"},{"@type":"ListItem","position":2,"name":"themes.openvibe.network","item":"https://themes.openvibe.network/"}]}}]}</script>
<script>(function(){try{var raw=localStorage.getItem('ov_theme');if(!raw)return;var t=JSON.parse(raw),v=t&&t.variables;if(!v)return;var el=document.documentElement;for(var k in v)if(k.charAt(0)==='-')el.style.setProperty(k,v[k]);if(t.id)el.setAttribute('data-theme',t.id);}catch(_){}})();</script>
--<script src="/shared/theme-loader.js?v=d9b9af081efe" defer></script>
++<script src="/shared/theme-loader.js?v=ee4a6754d0f7" defer></script>
<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" media="print" onload="this.media='all'">
<noscript><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"></noscript>
@@@ -274,7 +274,7 @@ a.card:hover{transform:translateY(-3px);border-color:rgba(var(--site-rgb),.6);bo
</div>
</div></footer>
<script src="/shared/ov-mark.js?v=03f3596adcab" async></script>
--<script src="/shared/navbar.js?v=b3aef18429d0"></script>
++<script src="/shared/navbar.js?v=b8089ee3bd11"></script>
<script src="/shared/footer.js?v=a85ab893be88"></script>
<script>
(function () {
ddiff --git a/dist/themes.openvibe.network/release.json b/dist/themes.openvibe.network/release.json
iindex cdac91a..ecbe2f2 100644
---- a/dist/themes.openvibe.network/release.json
++++ b/dist/themes.openvibe.network/release.json
@@@ -1,11 +1,11 @@
{
"service": "themes",
-- "release": "658fd6c2f8c6",
++ "release": "aebba28c917f",
"released_at": "2026-09-29T00:00:00.000Z",
"booted_at": null,
"contracts_version": null,
"packages": {
-- "openvibe-shared": "1.28.1"
++ "openvibe-shared": "1.29.2"
},
"min_client_release": null,
"mixed_version_window_hours": 24,
ddiff --git a/package-lock.json b/package-lock.json
iindex 13be435..acdefac 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -6,7 +6,7 @@
"": {
"name": "openvibe-sites",
"dependencies": {
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.28.1"
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.29.2"
},
"engines": {
"node": ">=20"
@@@ -119,9 +119,9 @@
"license": "MIT"
},
"node_modules/openvibe-shared": {
-- "version": "1.28.1",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.28.1",
-- "integrity": "sha512-AV39sRi9hm8QETRLM1c6q7nrU8XWPUZzCxZP+h7Cho+LsJ47szHtMk3YdCQHT8+aSC5Hpu68EU8sCvbagR+a0g==",
++ "version": "1.29.2",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.29.2",
++ "integrity": "sha512-w5daRSzujokYT1/Q3fu0KdcSZUBEv1pm66H8vIAI2SY0xtOaLqgfkXJpfIz1NgvJuyK8dhXBbLjM8Ow9RZ5x+A==",
"license": "MIT",
"dependencies": {
"jsonwebtoken": "^9.0.0"
ddiff --git a/package.json b/package.json
iindex 1f71140..8d620e3 100644
---- a/package.json
++++ b/package.json
@@@ -7,7 +7,7 @@
"test": "node test/build.test.js && node test/deploy-wrapper.test.js"
},
"dependencies": {
-- "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.28.1"
++ "openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v1.29.2"
},
"engines": {
"node": ">=20"