mHub
Open platform · Addon Protocol v2 · Browser API

Elk idee. Elk scherm.

Bouw een radio-app in één middag.

mHub is een open platform dat mappen met eenvoudige bestanden en gewone websites omzet in apps voor telefoons, tv's en desktops. Je hoeft geen programmeur te zijn: als je kunt beschrijven wat je wilt, kan een AI het bouwen, en mHub geeft het een plek om te draaien.

Draait in Vypn en elke mHub-browser Open source, MIT Geen buildstap, geen account Draait op telefoons, tv's en desktops
Vuma op een tv: een uitgelichte DW-show boven rijen documentaires en zakelijke video's, met de catalogi van de add-on bovenaan.
Vuma, een mHub-app, op een tv. Alles op dit scherm komt uit één add-on: DW.
Het concept

Eén platform, drie delen.

mHub is niet één app. Het zijn drie delen die in elkaar passen, en elk daarvan is open. Twee zijn fundamenten: een contentformaat en een browser-API. Het derde zijn de apps, en elke app staat op één fundament of op allebei.

01

De apps

Wat je echt gebruikt. Vuma maakt van add-ons één scherm om door te bladeren, en andere apps brengen elk één idee naar elk scherm in huis. Het zijn allemaal web-apps: niets te installeren. Bekijk de apps

02

De content: add-ons

Een add-on is een bron van content: films, radiozenders, podcasts, cursussen. Onder de motorkap is het een map met kleine tekstbestanden op een willekeurige webhost, beschreven door het Addon Protocol v2. Een AI kan er een voor je schrijven. Bekijk het protocol

03

De krachten: window.mhub

Open een gewone website in een mHub-app en hij kan dingen die een browser nooit toestaat: data van overal lezen, een dood domein overleven, op je tv wonen. Eén namespace, één scripttag: de mHub Browser API. Bekijk de API

Deel één · De apps

Onze favorieten. Allemaal live.

Vuma staat op beide fundamenten; de apps ernaast laten zien hoe ver één fundament alleen je brengt. Vijf apps, vijf verschillende ideeën, en elk ervan is een plek om mee te beginnen.

Vuma

Geef Vuma add-ons en het maakt er één scherm van om door te bladeren: elke catalogus die je add-ons aanbieden, zoeken in al die catalogi tegelijk, een bibliotheek, een speler die verdergaat waar je gebleven was. Het is één web-app die op telefoons, tv's en desktops draait en zelf aanraking, afstandsbediening en muis afhandelt.

Het staat op beide fundamenten: add-ons leveren de content, en in een mHub-browser voegt de Browser API de krachten toe die een gewone pagina nooit heeft. Je kunt het zelfs op een eigen pagina plaatsen, met jouw add-ons en jouw naam erop: één HTML-bestand.

Vuma op een telefoon: een uitgelichte DW-show met details en knoppen voor Mijn lijst boven een rij live tv-zenders.
De DW-add-on in Vuma op een telefoon: een uitgelichte nieuwsvideo en een scrollbare lijst met clips.

Waves

Radiozenders, podcasts en gratis luisterboeken als één app. Waves is één HTML-bestand bovenop dezelfde Vuma-build: vijf audio-add-ons, een blauwgroen accent en addonManager: "fixed", dus de bronnen liggen vast en de gebruiker zet ze alleen aan en uit. Bekijk de broncode: de pagina is de hele tutorial.

Waves: een podcast-hero boven rijen SomaFM-radiozenders, met een blauwgroen golflogo in de zijbalk.
Waves: SomaFM, Radio Browser, podcasts en luisterboeken, blauwgroen op donker. Eén HTML-bestand op Vuma.

Junior

Kinder-tv. Eén add-on, vrolijke kleuren, Duits vanaf het eerste scherm (locale: "de") en addonManager: "hidden": vanaf de bank valt er niets te verknoeien. Ook één HTML-bestand bovenop de Vuma-build.

Junior: een KiKA-animatie als hero boven rijen kinderprogramma's, in het Duits, met een geel sterlogo in de zijbalk.
Junior: de KiKA-add-on en verder niets, met een ster op de deur.

Mediathek

De add-on is de data; wat iemand erbovenop bouwt, is de app. Mediathek is één HTML-bestand direct op de ard-mediathek-add-on, zonder Vuma eronder: rijen, zoeken, series met hun afleveringen, ondertitels en een speler die onthoudt waar je gestopt bent. De add-on haalt de data op, de pagina zorgt voor het uiterlijk.

