Ritiro di Excalidraw Electron a favore della versione web

Scopri perché il progetto Excalidraw ha deciso di ritirare il proprio wrapper Electron a favore del web completamente gestita.

Nel progetto Excalidraw, abbiamo deciso di ritirare Excalidraw Desktop, una Wrapper Electron per Excalidraw, in favore della versione web che hai si può trovare (e sempre possibile) all'indirizzo excalidraw.com. Dopo un'attenta analisi, hanno deciso che l'app web progressiva (PWA) è il futuro che vogliamo creare su di Google. Continua a leggere per scoprire perché.

Evoluzione di Excalidraw Desktop

Poco dopo che @vjeux ha creato la versione iniziale di Excalidraw in gennaio 2020 e ha scritto sul blog, ha proposto quanto segue nel Problema n. 561:

Sarebbe fantastico disporre di Excalidraw all'interno di Electron (o equivalente) e pubblicarlo come [specifico per la piattaforma] ai vari store.

La reazione immediata di @voluntadpear è stata suggerire:

Che ne dici di trasformarla in una PWA? Android al momento supporta l'aggiunta al Play Store come Attività web attendibili e, si spera, iOS faranno lo stesso presto. Sui computer, Chrome ti consente scaricare un collegamento sul desktop a una PWA.

La decisione che @vjeux ha preso alla fine è stata semplice:

Dovremmo fare entrambe le cose :)

Mentre la conversione della versione di Excalidraw in una PWA è stata avviata, @voluntadpear e altri successivi, @lipis in modo indipendente ha fatto progressi e ha creato un repository separato per Excalidraw Desktop.

A oggi, l'obiettivo iniziale stabilito da @vjeux, ovvero inviare Excalidraw nei vari store, ma non ancora raggiunto. Onestamente, nessuno ha mai iniziato la procedura di invio a uno qualsiasi dei negozi. Ma perché? Prima di rispondere, diamo un'occhiata a Electron, la piattaforma.

Cos'è l'elettrone?

Il punto di forza unico di Electron è che consente di "creare app desktop multipiattaforma con JavaScript, HTML e CSS". Le app create con Electron "compatibile con Mac, Windows e Linux", ovvero "Le app Electron vengono create ed eseguite su tre piattaforme". Secondo la home page, le parti difficili che Electron semplifica sono aggiornamenti automatici, menu e notifiche a livello di sistema, report sugli arresti anomali, debug e profilazione e Programmi di installazione di Windows. Risulta che alcune le caratteristiche promesse richiedono un'analisi dettagliata.

  • Ad esempio, gli aggiornamenti automatici "sono [attualmente] solo [supportati] su macOS e Windows. C'è nessun supporto integrato per l'aggiornamento automatico su Linux, quindi è consigliabile usare il comando gestore di pacchetti per aggiornare l'app".

  • Gli sviluppatori possono creare menu a livello di sistema chiamando Menu.setApplicationMenu(menu). Su Windows e Linux, il menu verrà impostato come il menu principale di ogni finestra, mentre su macOS ci sono molti menu standard definiti dal sistema, come Servizi o dal menu Fogli Google. Per rendere i menu standard, gli sviluppatori dovrebbero impostare il valore role del menu di conseguenza, ed Electron li riconoscerà e li farà diventare menu standard. Ciò significa che molte relativo al menu utilizzerà il seguente controllo della piattaforma: const isMac = process.platform === 'darwin'.

  • I programmi di installazione di Windows possono essere creati windows-installer. Il file README del progetto sottolinea che "per un'app di produzione devi firmare la tua applicazione. Internet Explorer Il filtro SmartScreen bloccherà il download della tua app e molti fornitori di antivirus lo faranno considera la tua app come malware se non ottieni un certificato valido" [sic].

