mHub
Plataforma abierta · Addon Protocol v2 · Browser API

Cualquier idea. En cada pantalla.

Crea una app de radio en una tarde.

mHub es una plataforma abierta que convierte carpetas de archivos sencillos y sitios web normales en apps para teléfonos, televisores y equipos de escritorio. No hace falta que sepas programar: si puedes describir lo que quieres, una IA puede construirlo, y mHub le da un lugar donde funcionar.

Funciona en Vypn y en cualquier navegador mHub Código abierto, MIT Sin compilación, sin cuenta Funciona en teléfonos, televisores y equipos de escritorio
Vuma en un televisor: un programa destacado de DW sobre filas de documentales y videos de economía, con los catálogos del addon en la parte superior.
Vuma, una app de mHub, en un televisor. Todo lo que ves en esta pantalla viene de un solo addon: DW.
El concepto

Una plataforma, tres partes.

mHub no es una sola app. Son tres partes que encajan entre sí, y todas son abiertas. Dos son cimientos: un formato de contenido y una API de navegador. La tercera son las apps, y cada una se apoya en uno de esos cimientos o en los dos.

01

Las apps

Lo que de verdad usas. Vuma convierte addons en una sola pantalla para explorar, y cada una de las otras apps lleva una idea a todas las pantallas de la casa. Todas son apps web: no hay nada que instalar. Ver las apps

02

El contenido: addons

Un addon es una fuente de contenido: películas, emisoras de radio, podcasts, cursos. Por dentro es una carpeta de pequeños archivos de texto en cualquier alojamiento web, descrita por el Addon Protocol v2. Una IA puede escribir uno por ti. Ver el protocolo

03

Los poderes: window.mhub

Abre un sitio web normal dentro de una app de mHub y podrá hacer cosas que un navegador nunca permite: leer datos de cualquier sitio, sobrevivir a un dominio caído, vivir en tu televisor. Un espacio de nombres, una etiqueta script: la mHub Browser API. Ver la API

Primera parte · Las apps

Nuestras favoritas. Todas en línea.

Vuma se apoya en los dos cimientos; las apps que la acompañan muestran hasta dónde llega uno solo. Cinco apps, cinco ideas distintas, y cada una es un buen punto de partida.

Vuma

Dale addons a Vuma y los convierte en una sola pantalla para explorar: cada catálogo que ofrecen tus addons, búsqueda en todos ellos, una biblioteca y un reproductor que sigue donde lo dejaste. Es una sola app web que funciona igual en teléfonos, televisores y equipos de escritorio, y se encarga ella misma del táctil, el control remoto y el puntero.

Se apoya en los dos cimientos: los addons aportan el contenido y, dentro de un navegador mHub, la Browser API añade los poderes que una página normal nunca tiene. Incluso puedes montarla en una página tuya, con tus addons y tu nombre: un archivo HTML.

Vuma en un teléfono: un programa destacado de DW con botones de detalles y de mi lista sobre una fila de canales de TV en vivo.
El addon de DW en Vuma en un teléfono: un video de noticias destacado y una lista de clips desplazable.

Waves

Emisoras de radio, podcasts y audiolibros gratuitos en una sola app. Waves es un archivo HTML sobre la misma compilación de Vuma: cinco addons de audio, un color de acento verde azulado y addonManager: "fixed", así que las fuentes están fijadas y el usuario solo las activa o desactiva. Mira su código fuente: la página es el tutorial completo.

Waves: un podcast destacado sobre filas de emisoras de SomaFM, con un logo de onda verde azulado en la barra lateral.
Waves: SomaFM, Radio Browser, podcasts y audiolibros, verde azulado sobre fondo oscuro. Un archivo HTML sobre Vuma.

Junior

TV infantil. Un addon, colores vivos, alemán desde la primera pantalla (locale: "de") y addonManager: "hidden": nada que desconfigurar desde el sofá. También es un archivo HTML sobre la compilación de Vuma.

Junior: una animación destacada de KiKA sobre filas de programas infantiles, en alemán, con un logo de estrella amarilla en la barra lateral.
Junior: el addon de KiKA y nada más, con una estrella en la puerta.

Mediathek

