Inicio Apuntes FPApuntes DAWNavewarndo, un navegador creado con Rust y Tauri

Navewarndo, un navegador creado con Rust y Tauri

Publicado por
about Navewarndo

Una vez más aquí. Hoy vengo a dejar un pequeño proyecto propio que hacía tiempo que quería desarrollar. El caso es que en mis equipos utilizo diferentes navegadores web, pero por una u otra razón siempre termino usando casi de manera inconsciente Firefox. La cosa es que siempre pensé que estaría bien hacerme mi propio navegador web, y aprovechando que me compré hace un par de semanas un libro sobre Rust, me he puesto a buscar un poco de información sobre el tema, y he llegado a la conclusión de que era hora de intentar crear mi propio navegador web. Así es como terminó naciendo Naverwarndo.

Navewarndo nace como un navegador web pensado para Linux (y con motor nativo también en Windows) que apuesta por usar el motor del sistema, una interfaz ligera y un núcleo creado en Rust con Tauri 2, sin embebido de Chromium. El resultado es un cliente compacto y orientado a navegar, ver vídeo e IPTV con un consumo de memoria contenido.

Este artículo vamos a ver qué es Navewarndo, qué características ofrece, cómo funciona por dentro y qué partes del código conviene conocer si quieres usarlo, empaquetarlo o contribuir. Como decía, está escrito para quien busca un navegador un poco diferente creado en Rust, una alternativa a Electron/Chromium o un proyecto open source centrado en IPTV, Torrents y privacidad local.

¿Qué es Navewarndo y por qué existe?

navegador web Navewarndo

La idea con la que nació este navegador es que Navewarndo no intenta clonar Chrome con otro nombre. Su premisa es técnica y clara: reutilizar WebKitGTK en Linux (y WebView2 en Windows) en lugar de distribuir un Chromium completo. Esa decisión cambia el tamaño del binario, el tiempo de compilación y el perfil de memoria en reposo.

En cifras orientativas que he encontrado por internet, y que he medido con el propio proyecto:

AspectoNavewarndoNavegador tipo Chromium
RAM en reposo~30–80 MB~200–500 MB
Compilar desde cerominutoshoras
Motor de renderizadonativo del SOChromium embebido

El público objetivo no es quien necesita mil extensiones de la Chrome Web Store. Es quien quiere pestañas, omnibox, favoritos, historial, descargas, buen soporte de vídeo e IPTV, un bloqueador de anuncios, perfiles de seguridad y un gestor de contraseñas local — sin pagar el peaje de un browser monolítico.

El proyecto es open source (MIT), se distribuye en Linux como .deb, .rpm y AppImage, y la documentación vive en el repositorio de GitHub junto al código.

Características del navegador: lo que puedes hacer día a día

opciones navegador

Navegación clásica, pensada en teclado y barra de URL

Navewarndo incluye lo esencial de un navegador moderno:

  • Pestañas (incluidas ancladas y reabrir cerradas)
  • Omnibox con sugerencias de historial, favoritos y búsqueda
  • Favoritos e historial
  • Descargas
  • Atajos habituales (palette de comandos, zoom, buscar en página, etc.)

La barra de direcciones no es un detalle menor: las sugerencias se muestran dentro de la interfaz. Al abrir el desplegable, el backend solo “empuja” un poco el área de contenido hacia abajo. Así se evita aparcar la página web o abrir una segunda ventana WebKit solo para el autocompletado — un problema típico en arquitecturas multi-webview en Linux.

Vídeo, IPTV y multimedia avanzada

iptv funcionando en  Navewarndo

