Saltar al contenido principal

Próximas versiones de Electron

· 2 lectura mínima

Electron está actualmente en pausa con los lanzamientos principales


¿Qué está pasando?

Nuestro Calendario de lanzamiento principal se mueve a la par de Chromium y el proyecto Chromium ha tomado la reciente decisión pausar sus lanzamientos debido a los horarios de trabajo ajustados. Esto significa que durante la duración de la cadencia alterada de Chromium, Electron también pausará temporalmente nuevas versiones importantes.

Creemos que nuestra mejor opción es seguir los pasos de Chromium, y por eso mientras tanto el equipo de Electron cambiará a trabajo de tiempo completo en resolver errores, seguridad, performance y estabilidad.

Queremos asegurarnos de que tanto el bienestar de nuestros mantenedores como el de nuestros consumidores sea prioritario durante este tiempo, por lo que agradecemos sus comentarios y esperamos volver a nuestro programa de lanzamiento regular.

Para más actualizaciones, por favor sigue nuestra Cuentea de Twitter.

Edición (2020-03-30): Electron 9 estable apuntará a Chromium M83 y será lanzado el 19 de mayo de 2020, en respuesta al anuncio de Chromium de omitir la fecha estable de M82 y ajustar la fecha estable de M83.

Electron 8.0.0

· 8 lectura mínima

¡Electron 8.0.0 ha sido liberado! Incluye actualizaciones a Chromium 80, V8 8.0y Node.js 12.13.0. ¡Hemos añadido el corrector ortográfico integrado de Chrome y mucho más!


El equipo de Electron esta emocionado de anunciar el lanzamiento de Electron 8.0.0! You can install it with npm via npm install electron@latest or download it from our releases website. La versión está empaquetada con versiones nuevas, correcciones y características nuevas. ¡No podemos esperar a ver lo que construyes con ellos! ¡Sigue leyendo para obtener más detalles sobre esta versión, y por favor comparte tus comentarios!

Notable Changes

  • Implementado el uso de la función de correctores ortográficos incorporados de Chrome. Consulte más detalles en #20692 y #21266.
  • La comunicación IPC ahora utiliza el algoritmo de clon estructurado de v8. Esto es más rápido, más característico y menos sorprendente que la lógica existente, y genera un aumento de rendimiento de 2x para tampones grandes y objetos complejos. La latencia de los mensajes pequeños no se ve afectada significativamente. Consulte más detalles en #20214.

Vea la notas de lanzamiento 8.0.0 para la lista completa de nuevas características y cambios.

Electron joins the OpenJS Foundation

· 2 lectura mínima

At Node+JS Interactive in Montreal, the OpenJS Foundation announced that it accepted Electron into the Foundation's incubation program. The Foundation is committed to supporting the healthy growth of the JavaScript ecosystem and web technologies by providing a neutral organization to host and sustain projects, as well as collaboratively fund activities for the benefit of the community at large.

The OpenJS Foundation is host to a number of open source JavaScript projects including jQuery, Node.js, and webpack. It's supported by 30 corporate and end-user members, including GoDaddy, Google, IBM, Intel, Joyent, and Microsoft. Electron is an open–source framework for building cross-platform desktop applications with web technologies.

This is an exciting move for Electron, and we see it as a next step in our evolution as an open-source project.


What this means for developers

Electron joining the OpenJS Foundation does not change how Electron is made, released, or used — and does not directly affect developers building applications with Electron. Even though Electron was originally created at GitHub in 2013, it is currently maintained by a number of organizations and individuals. In 2019, Electron codified its governance structure and invested heavily into formalizing how decisions affecting the entire project are made. We believe that having multiple organizations and developers investing in and collaborating on Electron makes the project stronger.

Lifting Electron up from being owned by a single corporate entity and moving it into a neutral foundation focused on supporting the web and JavaScript ecosystem is a natural next step as we mature as an open-source project.

Learning more

You can read up on the foundation, its mission, and its members on the OpenJSF website. For more information and quotes about the acceptance of Electron into the OpenJSF incubation program, check out the official press release. To learn more about the humans behind Electron and how they work together, take a look at our Governance page.

To get started with Electron itself, take a peek at our documentation.

Corrección de vulnerabilidad WebAudio de Chromium (CVE-2019-13720)

· 2 lectura mínima

A High severity vulnerability has been discovered in Chrome which affects all software based on Chromium, including Electron.

