Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JS Takes the Desktop — Scotland JS
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Evan Morikawa
June 03, 2016
Programming
210
0
Share
JS Takes the Desktop — Scotland JS
Electron, React, & Native Win/Mac/Linux Experiences At Scale
Evan Morikawa
June 03, 2016
More Decks by Evan Morikawa
See All by Evan Morikawa
The Age of the Javascript-Powered Desktop — Dinosaur JS
emorikawa
0
920
Node on the Desktop — Node Conf Oslo 2016
emorikawa
0
150
Desktop JS — Empire JS 2016
emorikawa
1
580
Plugins with React & Challenges with Data
emorikawa
0
640
Space City JS — Using Electron & React to Build N1
emorikawa
1
250
MIT N1 Preview
emorikawa
0
530
Scaling Flux
emorikawa
0
590
Other Decks in Programming
See All in Programming
SREに優しいTerraform構成 modulesとstateの組み方
hiyanger
2
150
GitHubCopilotCLIをはじめよう.pdf
htkym
0
270
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
250
ハーネスエンジニアリングとは?
kinopeee
13
6.2k
mruby on C#: From VM Implementation to Game Scripting (RubyKaigi 2026)
hadashia
2
660
How Swift's Type System Guides AI Agents
koher
0
310
Making the RBS Parser Faster
soutaro
0
520
Cache-moi si tu peux : patterns et pièges du cache en production - Devoxx France 2026 - Conférence
slecache
0
300
「話せることがない」を乗り越える 〜日常業務から登壇テーマをつくる思考法〜
shoheimitani
4
860
Back to the roots of date
jinroq
0
450
Don't Prompt Harder, Structure Better
kitasuke
0
780
Server-Side Kotlin LT大会 vol.18 [Kotlin-lspの最新情報と Neovimのlsp設定例]
yasunori0418
1
190
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
280
Typedesign – Prime Four
hannesfritz
42
3k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
120
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
240
Fireside Chat
paigeccino
42
3.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Documentation Writing (for coders)
carmenintech
77
5.3k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Evolving SEO for Evolving Search Engines
ryanjones
0
180
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
JS Takes The Desktop Evan Morikawa | @e0m |
[email protected]
| June 2016 SCOTLAND JS Electron, React, & Native Win/Mac/Linux Experiences At Scale
None
None
None
None
Swing Qt Cocoa GTK WPF/WinRT …
NW.js (Node Webkit)
Shell
None
None
None
None
Chromium
Chromium Browser aka Backend aka Main Process
Chromium Browser aka Backend aka Main Process C++
Chromium Browser aka Backend aka Main Process C++ Renderer Renderer
Renderer HTML / JS (DOM) HTML / JS (DOM) HTML / JS (DOM)
Chromium Browser aka Backend aka Main Process C++ Renderer Renderer
Renderer HTML / JS (DOM) HTML / JS (DOM) HTML / JS (DOM) ipc
Browser aka Backend aka Main Process Renderer Renderer Renderer HTML
/ JS (DOM) HTML / JS (DOM) HTML / JS (DOM) ipc
Nylas N1
Nylas N1 main.js
Nylas N1 main.js const win = new BrowserWindow() win.loadURL(`file://index.html`) win.show()
Nylas N1 main.js const win = new BrowserWindow() win.loadURL(`file://index.html`) win.show()
Nylas N1 main.js const win = new BrowserWindow() win.loadURL(`file://index.html`) win.show()
index.html index.js
Nylas N1 main.js const win = new BrowserWindow() win.loadURL(`file://index.html`) win.show()
index.html index.js React.render()
Nylas N1 main.js const win = new BrowserWindow() win.loadURL(`file://index.html`) win.show()
index.html index.js React.render()
Nylas N1 main.js const win = new BrowserWindow() win.loadURL(`file://index.html`) win.show()
index.html index.js React.render() Composer Work Window
None
JS on the Desktop 1. “Native” experience 2. Performance 3.
Data Storage & Offline 4. Plugins & Extensibility
JS on the Desktop 1. “Native” experience 2. Performance 3.
Data Storage & Offline 4. Plugins & Extensibility
None
JS on the Desktop 1. “Native” experience 2. Performance 3.
Data Storage & Offline 4. Plugins & Extensibility Native extensions | Cross-platform CSS | Retina Detail
JS on the Desktop 1. “Native” experience 2. Performance 3.
Data Storage & Offline 4. Plugins & Extensibility Native extensions | Cross-platform CSS | Retina Detail
None
JS on the Desktop 1. “Native” experience 2. Performance 3.
Data Storage & Offline 4. Plugins & Extensibility Native extensions | Cross-platform CSS | Retina Detail Jasnkbusting | Worker windows
JS on the Desktop 1. “Native” experience 2. Performance 3.
Data Storage & Offline 4. Plugins & Extensibility Native extensions | Cross-platform CSS | Retina Detail Jasnkbusting | Worker windows
ReactiveX.js
ReactiveX.js Thank you @mattpodwysocki!
const q = `SELECT * FROM threads WHERE …` Rx.Observable.fromQuery(q).subscribe((threads)
=> { this.setState({threads}) })
const q = `SELECT * FROM threads WHERE …` Rx.Observable.fromQuery(q)
.filter(myFn).subscribe((threads) => { this.setState({threads}) })
const q = `SELECT * FROM threads WHERE …` Rx.Observable.fromQuery(q)
.filter(myFn) .map(mapFn).subscribe((threads) => { this.setState({threads}) })
JS on the Desktop 1. “Native” experience 2. Performance 3.
Data Storage & Offline 4. Plugins & Extensibility Native extensions | Cross-platform CSS | Retina Detail SQL | Observables | Task Jasnkbusting | Worker windows
JS on the Desktop 1. “Native” experience 2. Performance 3.
Data Storage & Offline 4. Plugins & Extensibility Native extensions | Cross-platform CSS | Retina Detail Jasnkbusting | Worker windows SQL | Observables | Task
None
JS on the Desktop 1. “Native” experience 2. Performance 3.
Data Storage & Offline 4. Plugins & Extensibility Native extensions | Cross-platform CSS | Retina Detail React | Components as “data” Jasnkbusting | Worker windows SQL | Observables | Task
JS on the Desktop 1. “Native” experience 2. Performance 3.
Data Storage & Offline 4. Plugins & Extensibility Native extensions | Cross-platform CSS | Retina Detail Jasnkbusting | Worker windows SQL | Observables | Task React | Components as “data”
https://github.com/nylas/n1 Open Source
N1 Core Team https://nylas.com/team @e0m @bengotow @juanstejada @karim_hamidou @jackiehluo Drew
Regitsky
None
Evan Morikawa | @e0m |
[email protected]
| June 2016 Thank
you! Slides here
JS Takes The Desktop Evan Morikawa | @e0m |
[email protected]
| June 2016 SCOTLAND JS Electron, React, & Native Win/Mac/Linux Experiences At Scale