OASIS_LINUX/docs/devs/architecture/00-README.md
SITO ddd2787b73 Oasis 0.9.5 con Karvan para escritorio
Rama de desarrollo experimental sobre el Oasis de epsylon, sin afiliacion con el
proyecto original. Base: 0.9.5.

Trae el modulo Karvan —salas efimeras en memoria con autodestruccion por TTL, chat
que funciona sin JavaScript y llamadas de audio y video sobre WebRTC— con el enlace
en el menu lateral por el mismo patron que el resto de modulos: renderKarvanLink
calcado de renderPollsLink, entrada en modules_view y en la lista de /modules.

Los estilos del modulo van en su propia hoja, styles/karvan.css, siguiendo el patron
de highlight.css: asi se ve igual con cualquier tema, sin depender del tema movil.

Sin servidores ICE de terceros: no hay STUN de fabrica, porque un STUN aprende la IP
publica y el momento de cada llamada. Solo candidatos host salvo que se configure un
TURN propio en oasis-config.json, con credenciales efimeras por el mecanismo REST de
coturn.

El codigo propio vive separado —views/fork/, backend/fork_routes.js,
models/karvan_model.js y translations/fork/— de modo que sobre los ficheros de
upstream solo hay enganches de una linea y cada version nueva se integra sin
arrastrar nada.

Respecto al arbol de Android: fuera el wrapper y main.js, que es su arranque; el
tema vuelve a Dark-SNH y se restauran los modulos que en movil se recortan por peso.

Verificado arrancando sin OASIS_MOBILE: nueve rutas OK, menu lateral de upstream con
27 grupos y el enlace de Karvan, cero rastro de la interfaz movil (ni hexagonos, ni
topbar, ni barra inferior), y una sala creada y servida.
2026-08-19 00:35:08 +02:00

3.1 KiB

Guía de desarrollo de Oasis

Esta carpeta documenta cómo está construido Oasis por dentro, para que puedas entenderlo y extenderlo (por ejemplo, creando un módulo de juegos nuevo).

Está pensada para leerse en orden, pero cada archivo es autónomo.

Índice

  1. 01-red-ssb.md — Cómo funciona Oasis a nivel de red: Secure Scuttlebutt (SSB), secret-stack, multiserver, muxrpc, EBT, blobs, federación P2P, puertos y cifrado.

  2. 02-arquitectura-software.md — La arquitectura de software del backend: el patrón MVC casero (models / views / backend.js), el stack de dependencias, el "cooler", el flujo de una petición y cómo se interrelacionan los archivos.

  3. 03-modulos-y-juegos.md — Cómo está construido el módulo de juegos actual y la anatomía de un módulo en general.

  4. 04-tutorial-modulo-desde-cero.mdTutorial paso a paso para crear un módulo nuevo desde cero (caso práctico: un módulo de juegos propio), con todos los puntos de integración.

  5. 05-mapa-funciones.txtGran mapa ASCII de cómo se relacionan las funciones lógicas entre archivos, la persistencia (SSB) y la media (blobs).

Conceptos en 30 segundos

Oasis es un cliente web de Secure Scuttlebutt (SSB). SSB es un protocolo social P2P, distribuido y federado: no hay servidor central; cada nodo tiene una copia local de un log append-only firmado criptográficamente, y los nodos se replican entre sí por gossip.

Oasis se compone de dos procesos:

  ┌─────────────────────────┐         ┌──────────────────────────┐
  │  SBOT (nodo de red SSB)  │ <─────> │  FRONTEND WEB (Koa/HTML)  │
  │  src/server/SSB_server   │  unix   │  src/backend/backend.js   │
  │  habla con otros peers   │  socket │  habla con tu navegador   │
  └─────────────────────────┘         └──────────────────────────┘
        puerto 8008 (SSB)                  puerto 3000 (HTTP)
  • El sbot (src/server/SSB_server.js) es el nodo SSB: se conecta a otros peers, replica feeds, sirve y descarga blobs. → 01-red-ssb.md
  • El frontend (src/backend/backend.js) es un servidor HTTP en Koa que renderiza HTML puro (sin JS de navegador) y se conecta al sbot como cliente muxrpc por un socket Unix local. → 02-arquitectura-software.md

El patrón para cada funcionalidad ("módulo") es siempre el mismo:

  navegador → backend.js (ruta) → *_model.js (lee/escribe SSB) → *_view.js (HTML) → navegador

Las rutas, líneas y nombres citados en estos documentos corresponden a la versión 0.8.1 del código. Si editas el código, vuelve a comprobar los números de línea con grep.