Esta vulnerabilidad ha sido asignada CVE-2019-13720. Puedes leer más al respecto en la Chrome Blog Post.

Tenga en cuenta que Chrome tiene informes de que esta vulnerabilidad se está utilizando, por lo que se recomienda encarecidamente que actualice Electron lo antes posible.


Ámbito

This affects any Electron application that may run third-party or untrusted JavaScript.

Mitigación

Affected apps should upgrade to a patched version of Electron.

We've published new versions of Electron which include fixes for this vulnerability:

Electron 7.0.1 incluye automáticamente la corrección desde el principio, antes de que se hiciera el anuncio. El electrón 8 tampoco se ve afectado. La vulnerabilidad no existía en Electron 5, por lo que esa versión tampoco se ve afectada.

Más información

Esta vulnerabilidad la descubrió Anton Ivanov y Alexey Kulaev en los Laboratorios Kaspersky e informó al equipo de Chrome. La entrada del blog de Chrome se puede encontrar aquí.

Para aprender más sobre las buenas prácticas para mantener tus aplicaciones Electron seguras, ve nuestro tutorial de seguridad.

Please file a GitHub Security Advisory if you wish to report a vulnerability in Electron.

Electron 7.0.0

· 5 lectura mínima

¡Electron 7.0.0 ha sido liberado! Incluye actualizaciones a Chromium 78, V8 7.8 y Node.js 12.8.1. Hemos añadido una ventana en versión de Arm 64, métodos IPC más rápidos, un nuevo API nativeTheme y mucho más!


El equipo de Electron esta emocionado de anunciar el lanzamiento de Electron 7.0.0! You can install it with npm via npm install electron@latest or download it from our releases website. La versión está empaquetada con versiones nuevas, correcciones y características nuevas. ¡No podemos esperar a ver lo que construyes con ellos! ¡Sigue leyendo para obtener más detalles sobre esta versión, y por favor comparte tus comentarios!

Notable Changes

  • Mejoras de pila:

    PilaVersión en Electron 6Versión en Electron 7¿Qué hay de nuevo?
    Chromium76.0.3809.14678.0.3905.177, 78
    V87.67.87.7, 7.8
    Node.js12.4.012.8.112.5, 12.6, 12.7, 12.8, 12.8.1
  • Se agregó Windows en versión de Arm (64 bit). #18591, #20112

  • Añadido ipcRenderer.invoke() y ipcMain.handle() para asíncrono de peticiones/respuestas de IPC. Estos son recomendados intensamente en el módulo remote. Consulte esta publicación del blog «el módulo ‘remoto’ de Electron considerado dañino» para más información. #18449

  • Añadida la API nativeTheme para leer y responder a los cambios en el tema y el esquema de color del SO. #19758, #20486

  • Cambiado a un nuevo generador de Definiciones de TypeScript. Las definiciones resultantes son más precisas; así que si falla su compilación de TypeScript, esta es la causa probable. #18103

Consulte las notas 7.0.0 de lanzamiento para una lista más larga de cambios.

Restaurar archivos borrados

Puedes encontrar más información sobre estos y futuros cambios en la página Cambios de última hora planificados.

  • Las API obsoletas eliminadas:
    • Versiones basadas en invocaciones de funciones que ahora usan Promises. #17907
    • Tray.setHighlightMode() (macOS). #18981
    • app.enableMixedSandbox() #17894
    • app.getApplicationMenu(),
    • app.setApplicationMenu(),
    • powerMonitor.querySystemIdleState(),
    • powerMonitor.querySystemIdleTime(),
    • webFrame.setIsolatedWorldContentSecurityPolicy(),
    • webFrame.setIsolatedWorldHumanReadableName(),
    • webFrame.setIsolatedWorldSecurityOrigin() #18159
  • Session.clearAuthCache() ya no permite más filtrar los apuntes de caché vaciadas. #17970
  • Las interfaces nativas en macOS (menús, diálogos, etc.) ahora coinciden automáticamente con el ajuste del modo oscuro en la máquina del usuario. #19226
  • Actualizó el módulo electron para usar @electron/get. La versión mínima admitida del nodo ahora es el Nodo 8. #18413
  • El archivo electron.asar ya no existe. Cualquier script de empaquetado que dependa de su existencia sería actualizado. #18577

Fin de soporte para 4.x.y

Electron 4.x.y ha alcanzado el final de mantenimiento según la directiva de mantenimiento del proyecto. Se anima a los desarrolladores y aplicaciones a actualizar a una versión de Electron nueva.