Osservando solo questi tre esempi, è chiaro che Electron è tutt'altro che "scrivi una volta, esegui ovunque". La distribuzione di un'app negli store richiede firma del codice, una tecnologia di sicurezza la certificazione della proprietà dell'app. La pacchettizzazione di un'app richiede l'uso di strumenti come electron-forge e stavo pensando a dove ospitare pacchetti per gli aggiornamenti delle app. Diventa complesso in tempi abbastanza brevi, soprattutto quando l'obiettivo è il supporto multipiattaforma. Ci tengo a sottolineare che è assolutamente possibile creare app elettroniche con abbastanza impegno e dedizione. Non eravamo lì per Excalidraw Desktop.

Dove si era interrotto Excalidraw Desktop

Excalidraw Desktop finora è fondamentalmente l'app web Excalidraw in bundle come .asar con l'aggiunta di una finestra Informazioni su Excalidraw. Aspetto e la struttura dell'applicazione è quasi identica alla versione web.

L'applicazione desktop Excalidraw in esecuzione in un wrapper elettronico.
Excalidraw Desktop è quasi indistinguibile dalla versione web
"Informazioni" di Excalidraw Desktop finestra che mostra la versione del wrapper Electron e l'app web.
Il menu Informazioni su Excalibur che fornisce approfondimenti sulle versioni

Su macOS, ora c'è un menu a livello di sistema nella parte superiore dell'applicazione, ma poiché nessuno dei menu diverse, ad eccezione di Chiudi finestra e Informazioni su Excalidraw, sono collegate a qualsiasi elemento, il menu è, allo stato attuale, piuttosto inutile. Nel frattempo, tutte le azioni possono ovviamente essere eseguite tramite le normali barre degli strumenti di Excalidraw e il menu contestuale.

La barra dei menu di Excalidraw Desktop su macOS con "File", "Chiudi finestra" voce di menu selezionata.
La barra dei menu di Excalidraw Desktop su macOS

Usiamo electron-builder, che supporta associazioni dei tipi di file. Se fai doppio clic su un file .excalidraw, idealmente dovrebbe aprirsi l'app desktop Excalidraw. La un estratto pertinente del nostro file electron-builder.json ha il seguente aspetto:

{
  "fileAssociations": [
    {
      "ext": "excalidraw",
      "name": "Excalidraw",
      "description": "Excalidraw file",
      "role": "Editor",
      "mimeType": "application/json"
    }
  ]
}

