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.
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.
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
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
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
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.


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.
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.
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.
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.
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.
Kijken
Je regionale tv-zender
Elke uitzending die de zender online zet, in rijen per programma, met het avondnieuws voorop.
Een filmfestival
Het programma met trailers en synopsissen, te doorbladeren per dag, locatie en sectie.
Stomme film
Rechtenvrije films uit het Internet Archive, gesorteerd op decennium en regisseur.
Je sportclub
Hoogtepunten, volledige wedstrijden en het seizoensschema als live catalogus.
Livecams in de stad
De openbare webcams van één stad, de haven, het plein, de berg, als livezenders.
Gemeenteraadsvergaderingen
Opnames en livestreams van je gemeenteraad, per vergadering en agendapunt.
Luisteren
Jouw radiozenders
De tien zenders waar je echt naar luistert, met logo's, in de volgorde die jij wilt.
Eén podcastnetwerk
Elke show van één netwerk uit de RSS-feeds, nieuwste afleveringen eerst.
Luisterboeken per auteur
LibriVox-opnames van één auteur, hoofdstukken als afleveringen, verder te luisteren waar je stopte.
Verhaaltjes voor het slapengaan
Korte audioverhalen voor kinderen, met een rustige cover per verhaal en zonder reclame.
Een geloofsgemeenschap
De diensten en lezingen van je kerk, moskee of gemeenschap, live en opgenomen.
Een eigen app voor een zender
Waves, met de streams en podcasts van één zender en zijn eigen kleuren. Eén HTML-bestand.
Leren
Colleges van één universiteit
De openbare collegeopnames, per faculteit en semester, op de tv in plaats van op een laptop.
Een taalcursus
Lessen als afleveringen, op volgorde, met de audio-oefeningen naast de video's.
Museumtours
De video- en audiogidsen van een museum, zaal voor zaal.
Kookschool
Receptvideo's per gang en keuken, met de ingrediënten in de beschrijving.
Een archiefbrowser
Een vriendelijk gezicht voor Archive.org of Project Gutenberg: bladeren, zoeken en lezen als in een app.
Talks van één conferentie
Elke opgenomen talk van een conferentiereeks, per jaar en track.
Huis en gezin
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.
Bedieningspaneel voor thuis
Lampen, NAS, printer, router. Browsers weigeren zulke lokale verzoeken; de mHub-app doet ze voor je.
Camerawand
Je eigen camera's, uit het lokale netwerk, als raster op de tv.
De fotolijst van het gezin
Foto's van je eigen server als afbeeldingscatalogus: de tv wordt de lijst.
Tekenfilms van één zender
De gratis afleveringen van één kinderzender, per programma, veilig om uit handen te geven.
Tools
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.
Een prijzenwachter
Controleer winkels op prijs en beschikbaarheid, houd een volglijst bij, zie het antwoord op elk scherm.
Statusbord voor servers
Je eigen machines, hun schijven en diensten, als tegels die rood worden voordat iemand belt.
Een YouTube-kanaal, opgelost
Een resolver-add-on: plak een kanaal, krijg de video's als catalogus die afspeelt.
Ondertitels voor een taal
Een ondertitel-add-on voor één taal, die antwoordt op imdb-id's, uit een open ondertitelbron.
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.
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.
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" }] }
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.
Kopieer de prompt
Die wijst de AI naar de specificatie. Werkt met elke assistent die links kan lezen, zoals ChatGPT of Claude.
Voeg je idee toe
"Mijn favoriete radiozenders." "Elke film van één regisseur." "De openbare colleges van mijn universiteit." Alles met een lijst.
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.
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.
- 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">
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.
Internet Archive
RTVE