Programa de retroalimentación

Continuamos usando nuestro Programa de Comentarios para pruebas. Los proyectos quienes participan en este programa de pruebas de las betas de Electron en sus aplicaciones; y a cambio, los defectos nuevos que encuentran están priorizados para la versión estable. Si quieres participar o aprender más, revisa nuestra publicación de nuestro blog sobre el programa.

¿Y ahora, qué?

A corto plazo puedes esperar que el equipo continúe enfocándose en mantener al día con el desarrollo de los principales componentes que componen Electron, incluyendo Chromium, Node, y V8. Aunque tenemos cuidado de no hacer promesas sobre las fechas de lanzamiento, nuestro plan es lanzar versiones nuevas importantes de Electron con versiones nuevas de esos componentes aproximadamente cada trimestre. El calendario tentativo 8.0.0 traza fechas claves en el ciclo de vida del desarrollo de Electron 8. Además, consulta nuestro documento de versionado para obtener información más detallada sobre el versionado en Electron.

Para obtener información sobre los cambios de ruptura previstos en las próximas versiones de Electron, consulte nuestro documento de Cambios Planificados de Ruptura.

Electron 6.0.0

· 6 lectura mínima

El equipo de Electron esta emocionado de anunciar el lanzamiento de Electron 6.0.0! You can install it with npm via npm install electron@latest or download it from our releases website. La versión está empaquetada con versiones nuevas, correcciones y características nuevas. ¡No podemos esperar a ver lo que construyes con ellos! ¡Sigue leyendo para obtener más detalles sobre esta versión, y por favor comparte tus comentarios!


¿Qué hay de nuevo?

Hoy marca una primera para el proyecto Electron: esta es la primera vez que hemos hecho un lanzamiento estable de Electron el mismo día que el correspondiente Chrome estable! 🎉

Gran parte de la funcionalidad de Electron es proporcionada por los componentes principales de Chromium, Node.js y V8. Electron se mantiene actualizado con estos proyectos para proporcionar a nuestros usuarios características nuevas de JavaScript, mejoras de rendimiento y correcciones de seguridad. Cada uno de estos paquetes tiene una versión mayor en Electron 6:

Esta versión también incluye mejoras en las API de Electron. Las notas de lanzamiento tienen una lista más completa, pero aquí están los resaltados:

Promisificación

Electron 6.0 continúa la modernización iniciativa iniciada en 5.0 para mejorar Promise apoyo.

Estas funciones ahora devuelven Promesas y todavía soportan invocaciones antiguas basadas en retro-llamadas:

  • contentTracing.getCategories() #16583
  • contentTracing.getCategories() #16583
  • contentTracing.getTraceBufferUsage() #16600
  • contents.executeJavaScript() #17312
  • cookies.flushStore() #16464
  • cookies.get() #16464
  • cookies.remove() #16464
  • cookies.set() #16464
  • dialog.showCertificateTrustDialog() #17181
  • inAppPurchase.getProducts() #17355
  • inAppPurchase.purchaseProduct()#17355
  • netLog.stopLogging() #16862
  • session.clearAuthCache() #17259
  • session.clearCache() #17185
  • session.clearHostResolverCache() #17229
  • session.clearStorageData() #17249
  • session.getBlobData() #17303
  • session.getCacheSize() #17185
  • session.resolveProxy() #17222
  • session.setProxy() #17222
  • webContents.hasServiceWorker() #16535
  • webContents.printToPDF() #16795
  • webContents.savePage() #16742
  • webFrame.executeJavaScript() #17312
  • webFrame.executeJavaScriptInIsolatedWorld() #17312
  • webviewTag.executeJavaScript() #17312

Estas funciones ahora tienen dos formas, sincrónicas y asíncronas basadas en promesa:

  • dialog.showMessageBox()/dialog.showMessageBoxSync() #17298
  • dialog.showOpenDialog()/dialog.showOpenDialogSync() #16973
  • dialog.showSaveDialog()/dialog.showSaveDialogSync() #17054

Estas funciones ahora solo devuelven Promises:

Electron Helper (Renderer).app, Electron Helper (GPU).app y Electron Helper (Plugin).app

Para habilitar el tiempo de ejecución endurecido, el cual restringe cosas como memoria ejecutable de escritura y carga código firmado por un ID de equipo diferente, es necesario conceder al Ayudante derechos especiales de firma de código.