Purtroppo, nella pratica, questo non sempre funziona come previsto, in quanto, a seconda del tipo di installazione (per l'utente corrente, per tutti gli utenti), le app su Windows 10 non hanno diritti necessari per associare un tipo di file.

Questi difetti e il lavoro in sospeso per rendere l'esperienza davvero simile a quella delle app su tutte le piattaforme (che, ancora una volta, con un impegno sufficiente è possibile) sono stati un argomento forte per cui abbiamo deciso di riconsiderare le nostre di investimento in Excalidraw Desktop. L'argomento più importante per noi, però, è che prevediamo che per il nostro caso d'uso, non abbiamo bisogno di tutte le funzionalità offerte da Electron. Un insieme cresciuto e ancora in crescita di capacità del web ci offre lo stesso livello di servizio, se non di più.

L'utilità del web oggi e in futuro

Anche nel 2020, jQuery è ancora molto popolare. Per molti agli sviluppatori è diventata un'abitudine usarla, anche se oggi potrebbe non aver bisogno di jQuery. Esiste una risorsa simile per Elettrone, chiamato appunto You potrebbe non avere bisogno di elettroni. Fammi sapere spiegando perché pensiamo di non aver bisogno dell'elettrone.

App web progressiva installabile

Excalidraw oggi è un'app web progressiva installabile con una un service worker e un file manifest dell'app web. Memorizza tutte le risorse in due cache, una per i caratteri e CSS correlati e una per tutto il resto.

Scheda Applicazione Chrome DevTools che mostra le due cache Excalidraw.
Contenuti della cache di Excalidraw

Ciò significa che l'applicazione è completamente offline e può essere eseguita senza una connessione di rete. I browser basati su Chromium sia su computer che su dispositivi mobili richiedono all'utente di installare l'app. Puoi vedere la richiesta di installazione nello screenshot seguente.

Excalidraw che chiede all'utente di installare l'app in Chrome su macOS.
Finestra di dialogo di installazione di Excalidraw in Chrome

Excalidraw è configurato per essere eseguito come applicazione autonoma, quindi quando lo installi ricevi un'app che viene eseguito in una propria finestra. È completamente integrato nell'interfaccia utente multitasking del sistema operativo. mostra la propria icona dell'app nella schermata Home, nel dock o nella barra delle applicazioni; a seconda della piattaforma su cui installi li annotino.

Excalidraw in esecuzione in una propria finestra.
La PWA Excalidraw in una finestra a parte
Icona Excalidraw sul Dock di macOS.
L'icona Excalidraw sul Dock di macOS

Accesso al file system

Excalidraw utilizza browser-fs-access per che accede al file system del sistema operativo. Sui browser supportati, questo consente apri→modifica→salva il flusso di lavoro e salva l'eccessivo risparmio e "salva con nome", con un fallback trasparente altri browser. Puoi scoprire di più su questa funzionalità nel mio post del blog Lettura e scrittura di file e directory con la libreria browser-fs-access.

Supporto del trascinamento

I file possono essere trascinati nella finestra Excalidraw come nelle applicazioni specifiche per piattaforma. Su un browser che supporta l'API File System Access, una il file può essere modificato immediatamente e le modifiche vengono salvate nel file originale. È così intuitivo che a volte ti dimentichi di avere a che fare con un'applicazione web.

Accesso agli appunti

Excalidraw funziona bene con gli appunti del sistema operativo. Interi disegni di Excalidraw o anche solo singoli oggetti possono essere copiati e incollati nei formati image/png e image/svg+xml, consentendo una facile integrazione con altri strumenti specifici della piattaforma come Inkscape o basati sul web come SVGOMG.

Menu contestuale Excalidraw che mostra "Copia negli appunti come SVG" e "copia negli appunti come PNG" le voci di menu.
Il menu contestuale di Excalidraw che offre azioni relative agli appunti

Gestione di file

Excalidraw supporta già l'API File handling sperimentale, Ciò significa che è possibile fare doppio clic su .excalidraw file nel gestore di file del sistema operativo e si apre direttamente nell'app Excalidraw, poiché si registra come gestore di file per .excalidraw file nel sistema operativo.

I disegni di Excalidraw possono essere condivisi tramite link. Ecco un esempio. In futuro, se utenti hanno installato Excalidraw come PWA, questi link non si aprono in una scheda del browser, ma avviano nuova finestra autonoma. In attesa di implementazione, questa operazione funzionerà grazie a l'acquisizione dichiarativa dei link, una proposta all'avanguardia per una nuova funzionalità della piattaforma web al momento della stesura di questo articolo.

Conclusione

Il Web ha fatto molta strada, con sempre più funzionalità che arrivano nei browser e solo un paio di anni o addirittura mesi fa erano impensabili sul web ed esclusive di applicazioni specifiche della piattaforma. Excalidraw è in prima linea su ciò che è possibile nel browser, pur riconoscendo che non tutti i browser su tutte le piattaforme supportano tutte le funzionalità che utilizziamo. Scommettendo su una strategia di miglioramento della sicurezza, sfruttiamo le più recenti e straordinarie funzionalità disponibili, ma senza lasciare dietro. Visualizzazione ottimale in qualsiasi browser.

L'elettrone ci ha servito bene, ma nel 2020 e oltre, possiamo farne a meno. E per questo obiettivo di @vjeux: poiché il Play Store di Android ora accetta le PWA in un formato container chiamato Attività web attendibile poiché Microsoft Store supporta le PWA, e potrai aspettarti di trovare Excalidraw in questi negozi in un futuro non troppo lontano. Nel frattempo, puoi Usare e installare sempre Excalidraw all'interno e dal browser.

Ringraziamenti

Questo articolo è stato esaminato da @lipis, @dwelle Joe Medley.