El addon son los datos; lo que alguien construye encima es la app. Mediathek es un archivo HTML directamente sobre el addon ard-mediathek, sin Vuma debajo: filas, búsqueda, series con sus episodios, subtítulos y un reproductor que recuerda dónde te quedaste. El addon se encarga de obtener los datos; la página, del aspecto.

Mediathek: filas de videos y series de la ARD con títulos, fechas y duración, y un campo de búsqueda.
Mediathek, un archivo HTML sobre un addon, sin nada propio que alojar.

Glance

El otro cimiento por sí solo: Glance no usa ningún addon. Es un archivo HTML sobre la Browser API que reúne el clima en vivo, titulares, cotizaciones y el estado de tus propios servidores en una pantalla tranquila. En un navegador normal se degrada con elegancia; dentro de una app de mHub cada tarjeta cobra vida.

Glance: reloj, clima, cotizaciones y titulares de noticias como tarjetas tranquilas en una sola pantalla.
Glance, un archivo HTML que muestra en vivo el clima, titulares y cotizaciones.
Lo que puedes crear

Una idea, una carpeta, todas las pantallas.

Todo lo que tenga una lista puede ser un addon, y todo lo que un navegador se niega a hacer puede ser un sitio dentro de mHub. Son ideas que nos gustaría ver hechas realidad, y cada una está a un prompt de distancia: elige una y aparecerá en el prompt para la IA, más abajo.

Addon: una carpeta de archivos JSON, alojada en cualquier sitio o en mhub.mx Sitio: una página web sobre la Browser API App: Vuma con tus addons y tu nombre

Ver

Addon

Tu canal de televisión regional

Cada emisión que el canal pone en línea, en filas por programa, con las noticias de la noche primero.

Addon

Un festival de cine

La programación con tráileres y sinopsis, para explorar por día, sala y sección.

Addon

Cine mudo

Películas de dominio público del Internet Archive, ordenadas por década y director.

Addon

Tu club deportivo

Resúmenes de partidos, partidos completos y el calendario de la temporada como catálogo en vivo.

Addon

Cámaras en vivo de la ciudad

Las webcams públicas de una ciudad, el puerto, la plaza, la montaña, como canales en vivo.

Addon

Sesiones municipales

Grabaciones y transmisiones en vivo del consejo municipal de tu localidad, por sesión y punto del orden del día.

Escuchar

Addon

Tus emisoras de radio

Las diez emisoras que de verdad escuchas, con logos, en el orden que prefieras.

Addon

Una red de podcasts

Todos los programas de una red a partir de sus feeds RSS, con los episodios más recientes primero.

Addon

Audiolibros por autor

Grabaciones de LibriVox de un autor, con los capítulos como episodios y la opción de seguir donde lo dejaste.

Addon

Cuentos para dormir

Cuentos breves en audio para niños, con una portada tranquila para cada cuento y sin anuncios.

Addon

Una comunidad religiosa

Los oficios y charlas de tu iglesia, mezquita o comunidad, en vivo y grabados.

App

La app propia de una emisora

Waves, con los streams y podcasts de una emisora y sus propios colores. Un archivo HTML.

Aprender

Addon

Clases de una universidad

Las grabaciones de clases públicas, por facultad y semestre, en el televisor en lugar de en el portátil.

Addon

Un curso de idiomas

Lecciones como episodios, en orden, con los ejercicios de audio junto a los videos.

Addon

Visitas a museos

Las videoguías y audioguías de un museo, sala por sala.

Addon

Escuela de cocina

Videos de recetas por tipo de plato y de cocina, con los ingredientes en la descripción.

Sitio

Un explorador de bibliotecas digitales

Una cara amable para Archive.org o Project Gutenberg: explora, busca y lee como en una app.

Addon

Charlas de una conferencia

Todas las charlas grabadas de una serie de conferencias, por año y temática.

Hogar y familia

Sitio

Una pantalla familiar

El clima, los titulares y el precio de las cosas que te importan, en una pantalla tranquila. Esta la hicimos nosotros: es Glance.

Sitio

Panel de control de casa

Luces, NAS, impresora, router. Los navegadores rechazan peticiones locales como esas; la app de mHub las hace por ti.