Mantener estos derechos a los tipos de proceso que los requieran, Chromium agregó tres nuevas variantes de la aplicación Helper: una para renderizadores (Electron Helper (Renderer).app), uno para el proceso GPU (Electron Helper (GPU).app) y otro para plugins (Electron Helper (Plugin).app).

La gente que usa electron-osx-sign para codiseñar su aplicación Electron no debería tener que hacer ningún cambio en su lógica de compilación. Si estás codiseñando tu aplicación con scripts personalizados, debes asegurarte de que las tres aplicaciones nuevas de Helper están correctamente codiseñadas.

Para empaquetar tu aplicación correctamente con estos ayudantes nuevos, necesitas usar electron-packager@14.0.4 o superior. Si estás usando electron-builder, deberías seguir este asunto para seguir la asistencia de estos ayudantes nuevos.

Restaurar archivos borrados

  • Esta versión comienza a sentar las bases para un futuro requisito de que los módulos nativos de Node cargados en el proceso de renderizador sean N-API o Conciente del Contexto. Las razones de este cambio son un rendimiento más rápido, una seguridad más fuerte, y una carga de trabajo de mantenimiento menor. Lea todos los detalles incluyendo la línea temporal propuesta en este asunto. Se espera que este cambio se complete en Electron v11.

  • Las cabeceras net.IncomingMessage han cambiado ligeramente para coincidir más estrechamente con el comportamiento de Node.js, particularmente con el valor de set-cookie y como son manejadas las cabeceras duplicadas. #17517.

  • Ahora shell.showItemInFolder() devuelve vacío y es una invocación asincrónica. #17121

  • Las aplicaciones ahora deben establecer explícitamente una ruta de registro invocando a la función app.setAppLogPath() nueva antes de emplear app.getPath('log'). #17841

Fin de soporte para 3.x.y

Por nuestra directiva de asistencia, 3.x.y ha llegado al fin de la vida. Se anima a los desarrolladores y aplicaciones a actualizar a una versión de Electron nueva.

Programa de retroalimentación

Continuamos usando nuestro Programa de Comentarios de para pruebas. Los proyectos quienes participan en este programa de pruebas de las betas de Electron en sus aplicaciones; y a cambio, los defectos nuevos que encuentran están priorizados para la versión estable. Si quieres participar o aprender más, revisa nuestra publicación de nuestro blog sobre el programa.

¿Y ahora, qué?

A corto plazo puedes esperar que el equipo continúe enfocándose en mantener al día con el desarrollo de los principales componentes que componen Electron, incluyendo Chromium, Node, y V8. Aunque tenemos cuidado de no hacer promesas sobre las fechas de lanzamiento, nuestro plan es lanzar versiones nuevas importantes de Electron con versiones nuevas de esos componentes aproximadamente cada trimestre. El calendario tentativo 7.0.0 traza fechas claves en el ciclo de vida del desarrollo de Electron 7. Además, consulta nuestro documento de versionado para obtener información más detallada sobre el versionado en Electron.

Para obtener información sobre los cambios de ruptura previstos en las próximas versiones de Electron, consulte nuestro documento de Cambios Planificados de Ruptura.

Nueva cadencia de liberación de Electron

· 4 lectura mínima
⚡ Actualización (2021-07-14): ¡Vamos aún más rápido!

En Q3 2021, el equipo de Chrome aumentó su cadencia de lanzamiento de cada 6 semanas a cada 4 semanas. Los lanzamientos de Electron han seguido el mismo camino. ¡Por favor, lea la entrada del blog de cada 8 semanas para obtener información más actualizada!

🎉 ¡Electron se está trabajando para lanzar una nueva versión estable cada 12 semanas! 🎉


⚡️ ¡Guau eso es rápido! Pero ¿por qué?

En pocas palabras, Chromium no detiene el lanzamiento por lo que Electron tampoco va a desacelerar.

Chromium lanza una version programada cada 6 semanas. Para entregar las versiones más actualizadas de Chromium en Electron, nuestro programa necesita seguir el suyo. Puede encontrar más información sobre el ciclo de lanzamiento de Chromium aquí.

🚀 ¿Por qué cada 12 semanas?