Mediathek: rijen ARD-video's en -series met titels, datums en speelduur, en een zoekveld.
Mediathek, één HTML-bestand bovenop één add-on, zonder iets eigens om te hosten.

Glance

Het andere fundament op zichzelf: Glance gebruikt helemaal geen add-ons. Eén HTML-bestand op de Browser API dat live weer, koppen, marktprijzen en de status van je eigen servers op één rustig scherm zet. In een gewone browser valt het netjes terug; in een mHub-app komt elke tegel tot leven.

Glance: klok, weer, marktprijzen en nieuwskoppen als rustige tegels op één scherm.
Glance, één HTML-bestand, met live weer, koppen en prijzen.
Wat je kunt bouwen

Eén idee, één map, elk scherm.

Alles met een lijst kan een add-on zijn, en alles wat een browser weigert te doen, kan een site in mHub zijn. Dit zijn ideeën die we graag gemaakt zien worden, en elk ervan is maar één prompt verwijderd: kies er een, en het komt terecht in de AI-prompt verderop.

Add-on: een map met JSON-bestanden, gehost waar je wilt of op mhub.mx Site: één webpagina op de Browser API App: Vuma met jouw add-ons en jouw naam

Kijken

Add-on

Je regionale tv-zender

Elke uitzending die de zender online zet, in rijen per programma, met het avondnieuws voorop.

Add-on

Een filmfestival

Het programma met trailers en synopsissen, te doorbladeren per dag, locatie en sectie.

Add-on

Stomme film

Rechtenvrije films uit het Internet Archive, gesorteerd op decennium en regisseur.

Add-on

Je sportclub

Hoogtepunten, volledige wedstrijden en het seizoensschema als live catalogus.

Add-on

Livecams in de stad

De openbare webcams van één stad, de haven, het plein, de berg, als livezenders.

Add-on

Gemeenteraadsvergaderingen

Opnames en livestreams van je gemeenteraad, per vergadering en agendapunt.

Luisteren

Add-on

Jouw radiozenders

De tien zenders waar je echt naar luistert, met logo's, in de volgorde die jij wilt.

Add-on

Eén podcastnetwerk

Elke show van één netwerk uit de RSS-feeds, nieuwste afleveringen eerst.

Add-on

Luisterboeken per auteur

LibriVox-opnames van één auteur, hoofdstukken als afleveringen, verder te luisteren waar je stopte.

Add-on

Verhaaltjes voor het slapengaan

Korte audioverhalen voor kinderen, met een rustige cover per verhaal en zonder reclame.

Add-on

Een geloofsgemeenschap

De diensten en lezingen van je kerk, moskee of gemeenschap, live en opgenomen.

App

Een eigen app voor een zender

Waves, met de streams en podcasts van één zender en zijn eigen kleuren. Eén HTML-bestand.

Leren

Add-on

Colleges van één universiteit

De openbare collegeopnames, per faculteit en semester, op de tv in plaats van op een laptop.

Add-on

Een taalcursus

Lessen als afleveringen, op volgorde, met de audio-oefeningen naast de video's.

Add-on

Museumtours

De video- en audiogidsen van een museum, zaal voor zaal.

Add-on

Kookschool

Receptvideo's per gang en keuken, met de ingrediënten in de beschrijving.

Site

Een archiefbrowser

Een vriendelijk gezicht voor Archive.org of Project Gutenberg: bladeren, zoeken en lezen als in een app.

Add-on

Talks van één conferentie

Elke opgenomen talk van een conferentiereeks, per jaar en track.

Huis en gezin

Site

Een familiescherm

Weer, nieuwskoppen en de prijs van dingen die je belangrijk vindt, op één rustig scherm. Deze hebben we zelf gebouwd: het is Glance.

Site

Bedieningspaneel voor thuis

Lampen, NAS, printer, router. Browsers weigeren zulke lokale verzoeken; de mHub-app doet ze voor je.

Site

Camerawand

Je eigen camera's, uit het lokale netwerk, als raster op de tv.

Add-on

De fotolijst van het gezin

Foto's van je eigen server als afbeeldingscatalogus: de tv wordt de lijst.

App

Kinder-tv

Eén add-on, vrolijke kleuren, vanaf de bank valt er niets te verknoeien. Dat is Junior.

Add-on

Tekenfilms van één zender

De gratis afleveringen van één kinderzender, per programma, veilig om uit handen te geven.