Sitio

Muro de cámaras

Tus propias cámaras, desde la red local, en una cuadrícula en el televisor.

Addon

El marco de fotos familiar

Fotos de tu propio servidor como catálogo de imágenes: el televisor se convierte en el marco.

App

TV infantil

Un addon, colores vivos, nada que desconfigurar desde el sofá. Es Junior.

Addon

Dibujos animados de un canal

Los episodios gratuitos de un canal infantil, por programa, para dejarles el mando sin preocuparte.

Herramientas

Sitio

Un lector de noticias

Obtén cualquier feed directamente de su fuente. Los navegadores normales lo bloquean; dentro de mHub simplemente funciona, y se lee bien desde el sofá.

Sitio

Un vigilante de precios

Consulta precios y disponibilidad en tiendas, lleva una lista de seguimiento y mira la respuesta en cualquier pantalla.

Sitio

Panel de estado de servidores

Tus propias máquinas, sus discos y servicios, como tarjetas que se ponen rojas antes de que nadie llame.

Addon

Un canal de YouTube, resuelto

Un addon de resolución: pega un canal y obtén sus videos como un catálogo que se reproduce.

Addon

Subtítulos para un idioma

Un addon de subtítulos para un idioma, que responde a ids de imdb, a partir de una fuente abierta de subtítulos.

Addon

Dónde ver un título

Escribe una película y mira dónde se puede ver en tu país. Un addon de elementos sobre una base de datos abierta.

¿Has creado uno de estos? Publícalo en mhub.mx: lo revisamos, lo alojamos con tu nombre y lo incluimos en el repositorio de la comunidad.

Primera parte · Haz tuya Vuma

Tu propia app es un archivo HTML.

Waves y Junior son exactamente esto: carga la compilación de Vuma, dale un elemento y llama a mount. Este archivo, en cualquier alojamiento estático, es una app terminada con tus addons, tu nombre y tus colores, y sigue las nuevas versiones de Vuma por sí solo. Sin compilación, sin código de servidor, sin cuenta.

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

Un addon es la URL de su manifiesto. Los que se alojan aquí aparecen en el índice de addons, y una IA puede crearte uno nuevo.

Todas las opciones de mount, y de dónde vienen los archivos, están documentadas en la propia app: Cómo crear tu propia app. Viene con la compilación, así que describe la versión que estás a punto de cargar y no aquella con la que se escribió esta página.

Segunda parte · El Addon Protocol v2

Un addon es una carpeta de archivos JSON.

Un addon es una fuente de contenido: películas, emisoras de radio, podcasts, recetas, cursos. Pon la carpeta en cualquier lugar de la web, añade su dirección en una app y todo lo que contiene aparecerá allí, listo para explorar. La versión 2 del protocolo no necesita servidor: cada endpoint puede ser un archivo estático en cualquier CDN. Todos los addons v1 existentes siguen funcionando; las apps traducen entre ambas versiones, y v1 sigue siendo compatible.

Primero lo estático

Todos los endpoints son GET, todos se pueden cachear y todos se pueden alojar como archivos normales. Un único POST opcional para el sistema de tareas.

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

Componible

Catálogos, detalles de elementos, fuentes, resolvers y subtítulos son recursos separados. Un addon puede ofrecerlos todos o solo uno.

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

Tareas client-fetch

Un endpoint puede responder con una tarea en lugar de datos. La app hace la petición con la IP del propio usuario, así que un addon estático funciona con API con bloqueo geográfico.

// el addon sigue siendo estático,
// el cliente hace el viaje

mhub-addon.json

Un addon mínimo es un manifiesto y un archivo de catálogo. Sube ambos a cualquier alojamiento estático y funciona. La especificación es OpenAPI 3.1 con tipos TypeScript generados y una biblioteca cliente sin dependencias, con licencia MIT, en GitHub.

{ "id": "my-movies", "name": "My Movies", "specVersion": 2,
  "resources": ["catalog"], "types": ["video"],
  "catalogs": [{ "id": "all", "name": "All", "type": "video" }] }
Segunda parte · Crea con IA

Descríbelo. Una IA lo construye.