Cada 6 semanas, una nueva versión de Chromium viene con nuevas características, correcciones de errores / correcciones de seguridad y mejoras de V8. Los usuarios de Electron han sido fuerte y claros acerca de querer estos cambios de una manera oportuna, así que hemos ajustados nuestra fechas de lanzamientos estables para coincidir con los lanzamientos estables de Chromium. Primero, Electron v6.0.0 incluirá M76 y la fecha de publicación de la versión estable es 30 de Julio 30, 2019, el mismo día de lanzamiento que Chromium M76.

🚧 Qué significa esto para mi y mi aplicación Electron?

Tendrás acceso a nuevas características y correcciones de Chromium y V8 más temprano que antes. Importantemente, además sabrás cuando se acercan esos cambios, así que serás capaz de planificar con mejor información que antes.

El equipo de Electron continuará soportando las últimas tres versiones mayores. Por ejemplo, cuando v6.0.0 sea estable el 30 de Julio, 2019, soportaremos v6.x, v5.x, y v4.x, mientras que la v3.x alcanzará el final de su vida.

💬 Programa de retroalimentación

Por favor considere unirse a nuestro Programa de comentarios sobre la aplicación para ayudarnos con nuestros lanzamientos beta y estabilizaciones. Los proyectos quienes participan en este programa de pruebas de las betas de Electron en sus aplicaciones; y a cambio, los defectos nuevos que encuentran están priorizados para la versión estable.

📝 Una breve historia de los lanzamientos de Electron

Las decisiones acerca de las versiones estables antes de la v3.0.0 no seguían un agenda. Añadimos programas internos al proyecto con v3.0.0 y v4.0.0. A principios de este año, decidimos publicar nuestra fecha de lanzamiento estable por primera vez para Electron v5.0.0. Anunciar fechas de lanzamiento estables fue recibido positivamente en general y estamos encantados de seguir haciéndolo para futuras versiones.

Para optimizar mejor estos esfuerzos relacionados con la actualización, nuestros grupos de trabajos Upgrades y Releases fueron creados dentro de nuestro Governance. Ellos nos han permitido priorizar y delegar mejor este trabajo, el cual esperamos que se haga más evidente con la lanzamiento posterior.

Aquí es donde nuestra nueva cadencia nos colocará en comparación con la cadencia de Chromium:

gráfica de línea que compara Electron versus Chromium

📨 Si tienes alguna pregunta, por favor envíanos un correo electrónico a info@electronjs.org.

Electron 5.0.0

· 5 lectura mínima

El equipo de Electron esta emocionado de anunciar el lanzamiento de Electron 5.0.0! Puedes instalarlo con npm a través de npm install electron@latest o descargar los archivos tar desde nuestra página de lanzamientos. La versión está empaquetada con versiones nuevas, correcciones y características nuevas. ¡No podemos esperar a ver lo que construyes con ellos! ¡Sigue leyendo para obtener más detalles sobre esta versión, y por favor comparte tus comentarios!


¿Qué es lo nuevo?

Gran parte de la funcionalidad de Electron es proporcionada por los componentes principales de Chromium, Node.js y V8. Electron se mantiene actualizado con estos proyectos para proporcionar a nuestros usuarios características nuevas de JavaScript, mejoras de rendimiento y correcciones de seguridad. Cada uno de estos paquetes tiene una versión mayor en Electron 5:

Electron 5 también incluye mejoras en APIs específicas de Electron. Un resumen de los cambios principales está a continuación; para la lista completa de cambios, revisa las notas de lanzamiento de Electrón v5.0.0.

Promisificación

Electron 5 continúa Iniciativa de Promisificación para convertir la API basada en la devolución de invocaciones de Electron para usar Promises. Estas API fueron convertidas para Electron 5:

  • app.getFileIcon
  • contentTracing.getCategories
  • contentTracing.startRecording
  • contentTracing.stopRecording
  • debugger.sendCommand
  • API de cookies
  • shell.openExternal
  • webContents.loadFile
  • webContents.loadURL
  • webContents.zoomLevel
  • webContents.zoomFactor
  • win.capturePage

Acceso a colores del sistema para macOS

Estas funciones fueron cambiadas o añadidas a systemPreferences para acceder a los colores de los sistemas macOS:

  • sistema.getAccentColor
  • systemPreferences.getColor
  • systemPreferences.getSystem Color

Información de la memoria del proceso

La función process.getProcessMemoryInfo ha sido añadida para obtener estadísticas de uso de memoria sobre el proceso actual.

Filtrado adicional para API remotas

