What shipped on OpenVibe.Tools

Every change deployed to OpenVibe, newest first. Each line is a commit from the OpenVibers repositories, linked to the change itself. When enough have gathered, or a large feature lands, they are written up as Patch notes on openvibe.blog. JSON: /api/v1/changelog.

2026-09-24

d1a5f87Network-tool SSRF guard on openvibe-shared 1.6.0 (platform S9, egress consolidation): the public-address rule, internal names and host normalisation come from openvibe-shared/egress, the rule Live and Events use; createEgress keeps the…OpenVibers · 04:33 UTC
557de61Recent tools in the launcher (D31: anonymous and account history): every tool page view puts the tool on top of this browser's ov_recent_tools cookie (first-party, .openvibe.tools, 12 ids, no page script needed across tool hosts); GET…OpenVibers · 04:33 UTC
aa1389ftools.usage: a first record is written with If-Match 0, so two apps creating it at once cannot overwrite each otherOpenVibers · 04:33 UTC
1a8d739Tools in Search and in people's recent tools (platform S9).OpenVibers · 04:33 UTC
597fc6aSave as paste on the developer tools (platform S9): the output becomes an unlisted OpenVibe.Community paste through the gateway's /api/pastes proxy (as the signed-in person when there is one), linked under the buttons; Clear removes the…OpenVibers · 04:33 UTC
176a7b8Tools API for developers (platform S10): GET /api/v1/openapi.json, OpenAPI 3.1 generated from the tool descriptors (registry, one run path per tool with its input schema and an example, the jobs facade, problem responses, bearer auth); a…OpenVibers · 04:33 UTC
b0aada2SECURITY.md: how to report a vulnerability ([email protected], 7-day reply, scope, supported versions)OpenVibers · 04:33 UTC
5ac8309openvibe-contracts v0.33.1 (gateway, img, audio, docs) and openvibe-shared v1.5.1 (every app). Descriptors now publish the catalogue's keywords (every tool; what ?q= matches) and each API tool's example as examples[] (145 tools; a job…OpenVibers · 04:33 UTC
48605faUniform run API, jobs facade, deprecation headers and the Origin check (S6, ADR-027). POST /api/v1/tools/:id/run takes tools.run-request@1 as JSON or multipart exactly as openvibe-sdk v0.6.0 sends it (uploads as file parts; input, files…OpenVibers · 04:33 UTC
fcc2fe0Worker threads for sharp and pdf-lib (S5): apps/_shared/jobs/pool.js runs img's image operations and docs' pdf-lib tools in worker_threads, so a large merge or conversion never blocks the event loop (/api/health, the job routes and every…OpenVibers · 04:33 UTC
13b79ceDocs: Protect, Unlock and the password page count give qpdf its password arguments on stdin (@-) instead of an @file argument file. qpdf 12.3.2 on the host did not expand @file (it opened '@/tmp/…/args' as a PDF), so every Protect PDF in…OpenVibers · 04:33 UTC
ef14d55Guard deploy and docs: systemd resource bounds (MemoryMax 2G img/audio/docs, 1G yt, 768M gateway/text/maps/food; TasksMax 256; Nice 5 for img, audio, docs, yt) and ReadWritePaths for the gateway's data/ (its guard.db); deploy.sh creates…OpenVibers · 04:33 UTC
6818bccTools guard (apps/_shared/guard), used by the gateway and every satellite and driven by the tool descriptors: one caller resolver replaces the four copied auth.js files and the job routes' owner logic (service/app principals by token, aud…OpenVibers · 04:33 UTC

2026-09-23

902b27egitleaks: allow the two hand-made sample JWTs (exp 1 / signature x, sub x / signature sig) in the JWT tool's descriptor example and engine test, matched on path and valueOpenVibers · 23:29 UTC
4cc923eTool registry API (capability tools.tool.read, ADR-027): GET /api/v1/tools answers tools.tool-list@1 with schemas as $refs (filters ?family= ?execution= ?api= ?status= ?q=, comma lists; a bad value is 400 tools.query.invalid), GET…OpenVibers · 23:23 UTC
d04dbdaTool descriptors: one tools.tool@1 descriptor per catalogue tool (169), kept as pure data next to the code that runs it and merged by the gateway (ADR-027). apps/{img,audio,docs,text,yt,maps}/server/descriptors.js and…OpenVibers · 23:23 UTC
bc5d92eBrowser tools get server engines: the pure transforms behind the dev and text pages move out of the pages into engine files the pages load and Node can require, so a tool API can run the page's own code (ADR-027). public/js/dev-engine.js…OpenVibers · 23:23 UTC
c98edd4openvibe-contracts v0.33.0 (tools.tool@1, tools.tool-list@1, tools.run@1, tools.job@1 and contracts.tools: checkDescriptor, checkList, jobInput, ADR-027): img, audio and docs move from v0.30.1 (their jobs and tools.job.* events are…OpenVibers · 23:00 UTC
a5fd2ddNet copy: the curl and HTTP status pages say what they do. Both send one HEAD request from our server and show the status line and headers; the curl page promised any method, custom headers and a response body, and the status page a full…OpenVibers · 22:43 UTC
d2c3931Net: the IPv4 and IPv6 pages do what they say, and every net tool has a renderer. The consistency test now also checks that net.html can render each tool's endpoint, which found two pages that showed raw JSON: IPv4 promised a CIDR subnet…OpenVibers · 22:42 UTC
96a7467README: the host packages some tools need (qpdf, poppler-utils, libheif-examples + libheif-plugin-libde265, ffmpeg), what happens while one is missing (503 tools.unavailable, the page says so, /api/ready degraded), the new limits and…OpenVibers · 22:39 UTC
71d5808Registry consistency test: every catalogue tool (not planned, not a mirror) must resolve to something that exists or be marked unavailable. img/audio/docs: its host in the satellite's domain map naming an operation that…OpenVibers · 22:38 UTC
a9e6762Food → maps: the visitor's address goes along (X-Forwarded-For and X-Real-IP from req.ip), so maps' 30/min limit is per person again instead of one 127.0.0.1 bucket for every food visitor. Maps and food believe X-Forwarded-For only from…OpenVibers · 22:36 UTC
cbc4155YT: the length and size limits are enforced, and /api/info is capped and cached. maxDuration (YT_MAX_DURATION, default 3 h) was configured but never checked: /api/info now answers downloadable: false with the reason (too long, or a live…OpenVibers · 22:35 UTC
480b772Net tools: every catalogue tool works or says it is unavailable; myip, caching and tokens fixed. New (server/net/checks.js, all through the SSRF guard or DNS only): robots (fetch + RFC 9309 parse, groups, sitemaps, site-wide-block and…OpenVibers · 22:32 UTC
fce0a49Docs: Protect, Unlock, PDF to image and Split do what their pages say. Protect encrypts with AES-256 through qpdf (R6; a random owner password unless one is given; printing and copying text can be refused from the page); it used to re-save…OpenVibers · 22:19 UTC
614973fAudio: merge.openvibe.tools works. Its host mapped to an operation that did not exist; the merge tool now joins 2 to 5 files in the order given (ffmpeg concat filter, every input resampled to 44.1 kHz, or 48 kHz for Opus, and stereo, so…OpenVibers · 22:14 UTC
059d7a7Img: BMP output is a real BMP (it was a PNG named .bmp), BMP and ICO uploads are read, ICO output decodes the upload once, HEIC decodes through libheif or answers 503. server/tools/codec.js writes BMP from sharp's raw pixels (24-bit, or…OpenVibers · 22:11 UTC
5d1b423Analytics comes from openvibe-shared/analytics (v1.4.0; retires C-80): every app pins openvibe-shared v1.4.0 (package.json and lockfile), the seven satellites require openvibe-shared/analytics instead of the hand-copied…OpenVibers · 20:17 UTC
b154b8dJobs apps (img, audio, docs): openvibe-contracts v0.30.1 (tools.job.created|started|succeeded|failed payload contracts, listed in the tools manifest's eventsProduced) and openvibe-sdk v0.4.0 (createOutbox for the job events relay)OpenVibers · 19:34 UTC
5f3c304Jobs publish their lifecycle to OpenVibe.Events: tools.job.created (submit or retry; actor the owner), tools.job.started (claim), tools.job.succeeded and tools.job.failed (tool error, timeout, or failed on restart), each validated against…OpenVibers · 19:34 UTC
2a0b70cCI: run the shared security workflow (gitleaks secret scan + dependency audit, Track Q)OpenVibers · 19:33 UTC
8b317ebJobs retention: referenced results are never pruned (PUT/DELETE /api/v1/jobs/:id/references/:ref, e.g. community:paste:p_123, owner-scoped, idempotent; a referenced job shows expires_at null), and the pruner no longer drops a job whose…OpenVibers · 18:41 UTC
2aff45dJobs: POST /api/v1/jobs/:id/retry retries a failed job as a new job with the same type, input and files (retry_of / retried_by link them); owner-scoped (tools.job.create for principals), idempotent (a second call answers 200…OpenVibers · 18:40 UTC
f9a1441SSRF: the network tools refuse internal targets. apps/_shared/egress.js (from OpenVibe.Events) checks every resolved address after DNS (loopback, RFC 1918, link-local and 169.254.169.254, CGNAT, 0.0.0.0/8, multicast…OpenVibers · 18:34 UTC
533c9a3Analytics within ADR-021 on every satellite: apps/_shared/analytics replaces the openvibe-shared tracker (no IP, user id or city in raw events; route templates, referer origins, user-agent classes, rotating session ids); raw events pruned…OpenVibers · 16:00 UTC
43f71e4Jobs accept developer-app sandbox tokens (apps only; other sandbox tokens 401), store env, sandbox jobs capped at 2 active and 30 min, results never sent to Media; openvibe-contracts v0.28.0 (sandbox refused by default elsewhere)OpenVibers · 04:27 UTC
70e9a19Metrics and truthful readiness on the gateway and every satellite (Track O): openvibe-shared v1.3.0; GET /metrics for direct loopback callers only (route templates, proxy:<app> on the gateway, tools_jobs{app,state}); GET /api/ready with…OpenVibers · 02:05 UTC
a6374a8deploy.sh removes untracked npm lockfiles that the incoming release tracks, instead of failing the pullOpenVibers · 01:50 UTC
e88f7a2GET /release.json on the gateway and every satellite (ADR-016); openvibe-shared v1.2.0OpenVibers · 01:50 UTC
fab9f4copenvibe-contracts v0.11.0 (tools.job.* released)OpenVibers · 01:45 UTC
7b76c41Durable jobs on Img, Audio and Docs: /api/v1/jobs with SSE progress, cancel, reattach, idempotency keys and owner scoping; results can be Media objectsOpenVibers · 01:42 UTC
b6c9d9fMaps, Food and Text honour X-OV-Canonical-Host: canonical, og:url and JSON-LD follow the gateway, custom domains get their tool through X-OV-Tool, gateway aliases redirect, unknown hosts go to the tools indexOpenVibers · 01:42 UTC
7feff8eThe catalog resolves other services through Network's registry (GET /api/v1/registry/services, cached, last good kept, local list as fallback and labelled as such); placeholder and retired services are not linkedOpenVibers · 01:42 UTC
f5d27dfDocs: jobs API, durability, owner scoping, Media results and their grants, canonical hosts, registry catalog, tests; tools.job.* capability and service manifest proposalsOpenVibers · 01:42 UTC
f6deae8Tools deploy checks every app resolves each dependency before restarting; an emptied file: link reinstalls instead of crash-looping all unitsOpenVibers · 01:10 UTC
4773f7bopenvibe-shared is the pinned OpenVibe.Shared v1.0.0 release in every app; the vendored copy and the deploy rsync are goneOpenVibers · 00:59 UTC
fd5d318Paste gateway talks to OpenVibe.Community directly (it owns pastes since the Wave 5 cutover); the visitor's JWT and address go alongOpenVibers · 00:35 UTC

2026-09-21

0346edcvendor sync: openvibe-shared navbar + ring icons now draw solid Font Awesome glyphs (no FA CSS dependency)OpenVibers · 16:58 UTC

2026-09-18

fb22b98vendor sync: shared navbar (drawer, chips, sections)OpenVibers · 14:44 UTC