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
220
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
930
Node on the Desktop — Node Conf Oslo 2016
emorikawa
0
150
Desktop JS — Empire JS 2016
emorikawa
1
590
Plugins with React & Challenges with Data
emorikawa
0
650
Space City JS — Using Electron & React to Build N1
emorikawa
1
250
MIT N1 Preview
emorikawa
0
540
Scaling Flux
emorikawa
0
610
Other Decks in Programming
See All in Programming
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.5k
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
420
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
620
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
170
dRuby over BLE
makicamel
2
400
はてなアカウント基盤 State of the Union
cockscomb
1
1.1k
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
140
Webフレームワークの ベンチマークについて
yusukebe
0
180
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
320
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
230
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
1k
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
200
Featured
See All Featured
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Unsuck your backbone
ammeep
672
58k
Believing is Seeing
oripsolob
1
160
Navigating Weather and Climate Data
rabernat
0
260
Joys of Absence: A Defence of Solitary Play
codingconduct
1
400
The Cult of Friendly URLs
andyhume
79
6.9k
Building Applications with DynamoDB
mza
96
7.1k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
630
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
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