Para mejorar la seguridad en la API remote, se han añadido nuevos eventos remotos para que remote.getBuiltin, remote.getCurrentWindow, remote.getCurrentWebContents y <webview>.getWebContents pueden ser filtrados.

Múltiples vistas de navegador en la ventana de navegador

BrowserWindow ahora soporta la administración de múltiples BrowserViews dentro del mismo BrowserWindow.

Restaurar archivos borrados

Por defecto para aplicaciones empaquetadas

Las aplicaciones empaquetadas ahora se comportarán como la aplicación predeterminada: se creará un menú de aplicación predeterminado a menos que la aplicación tenga una y el evento window-all-closed se gestionará automáticamente a menos que la aplicación gestione el evento.

Arenero Mixto

El modo Arenero-mixto ahora está habilitado por defecto. Los renderizadores lanzados con sandbox: true ahora serán realmente hecho el arenero, donde previamente solo estarían enrollados si el modo mixed-sandbox también estaba activado.

Mejoras en seguridad

Los valores por defecto de nodeIntegration y webviewTag ahora son false para mejorar la seguridad.

Comprobante ortográfico ahora asíncrono

La API SpellCheck ha sido cambiada para proveer resultados asíncronos.

Obsolescencia

Las siguientes API están recientemente obsoletas en Electron 5.0.0 y están planificadas para su retirada en 6.0.0:

Binarios de instantánea Mksnapshot para arm y arm64

Los binarios nativos de mksnapshot para brazo y arm64 están obsoletos y se eliminarán en 6. .0. Se pueden crear instantáneas para brazos y arm64 usando los binarios x64.

API de ServiceWorker en WebContents

Las API de ServiceWorker Deprecated en WebContents para preparar su retirada.

  • webContents.hasServiceWorker
  • webContents.unregisterServiceWorker

Módulos automáticos con contenido de webContents en arenero

Para mejorar la seguridad. los siguientes módulos están siendo obsoletos para su uso directamente a través de requerir y en su lugar necesitarán ser incluidos a través de remote.require en un arenero de contenido web:

  • electron.screen
  • child_process
  • fs
  • os
  • ruta

webFrame APIs del mundo Aislado

webFrame.setIsolatedWorldContentSecurityPolicy,webFrame.setIsolatedWorldHumanReadableName, webFrame.setIsolatedWorldSecurityOrigin han sido obsoletos a favor de webFrame.setIsolatedWorldInfo.

Arenero Mixto

enableMixedSandbox y el interruptor de línea de comandos --enable-mixed-sandbox siguen existiendo por compatibilidad, pero están obsoletos y no tienen efecto.

Fin de mantenimiento para 2.0.x

Por nuestra directiva de versiones admitidas, 2.0.x ha llegado al fin de su vida.

Programa de retroalimentación

Continuamos usando nuestro Programa de Comentarios de para pruebas. Los proyectos quienes participan en este programa de pruebas de las betas de Electron en sus aplicaciones; y a cambio, los defectos nuevos que encuentran están priorizados para la versión estable. Si quieres participar o aprender más, revisa nuestra publicación de nuestro blog sobre el programa.

¿Y ahora, qué?

A corto plazo puedes esperar que el equipo continúe enfocándose en mantener al día con el desarrollo de los principales componentes que componen Electron, incluyendo Chromium, Node, y V8. Aunque tenemos cuidado de no hacer promesas sobre las fechas de lanzamiento, nuestro plan es lanzar versiones nuevas importantes de Electron con versiones nuevas de esos componentes aproximadamente cada trimestre. El calendario tentativo 6.0.0 traza fechas claves en el ciclo de vida del desarrollo de Electron 6. Además, consulta nuestro documento de versionado para obtener información más detallada sobre el versionado en Electron.

Para obtener información sobre los cambios de ruptura previstos en las próximas versiones de Electron, consulte nuestro documento de Cambios Planificados de Ruptura.

From native to JavaScript in Electron

· 4 lectura mínima

How do Electron's features written in C++ or Objective-C get to JavaScript so they're available to an end-user?


Fondo

Electron is a JavaScript platform whose primary purpose is to lower the barrier to entry for developers to build robust desktop apps without worrying about platform-specific implementations. However, at its core, Electron itself still needs platform-specific functionality to be written in a given system language.

In reality, Electron handles the native code for you so that you can focus on a single JavaScript API.

How does that work, though? How do Electron's features written in C++ or Objective-C get to JavaScript so they're available to an end-user?