Tools

Site

Een nieuwslezer

Haal elke feed rechtstreeks bij de bron op. Gewone browsers blokkeren dat; in mHub werkt het gewoon, en het leest prettig vanaf de bank.

Site

Een prijzenwachter

Controleer winkels op prijs en beschikbaarheid, houd een volglijst bij, zie het antwoord op elk scherm.

Site

Statusbord voor servers

Je eigen machines, hun schijven en diensten, als tegels die rood worden voordat iemand belt.

Add-on

Een YouTube-kanaal, opgelost

Een resolver-add-on: plak een kanaal, krijg de video's als catalogus die afspeelt.

Add-on

Ondertitels voor een taal

Een ondertitel-add-on voor één taal, die antwoordt op imdb-id's, uit een open ondertitelbron.

Add-on

Waar een titel te streamen is

Typ een film en zie waar hij in jouw land draait. Een item-add-on bovenop een open database.

Heb je er zelf een gemaakt? Publiceer hem op mhub.mx: we beoordelen hem, hosten hem onder jouw naam en zetten hem in de community-repository.

Deel één · Maak Vuma van jou

Je eigen app is één HTML-bestand.

Waves en Junior zijn precies dit: laad de Vuma-build, geef hem een element, roep mount aan. Dit bestand is op elke statische host een complete app met jouw add-ons, jouw naam en jouw kleuren, en het volgt de Vuma-releases vanzelf. Geen buildstap, geen servercode, geen account.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport"
  content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no">
<title>My App</title>
<link rel="stylesheet" href="https://vuma.mx/latest/style.css">
</head>
<body>
<div id="app"></div>
<script type="module">
  import { mount } from "https://vuma.mx/latest/app.js";
  mount({
    addons: [
      "https://www.mhub.mx/radio-and-podcasts",
      "https://www.mhub.mx/public-domain",
    ],
    brand: { name: "My App", colors: { accent: "#00AAFF" } },
  });
</script>
</body>
</html>

Een add-on is zijn manifest-URL. De add-ons die hier gehost worden, staan in de add-on-index, en een AI kan een nieuwe voor je bouwen.

Elke mount-optie, en waar de bestanden vandaan komen, staat beschreven in de app zelf: Zo maak je je eigen app. Die uitleg zit in de build, dus hij beschrijft de versie die je gaat laden en niet de versie waarvoor deze pagina geschreven is.

Deel twee · Het Addon Protocol v2

Een add-on is een map met JSON-bestanden.

Een add-on is een bron van content: films, radiozenders, podcasts, recepten, cursussen. Zet de map ergens op het web, voeg het adres toe in een app, en alles erin verschijnt daar, klaar om door te bladeren. Versie 2 van het protocol heeft geen server nodig: elk endpoint kan een statisch bestand op een willekeurig CDN zijn. Elke bestaande v1-add-on blijft werken; de apps vertalen tussen de twee, en v1 blijft ondersteund.

Statisch eerst

Alle endpoints zijn GET, allemaal cachebaar, allemaal te hosten als gewone bestanden. Eén optionele POST voor het takensysteem.

/mhub-addon.json
/catalog/{type}/{catalogId}.json
/item/{type}/{id}.json
/source/{type}/{id}.json

Combineerbaar

Catalogi, itemdetails, bronnen, resolvers en ondertitels zijn aparte resources. Eén add-on kan ze allemaal leveren of maar één.

"resources": ["catalog",
  "item", "source",
  "resolve", "subtitle"]

Client-fetch-taken

Een endpoint kan antwoorden met een taak in plaats van data. De app haalt op met het eigen IP-adres van de gebruiker, zodat een statische add-on werkt met API's die per regio geblokkeerd zijn.

// add-on blijft statisch,
// de client maakt de rit

mhub-addon.json

Een minimale add-on is één manifest en één catalogusbestand. Upload beide naar een statische host en het werkt. De specificatie is OpenAPI 3.1 met gegenereerde TypeScript-types en een clientbibliotheek zonder afhankelijkheden, onder MIT-licentie, op GitHub.

{ "id": "my-movies", "name": "My Movies", "specVersion": 2,
  "resources": ["catalog"], "types": ["video"],
  "catalogs": [{ "id": "all", "name": "All", "type": "video" }] }
Deel twee · Bouwen met AI

Beschrijf het. Een AI bouwt het.