Una de las señas de identidad de Navewarndo es el foco en multimedia:

  • Reproducción de H.264, HLS y MP4 apoyándose en GStreamer / WebKit en Linux
  • IPTV: abrir streams y listas .m3u / .m3u8 en un player local (http://127.0.0.1) con proxy para evitar CORS
  • Media Sniffer: detecta URLs de medios en páginas normales (HLS, MP4, DASH, magnets, torrents) y las ofrece desde un panel en la barra
  • PiP always-on-top: desacoplar el player a una ventana Tauri siempre encima
  • EPG XMLTV: guía “Ahora / Luego” cuando los canales traen tvg-id

Si buscas un navegador IPTV para Linux o un cliente ligero para listas M3U, esta es precisamente la zona donde Navewarndo hace algo diferente frente a un browser genérico.

Privacidad y seguridad sin nube obligatoria

  • Cuatro perfiles de seguridad (de Bajo a Paranoico): controlan cosas como autoplay, WebRTC o restricciones más agresivas
  • Adblock con lista integrada y soporte EasyList, activable/desactivable desde la UI
  • Whitelist / blacklist por dominio
  • Integración opcional con ExpressVPN vía CLI del sistema (expressvpnctl): la app no embebe un túnel propio
  • Gestor de contraseñas local: vault cifrado con AES-256-GCM y clave maestra en el keyring del sistema (con fallback a fichero restringido)
expressVPN

Cuando el bloqueador está desactivado, Navewarndo deja de inyectar el script de adblock en las pestañas de contenido y recrea esos webviews. El objetivo es que los sitios no detecten “huellas” de extensión (wrappers de fetch/XHR, CSS cosmético) si el usuario ha apagado el filtro a propósito.

BitTorrent integrado

Además de navegar, el cliente puede gestionar torrents y magnets desde un panel propio. El tráfico usa la red del sistema: si ExpressVPN está conectada a nivel de SO, el torrent irá por ese camino. Es una pieza más del enfoque “todo en local”, sin depender de un servicio cloud.

Cómo funciona por dentro: arquitectura dual-webview

La clave de Navewarndo no es solo “Rust + React”. Es la separación entre chrome y contenido:

┌─────────────────────────────────────────┐
│  Chrome UI (React + webview "main")     │
│  pestañas · omnibox · barras · paneles  │
├─────────────────────────────────────────┤
│  Content webviews (uno por pestaña)     │
│  WebKitGTK / WebView2 — páginas reales  │
└─────────────────────────────────────────┘
  1. Chrome (main)
    Interfaz de usuario en React + TypeScript + Tailwind. Aquí viven la barra de pestañas, la barra de direcciones, ajustes, prompts de permisos o de guardar contraseña, el Media Sniffer, etc.
  2. Contenido (content-<tab_id>)
    Cada pestaña activa (y un pequeño LRU de pestañas recientes) tiene su propio webview de contenido. Ahí se carga la web real, con scripts de inicialización (compatibilidad multimedia, sniffer, gestor de contraseñas, adblock si está activo).

En Linux, el layout se apoya en un contenedor GtkFixed personalizado: posicionar dos (o más) webviews hermanos es delicado. Si el chrome se expande a pantalla completa “como modal”, el contenido se aparca fuera de vista para que los paneles de la UI no queden tapados por WebKit. Si solo abres el omnibox, no se usa ese modo overlay: solo crece un poco la franja del chrome.

Esa distinción — overlay de modales frente a hueco del omnibox — es una de las lecciones de ingeniería más importantes del proyecto.

Stack tecnológico: Rust, Tauri 2, React y el motor nativo

Backend: Rust + Tauri 2

El crate principal (src-tauri) orquesta:

  • Ciclo de vida de ventanas y webviews (Tauri 2 con API unstable / multi-webview)
  • Estado del navegador (pestañas, zoom, adblock, overlay, omnibox…)
  • Persistencia local (sesión, favoritos, historial, ajustes)
  • Servidor HTTP local para el player IPTV, APIs del sniffer y del gestor de contraseñas
  • Filtro de anuncios a nivel de navegación / política de red en WebKitGTK
  • Comandos invoke que el frontend llama de forma tipada

Tauri aporta el puente IPC, el empaquetado (deb/rpm/AppImage) y el modelo de capabilities (permisos por ventana). El identificador de la app (com.naverwarndo.browser) se usa también como GTK app id para que el icono encaje mejor en paneles Linux.

Frontend: React + TypeScript

La UI no renderiza la web del usuario: renderiza el navegador alrededor. Componentes clave incluyen AddressBar, TabBar, paneles de ajustes, prompts y ventanas secundarias (ajustes, historial, torrents, PiP…). El frontend se construye con Vite y se embebe en el binario en release.

Motor: WebKitGTK / WebView2 (Wry)

En Linux, el renderizado pasa por WebKitGTK. Eso implica:

  • Menos peso que Chromium embebido
  • Dependencia de codecs GStreamer del sistema para mucho del vídeo
  • Particularidades (HLS nativo frágil, fullscreen, z-order de webviews) que el código mitiga con player propio, hooks GTK y scripts de compatibilidad

No es “Chrome con otra piel”: es un producto que abraza el motor del escritorio Linux y construye producto encima.

Partes importantes del código (mapa para desarrolladores)

Si abres el repositorio, estas son las zonas de mayor valor:

src-tauri/src/browser.rs

Corazón del estado: pestañas, etiquetas content-<id>, layout del content webview, aparcado de pestañas inactivas, altura del chrome y del omnibox. Aquí se decide cuándo expandir la UI y cuándo empujar solo el contenido.

src-tauri/src/linux_gtk.rs

La “fontanería” Linux: GtkFixed, posicionar webviews, fullscreen IPTV, hooks de adblock en la política de navegación, maximizar, grips de redimensionado. Quien toque el layout en Linux acaba aquí.

src-tauri/src/webview_settings.rs

Configura cada webview de contenido: user-agent, scripts de inicialización (media_compat, sniffer, password manager, adblock). También decide cuándo no inyectar adblock (adulto, stream, whitelist o bloqueador desactivado).

src-tauri/src/adblock.rs + scripts/

Listas, EasyList, script JS que envuelve fetch/XHR y CSS cosmético, más el toggle en caliente. El diseño actual prioriza no dejar huellas detectables con el bloqueador OFF.

src-tauri/src/iptv.rs y player local

Servidor tiny-http en localhost, proxy de streams, rutas /api/sniff, /api/password/*, páginas del player. Es el puente entre el content webview (que no tiene IPC Tauri completo como el chrome) y el núcleo Rust.

src-tauri/src/passwords.rs

Vault AES-256-GCM, keyring, prompts pendientes y comandos de Ajustes. El script password_manager.js detecta logins y habla con la API local.

Frontend src/components/AddressBar.tsx y App.tsx

Omnibox, foco del input (crítico en GTK: un relayout mal timed quita el foco al teclear .), y la bandera chromeOverlayActive que activa el modo modal sin confundirlo con las sugerencias de URL.

Empaquetado

tauri.conf.json, iconos (icons/icon.png 512×512), plantilla .desktop con StartupWMClass alineado al app id, y salidas en bundle/deb, bundle/rpm, bundle/appimage.

Instalación rápida y documentación

En desarrollo:

npm install
npm run tauri dev

Para construir los paquetes, basta con escribir:

npm run tauri build

En Debian/Ubuntu conviene tener plugins GStreamer (bad/ugly/libav) para vídeo e IPTV.

La documentación del proyecto está enlazada desde el README: compilación, IPTV, multimedia, VPN, contraseñas y troubleshooting.

¿Para quién es (y para quién no) Navewarndo?

Encaja bien si:

  • Usas Linux y quieres un navegador ligero para uso diario o secundario
  • Consumes IPTV / HLS / MP4 y valoras Media Sniffer y PiP
  • Prefieres privacidad local (adblock, vault, perfiles) sin cuenta en la nube
  • Te interesa el stack Rust + Tauri + WebKit a nivel de desarrollo

No es el sustituto ideal si:

  • Dependes de extensiones Chrome/Firefox concretas
  • Necesitas el máximo de compatibilidad “tal cual Chrome” en todos los sitios (el UA se puede acercar, pero el motor sigue siendo WebKitGTK)
  • Buscas sincronización cloud de contraseñas o un ecosistema de store de add-ons

Conclusión: un navegador con tesis técnica clara

Navewarndo demuestra que aún hay espacio para un navegador web ligero con tesis propia: motor nativo, UI moderna, núcleo Rust y multimedia de primera clase. No compite por ser el más compatible del planeta; compite por ser entendible, empaquetable y eficiente, con piezas reales — IPTV, sniffer, adblock, contraseñas cifradas, BitTorrent — bien integradas en un solo producto MIT.

Si te interesa probarlo, puedes empezar por probar el archivo AppImage o el .deb, revisa la guía de codecs en Linux y abre un stream IPTV o un sitio con vídeo: ahí se nota la diferencia de enfoque. Y si eres desarrollador, el mapa de módulos de este artículo debería bastar para orientarte en el código en menos de una tarde.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.