Todo el formato de addons cabe en un solo prompt, y nunca tienes que leerlo. Copia el prompt, añade tu idea y la IA te responde con una carpeta de archivos. Súbelos a cualquier sitio y tu addon estará en línea.

01

Copia el prompt

Le indica a la IA dónde está la especificación. Funciona con cualquier asistente que pueda leer enlaces, como ChatGPT o Claude.

02

Añade tu idea

"Mis emisoras de radio favoritas." "Todas las películas de un director." "Las clases públicas de mi universidad." Cualquier cosa que tenga una lista.

03

Sube los archivos

Sirve cualquier alojamiento estático, y GitHub Pages es gratis. Añade la dirección en una app de mHub y explora tu propio addon.

Lee la especificación del mHub Addon Protocol v2 en
https://raw.githubusercontent.com/mediahubmx/protocol/main/openapi.yaml
y crea un addon para mí. Un addon es una carpeta de archivos JSON estáticos,
lista para subir a cualquier alojamiento web. Responde con cada archivo: su ruta completa
y después su contenido completo.

Mi addon: [describe aquí tu idea]

Si tu asistente no puede abrir enlaces, pega en el chat el archivo de la especificación. La especificación y addons de ejemplo completos están en GitHub.

Tercera parte · La mHub Browser API

Lo que tu sitio puede hacer dentro de mHub

Todo vive bajo un único espacio de nombres: window.mhub, y cada anfitrión ofrece el núcleo completo. Detecta el espacio de nombres una vez y después simplemente úsalo. Sin SDK, sin compilación, sin cuenta: una etiqueta script es toda la configuración, y puedes alojarla tú mismo sin problema.

<script src="https://mhub.mx/mhub.js"></script>
Comprobando este navegador…
Anfitrión
…
Dispositivo
…
Capacidades
…

La API ya funciona en las apps y va llegando con sus nuevas versiones. Programa con ella hoy y tu página seguirá funcionando en cualquier caso: donde no hay anfitrión, window.mhub simplemente no existe y tu sitio sigue siendo un sitio web normal. Consigue un navegador que la tenga.

mhub.fetch

Obtén lo que sea. Sin CORS, y con cabeceras de petición que el navegador normalmente se reserva para sí.

// otro origen, legible
const r = await mhub.fetch(url);

mhub.openStream

Algunos contenidos multimedia necesitan sus propias cabeceras de petición para reproducirse. Una llamada, y el anfitrión elige la vía correcta en cada plataforma.

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

mhub.storage

Almacenamiento clave/valor que sigue a tu sitio, no al dominio en el que se esté ejecutando. Sin avisos, sin configuración.

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

mhub-site.json

Si cae un dominio, tu sitio sigue cargando. Sirve un pequeño archivo en cada dominio; el navegador lo encuentra, verifica tus espejos y cambia de uno a otro por sí solo. Sin código.

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

mhub.setLinks

Una tarjeta en la pantalla de inicio del navegador. El camino de vuelta a tu sitio, que se conserva entre visitas.

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

mhub.setSearch

La barra de direcciones se convierte en el buscador de tu sitio. Las búsquedas y sugerencias van directo a tu página.

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

mhub.device + capabilities

Sabe dónde se ejecuta tu página y qué puede hacer el anfitrión, del teléfono al televisor, antes de dibujar nada.

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

…y las declaraciones de app

Una página que funciona como app le dice al anfitrión qué gestiona ella misma: su propia navegación hacia atrás (setBackHandler), un reproductor a pantalla completa (setImmersive) y la puerta de salida (exit); una etiqueta meta en el HTML indica que es una app pensada para el control remoto. Todos los miembros, con el modelo de permisos y el sistema de espejos, están en la referencia de la API.

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

Publicado por gente como tú.

56 addons comunitarios de 31 creadores hasta ahora. Inicia sesión con tu correo, sube una carpeta como zip o enlaza una que alojes tú, y en cuanto pase la revisión estará en mhub.mx/@you/addon, en la lista de la comunidad y en el repositorio de la comunidad.

Crea algo. Grande o pequeño.

La referencia de la API cubre todos los miembros, el modelo de permisos y el sistema de espejos. La especificación del protocolo incluye addons de ejemplo completos que puedes copiar.