To trace this pathway, let's start with the app module.

By opening the app.ts file inside our lib/ directory, you'll find the following line of code towards the top:

const binding = process.electronBinding('app');

This line points directly to Electron's mechanism for binding its C++/Objective-C modules to JavaScript for use by developers. Desbloqueo.ElectronBindings``ElectronBindings

process.electronBinding

These files add the process.electronBinding function, which behaves like Node.js’ process.binding. process.binding is a lower-level implementation of Node.js' require() method, except it allows users to require native code instead of other code written in JS. This custom process.electronBinding function confers the ability to load native code from Electron.

When a top-level JavaScript module (like app) requires this native code, how is the state of that native code determined and set? Where are the methods exposed up to JavaScript? What about the properties?

native_mate

At present, answers to this question can be found in native_mate: a fork of Chromium's gin library that makes it easier to marshal types between C++ and JavaScript.

Inside native_mate/native_mate there's a header and implementation file for object_template_builder.

mate::ObjectTemplateBuilder

If we look at every Electron module as an object, it becomes easier to see why we would want to use object_template_builder to construct them. This class is built on top of a class exposed by V8, which is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. V8 implements the JavaScript (ECMAScript) specification, so its native functionality implementations can be directly correlated to implementations in JavaScript. For example, v8::ObjectTemplate gives us JavaScript objects without a dedicated constructor function and prototype. It uses Object[.prototype], and in JavaScript would be equivalent to Object.create().

To see this in action, look to the implementation file for the app module, atom_api_app.cc. At the bottom is the following:

mate::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate())
.SetMethod("getGPUInfo", &App::GetGPUInfo)

In the above line, .SetMethod is called on mate::ObjectTemplateBuilder. .SetMethod can be called on any instance of the ObjectTemplateBuilder class to set methods on the Object prototype in JavaScript, with the following syntax:

.SetMethod("method_name", &function_to_bind)

This is the JavaScript equivalent of:

function App{}
App.prototype.getGPUInfo = function () {
// implementation here
}

This class also contains functions to set properties on a module:

.SetProperty("property_name", &getter_function_to_bind)

o

.SetProperty("property_name", &getter_function_to_bind, &setter_function_to_bind)

These would in turn be the JavaScript implementations of Object.defineProperty:

function App {}
Object.defineProperty(App.prototype, 'myProperty', {
get() {
return _myProperty
}
})

y

function App {}
Object.defineProperty(App.prototype, 'myProperty', {
get() {
return _myProperty
}
set(newPropertyValue) {
_myProperty = newPropertyValue
}
})

It’s possible to create JavaScript objects formed with prototypes and properties as developers expect them, and more clearly reason about functions and properties implemented at this lower system level!

The decision around where to implement any given module method is itself a complex and oft-nondeterministic one, which we'll cover in a future post.

Gobernanza Electron

· 3 lectura mínima

As Electron grows in popularity for desktop applications, the team working on it has also grown: we have more fulltime maintainers who work for different companies, live in different timezones, and have different interests. We're introducing a governance structure so we can keep growing smoothly.


Why are things changing?

People in the Electron project coordinate in timezones around the world with volunteers, with full-time maintainers, and with several companies who all rely on Electron. Until now, we've been successful with informal coordination; but as the team has grown, we've found that the approach doesn't scale. We also want to make it easier for new contributors to find a place to call home in the project.

Grupos de trabajo

Electron governance includes working groups that are responsible for different parts of the project. We're starting out with seven groups:

  • Community & Safety: Handles Code of Conduct issues.
  • Docs & Tooling: Oversees externally-focused tooling (e.g. Fiddle, Forge) and the Electron documentation.
  • Outreach: Helps grow the Electron community.
  • Releases: Ensures releases are stable and on schedule.
  • Security: Performs security testing and responds to security issues.
  • Upgrades: Integrates upstream upgrades, such as new versions of V8, Chromium, and Node.
  • Website: Maintains and improves the Electron website.

These groups will coordinate with each other, but each has their own meeting schedules and agendas to be productive on their own. More details on these groups are available at the governance repository.

Does this change the Electron project's direction?

This shouldn't have any direct effect on Electron's direction. If our strategy is successful, working groups will make it easier for new contributors to find topics that interest them, and make maintainers' lives simpler by moving discussion unrelated to their day-to-day work to other groups. If that happens, it may indirectly affect things by having more unblocked people working together.

Where can I learn more?