Aunque el proposito principal de Javascript siempre ha sido ser usado en el navegador para crear aplicaciones web Frontend, muchas otras implementaciones del lenguaje han ido apareciendo en los ultimos años, como usar Javascript en el backend (junto con Nodejs), usar Javascript en Apps moviles (React Native, Ionic, NativeScript), en CLIs (Common Line interfaces), Juegos, o incluso IoT, y por supuesto el desarrollo de aplicaciones de escritorio.
¿Qué es Electron?
Por ejemplo, el Framework más popular de Javascript para crear aplicaciones de escritorio, durante muchos años ha sido y es aun Electron.js, este permite basicamente convertir una aplicacion web creada con algun Framework de Javascript (React, Angular, Vue, Svelte, etc) en una aplicacion de escritorio multiplataforma, sin mucho esfuerzo.
Ademas que tambien ofrece una enorme cantidad de APIs muy bien documentadas para poder:
- Actualizar remotamente de aplicacion desktop
- ejecutar un shell
- enviar notificaciones
- empaquetar tu código
- usar protocolos de Red
entre otras caracteristicas.
Electron logra esto primero ejecutando código de Javascript en el backend con Nodejs y cargando una ventana que esta creada usando un Chromiun, un navegador web Open Source que es la base de navegadores como CHrome, Brave, Edge, por nombrar algunos.
Solo que el navegador que crea Electorn tambien puede acceder al sistema operativo, y se pueden crear multiples ventana por separado o intercomunicarlas.
¿Porque no usar Frameworks Nativos?
Ahora la pregunta que muchos desarrolladores se hacen es ¿porque usarias Javascript, cuando tienes lenguajes como Java, C#, C++, e incluso Python para crear aplicaciones de escritorio, con APIs que llevan muchos años en desarrollo y con un muy buen rendimiento?.
Y la respuesta esta la facilidad para integrar muchos entornos de desarrollo en un solo ecosistema y que muchos desarrolladors puedan beneficiarse.
Es decir, las empresas que quieren usar Javascript para crear apps de escritorio, no crean software desktop principalmente sino crean servicios web que necesiten adicionalmente aplicaciones de escritorio.
Por ejemplo servicios como Spotify, Slack, Microsoft Teams, Notion, Github, Figma, Discord, Skype, Dropbox o 1Password, son aplicaciones web y moviles principalmente y que adicionalmente ofrecen apps de Escritorio.
Y la razon principal de porque muchos proyectos usen Electron , esta en que si tu negocio principal viene de apps moviles y de la web, no es muy buena idea desarrollar otra aplicacion en un entorno de desarrollo distinto (con Lenguajes y herramientas distintas), cuando tu base de ususario Desktop no es muy grande. En lugar de eso puedes enfocarte en mejorar las aplicaciones princiaples y reusar gran parte de esa logica en crear aplicaciones extras (como la de escritorio).
Usando Frameworks Desktop de Javascript no llegarás a crear una aplicacion de alto rendimiento como Autocad, o un game engine como unity, o un Navegador web, o un videojuego con excelentes graficos, porque estos requieren niveles altos de rendimiento, y seguridad; cosas que solo lenguajes nativos se los daran (C++, C#, Java). Pero para estos servicios que he mencionado donde se quiere poder reutilizar los mismos componentes que desarrollan para la web, que sus desarrolladores lancen cambios constantes y que no lleven mucho esfuerzo lograrlo, es una opcion bastante buena.
De alli que todos estos servicios que te menciono, justamente tengan sus aplicaciones de escritorio desarrollado con Electron o Frameworks desktop basados en web Similares a electron.
Aunque tambien esta la opcion contraria, crear una aplicacion de escritorio que luego pueda convertirse en una app web facilmente. Por ejemplo Visual Studio Code, que tambien usa Electron por debajo y que empezó siendo una aplicacion de escritorio, y ahora tambien tiene multiples versiones web como vscode.dev, o Github Codespaces (VSCode en la nube).
Alternativas a Electron
Pero por supuesto Electron ya no es la unica opcion, de hecho en estos ultimos años han ido apareciendo opciones similares en otros lenguajes de programacion que ofrecen un mejor rendimiento que Electron, alguno de estos son:
- node-gui, un Framework Open Source basado en el conjunto de componentes nativos de Qt6, que ofrecen un menor consumo de memoria y CPU a comparación de Electron. Y que ademas tambien tiene bibliotecas que se pueden integrar facilmente con Frameworks como React, Vue, o Svelte.
- Neutralino que genera interfaces ejectuables finales más ligeros que electorn, al no neceistar de todas las dependnecias que usa electron para funcioanr
- Tauri, Otro Framework similar a Electron solo que usa Rust en lugar de Nodejs para comunicarse con el sistema operativo, y en lugar de usar Chromium hace uso de WebView2 para renderizar los elementos, haciendo que las aplicaciones generadas pesen menos y consuman menos recursos al ejecutarse. Aunque su API aun esta siendo desarrollada por lo que de momento no tienen todas las caracteristicas de Electron, pero este es el proyecto más prometedor como alternativa.
- Wails Este es basicamente similar a Tauri, en el sentido que usar Go en lugar de NOdej, y WebView2 en lugar de Chromiun, Aunque de momento su API es aun más pequeña que la de Tauri.
- Flutter o si en tu caso no tienes problemas con desarrollar todo desde cero y buscas una opcion multiplataforma tambien esta Flutter, que es un Framework basado en el lenguje Dart, que tambien permite crear apps moviles, sin embargo este llega a generar ejecutables de apps desktop algo pesados y aun esta siendo desarrollado, asi que es algo a considerar
Y estos solo por mencionar algunos importantes, porque de hecho tambien hay muchas otras opciones que tambien permiten crear aplicaciones de escritorio multiplataforma sin hacer mucho esfuerzo como:
- [nw.js]
- nidium
- Proton Desktop
- React Desktop
- Vuido
- Graffiti
Sin embargo estos o estan descontinuados o simplemente no han recibido actualizaciones en mucho tiempo, o estan siendo desarrollados aun..
conclusion
En conclusión desarrollar actualmente aplicaciones de escritorio es bastante facil con la enorme cantidad de opciones que tenemos, si lo tuyo es más crear aplicaciones de escritorio y adicionalmente web, ve por los lengujaes nativos, y sus Frameworks Desktop, estos tienen mejor rendimiento y pueden ser más faciles de desarrollar si esta es tu area principal. Pero si por el contrario eres un desarrollador web y solo eventualmente desarrollas apps de escritorio, es mucho más facil ir por estos frameworks de Javasript al poder reutilizar componentes de tus Frameworks Frontend, y usando conceptos que ya usas a diario para crear aplicaciones moviles que se comunican con Backends, usando las mismas bibliotecas.
Cada vez tenemos más opciones de herramientas y el desarrollador tiene como responsabilidad saber cual es la mejor herramienta para cumplir con su trabajo