GitHubのページ
出典: GitHub

TinyJSは、JavaScriptでmacOS、Windows、Linux向けの小さなデスクトップアプリを作る実行環境です。画面表示にはOSに組み込まれたWebViewを使います。アプリごとにChromiumを同梱するElectronとは異なる構成です。

OS標準のWebViewで画面を表示

TinyJSのバックエンドは、コンパクトなJavaScript実行環境「txiki.js」で動きます。フロントエンドにはHTML、CSS、JavaScriptを使い、各OSのWebViewが画面を描画します。

描画エンジンは、macOSではWebKit、WindowsではWebView2、LinuxではWebKitGTKです。そのため、アプリの見た目はOSによってわずかに異なる場合があります。

The Registerによると、TinyJSのスターターパッケージは約5.6MBで、ランチャーはさらに約1MBです。同媒体は、Electronの基本的なアプリでも150MBになる場合があると報じています。

JavaScriptでバックエンドと画面を作成

TinyJSでは、バックエンドとフロントエンドの双方をJavaScriptで記述できます。バックエンドはtxiki.jsを通じてファイル、ソケット、プロセス、FFI(異なる言語間で関数を呼び出す仕組み)を扱えます。

アプリとバックエンドの通信には、HTTPサーバーやポートではなく、プライベートな一時ディレクトリ内のUnixドメインソケットを使います。作者によると、この構成ならアプリごとにHTTPサーバーを同梱せずに済みます。

基本のひな型は依存パッケージなしで利用でき、React、Vue、Svelteなどのフレームワークにも対応します。フレームワークを使う場合はViteと連携し、開発中のホットリロードやビルド済みファイルの同梱ができます。

OSの機能をアプリから利用

TinyJSは、ネイティブのメニュー、ダイアログ、通知、トレイやメニューバーの機能を提供します。ドラッグ&ドロップでは実際のファイルパスを受け取り、ウィンドウも操作できます。

The Registerによると、同じ機能をTauriで使うにはプラグインを個別に取り込む必要があります。また、作者はTauriではRustでアプリを書く必要があると指摘し、TinyJSはバックエンドもJavaScriptで記述する設計です。

TinyJSは、ウェブページのURLをウィンドウに指定し、既存のサイトをデスクトップアプリのように表示する使い方にも対応します。開発中はフロントエンドの変更がウィンドウ内に反映され、バックエンドの変更時にはプロセスが再起動します。

サンプルアプリと対応OS

作者が用意したサンプルアプリの一覧には、世界時計、クリップボード履歴、Markdownエディター、SQLiteブラウザーなど25本があります。Winampのクローンも含まれ、The Registerによると容量は7.4MBです。

The RegisterがWindowsで試したところ、世界時計は正常に動作し、使用メモリーは15.5MBでした。一方、Mac向けのショートカットキーを使うクリップボードアプリには、Windows上で不具合があったと報告しています。

TinyJSはmacOS向けに提供され、WindowsとLinuxはベータ版です。LinuxではWebKitGTKの実行環境が必要です。TinyJSの配布情報によると、X11とWaylandのセッションに対応しています。

Windows版の試用では、ダウンロードしたアプリの検証にランチャーのハッシュ確認が使われました。