Tabla de contenido
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?

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:
| Aspecto | Navewarndo | Navegador tipo Chromium |
|---|---|---|
| RAM en reposo | ~30–80 MB | ~200–500 MB |
| Compilar desde cero | minutos | horas |
| Motor de renderizado | nativo del SO | Chromium 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

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

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/.m3u8en 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)
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 │ └─────────────────────────────────────────┘
- 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. - 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
invokeque 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.