Het hele add-onformaat past in één prompt, en je hoeft het nooit te lezen. Kopieer de prompt, voeg je idee toe, en de AI antwoordt met een map vol bestanden. Upload ze ergens en je add-on is live.

01

Kopieer de prompt

Die wijst de AI naar de specificatie. Werkt met elke assistent die links kan lezen, zoals ChatGPT of Claude.

02

Voeg je idee toe

"Mijn favoriete radiozenders." "Elke film van één regisseur." "De openbare colleges van mijn universiteit." Alles met een lijst.

03

Upload de bestanden

Elke statische host werkt, GitHub Pages is gratis. Voeg het adres toe in een mHub-app en blader door je eigen add-on.

Lees de specificatie van het mHub Addon Protocol v2 op
https://raw.githubusercontent.com/mediahubmx/protocol/main/openapi.yaml
en bouw een add-on voor me. Een add-on is een map met statische JSON-bestanden,
klaar om naar een willekeurige webhost te uploaden. Antwoord met elk bestand: het volledige pad,
daarna de volledige inhoud.

Mijn add-on: [beschrijf hier je idee]

Kan je assistent geen links openen? Plak dan het specificatiebestand in de chat. De specificatie en complete voorbeeld-add-ons staan op GitHub.

Deel drie · De mHub Browser API

Wat je site kan in mHub

Alles zit onder één namespace: window.mhub, en elke host levert de volledige kern. Detecteer de namespace één keer en roep hem dan gewoon aan. Geen SDK, geen buildstap, geen account: één scripttag is de hele setup, en hem zelf hosten mag ook.

<script src="https://mhub.mx/mhub.js"></script>
Deze browser controleren…
Host
…
Apparaat
…
Mogelijkheden
…

De API is live in de apps en wordt met hun releases uitgerold. Schrijf er vandaag al tegen en je pagina blijft hoe dan ook werken: waar geen host is, ontbreekt window.mhub gewoon en blijft je site een gewone website. Haal een browser die hem heeft.

mhub.fetch

Haal alles op. Geen CORS, en request-headers die de browser normaal voor zichzelf houdt.

// cross-origin, leesbaar
const r = await mhub.fetch(url);

mhub.openStream

Sommige media hebben eigen request-headers nodig om af te spelen. Eén aanroep, en de host kiest op elk platform de juiste route.

const s = await mhub.openStream(
  { url, headers });
video.src = s.url;

mhub.storage

Key-value-opslag die je site volgt, niet het domein waarop hij toevallig draait. Geen vraag aan de gebruiker, geen setup.

await mhub.storage.set(k, v);

mhub-site.json

Eén domein plat, je site laadt nog steeds. Zet één klein bestand op elk domein; de browser vindt het, controleert je mirrors en schakelt zelf over. Geen code.

{ "id": "mysite",
  "endpoints": [
    "https://a.example",
    "https://b.example" ] }

mhub.setLinks

Een tegel op het startscherm van de browser. De weg terug naar je site, die tussen bezoeken blijft bestaan.

mhub.setLinks([
  { id, name, icon, url }]);

mhub.setSearch

De adresbalk wordt de zoekfunctie van je site. Zoekopdrachten en suggesties gaan rechtstreeks naar je pagina.

mhub.setSearch({ placeholder,
  onQuery, onSuggest });

mhub.device + capabilities

Weet waar je draait en wat de host kan, van telefoon tot tv, nog vóór de eerste paint.

if (mhub.device.isTV) tvUi();

…en de app-declaraties

Een pagina die als app draait, vertelt de host wat hij zelf afhandelt: zijn eigen terugnavigatie (setBackHandler), een schermvullende speler (setImmersive) en de uitgang (exit); een metatag in de HTML zegt dat het een app is die voor de afstandsbediening gebouwd is. Elk onderdeel, met het rechtenmodel en het mirrorsysteem, staat in de API-referentie.

mhub.setBackHandler(depth);
mhub.setImmersive(true);
<meta name="mhub" content="app dpad">
Community

Gepubliceerd door mensen zoals jij.

Tot nu toe 56 community-add-ons van 31 makers. Log in met je e-mailadres, upload een map als zip of link er een die je zelf host, en zodra hij door de beoordeling komt, staat hij op mhub.mx/@you/addon, in de communitylijst en in de community-repository.

Bouw iets. Groot of klein.

De API-referentie beschrijft elk onderdeel, het rechtenmodel en het mirrorsysteem. De protocolspecificatie komt met complete voorbeeld-add-ons die je kunt kopiëren.