01 · シェル
軽いネイティブウィンドウ。
Tauri 2、システムのWebView上で動作。どのアプリにも欲しかったウィンドウまわりの機能:
- タブ、ピン留めタブ、分割ペイン: タブやリンクを端までドラッグ
- アカウントごとに専用プロファイル、並べて同時にログイン
- リンクの開き方: 同じタブ、横、新しいタブ、またはブラウザー
- アドレスバーとコマンドパレット Ctrl K
- 静かにインストールされる署名付きアップデート
(FOSS) いまや、すべてがアプリ。
wayBetterは、いつも使っているアプリを軽いネイティブウィンドウに収め、その場で拡張します。BetterDiscordがDiscordを拡張するのと同じ発想です。タブ、分割ペイン、すべてのアカウントを横に並べて表示、テーマ、プラグイン、そしてアプリ自体のバグの修正。テーマもプラグインも、誰でも作れます。次のアプリも、誰でも作れます。
Windows版wayBetter for Xをダウンロード · 無料 · GPL-3.0-or-later · 読んだもの・投稿したものを追跡しません
waybetterの依存関係 0個01 課題
残りは手に入りません。アカウントをいくつ使えるか、どんな見た目か、バグがいつ直るかは、アプリが決めるからです。wayBetterはアプリをそのまま使い、残りの半分を足します。
1ウィンドウに1アカウント。ログアウトして、ログインして、の繰り返し。
すべてのアカウントを横に並べて、同時にログインしたまま。
アプリにバグ?直してくれるのを待つだけ。
あなたのマシン上で、その場で、今日直ります。
彼らが選んだ見た目。彼らが出した機能。
誰でも書けるテーマとプラグイン。
どのデスクトップクライアントにも、ブラウザーがまるごと同梱。
システムのWebView上で動く、軽いネイティブウィンドウがひとつ。
軽さは設計から
アプリごとに別のブラウザーを抱え込むのではなく、システムにすでにあるWebView上のネイティブウィンドウです。
Windows 11上のwayBetter for X 1.0で計測。インストーラーのサイズは公開中のダウンロードのもの、起動時間は3回の中央値、ランタイムの評価時間とロングタスク(>50 ms)はwayBetterあり・なしで計測しました。
02 ひとつのシステム
wayBetterのアプリはすべて同じシステムでできています。ネイティブのシェル、ページ内のランタイム、そしてそのアプリを知っている小さなアダプターです。アプリ自体はこれまでどおり動きます。プロキシも再ホストもなく、変更はあなたのマシン上だけで行われます。
01 · シェル
Tauri 2、システムのWebView上で動作。どのアプリにも欲しかったウィンドウまわりの機能:
02 · ランタイム
アプリ自身のページに注入され、すべてのwayBetterアプリで共有されます:
03 · アダプター
アプリを知っているのはここだけ: ホスト、レイアウト、アカウントボタン、そしてアプリがすでに読み込んでいるデータ。
SiteSpecと、ページ側のSiteAdapter03 最初のアプリ
本物の x.com をタブと分割ペインで。すべてのアカウントを並べて、14 のテーマ、8 つのエリアプラグイン、そして X が抱えるバグの修正:競合するいいねとフォロー、消える下書き、跳ねるタイムライン。Windows、macOS、Linux で今すぐ使えます。
本物のx.comをタブと分割ペインで。各アカウントは専用プロファイルで同時にログインしたまま。
確実に届くいいねとフォロー、「戻る」で保たれる位置、跳ねないタイムライン、再試行されるアップロード。
すべての下書きをリビジョン履歴ごとローカルに保存し、Xが失くしたときには元に戻します。
色だけでなく、まるごとのリデザイン。Reader+、Chat+、Media+ ほか 5 つのエリアプラグイン、機能ごとにスイッチ付き。
タブ、アカウント、設定、そして演算子チップ付きのX検索に使えるコマンドパレット。
TweetDeckスタイルのデッキ: Xのカラムを横に並べ、それぞれ選んだアカウントで表示。フィルターと未読数つき。
04 自分好みに
テーマはJSONファイル1つ。プラグインはJavaScriptファイル1つ。使うのに審査待ちもアカウントも要りません。書いて、フォルダーに入れて、ファイルを共有するか、ストアで公開するだけ。CSSが書ければ、アプリの見た目を作り変えられます。JavaScriptが少し書ければ、いつまでも実装されなかった機能を自分で足せます。
外観パネルでJSONをインポート・エクスポート。コントラストは自動でチェックされ、どの面の上でも文字が読みやすく保たれます。
{
"name": "Deep Sea",
"author": "@you",
"mode": "dark",
"colors": { "bg": "#06141b", "text": "#e6f4f1", "accent": "#2ee6c5" },
"font": { "family": ["Geist"], "scale": 1.02 },
"shape": { "radius": 14, "button": 9999, "avatar": "rounded" },
"layout": { "density": "compact", "cards": true },
"background": { "kind": "pattern", "pattern": "grid",
"ink": "#2ee6c5", "opacity": 0.08, "size": 28 },
"effects": { "hover": "glow" }
}
start()とstop()。BetterDiscordスタイルの*.plugin.jsをプラグインフォルダーに入れ、設定でオンにします。面倒な部分はヘルパーAPIが引き受けます。
/**
* @name Copy Quote
* @description y on a focused post copies "@handle: text".
* @version 1.0.0
* @author @you
*/
module.exports = class CopyQuote {
start() {
const api = window.wayBetter.api;
this.scope = api.scope();
this.scope.onKey((event, post) => {
if (event.key !== 'y' || !post) return;
const t = api.tweet(post);
if (t) api.copyText(`@${t.handle}: ${t.text}`)
.then(() => api.toast('Copied'));
});
}
stop() { this.scope.dispose(); }
};
ヘルパーAPI
storage(ns)observe(sel, fn)onRouteChange(fn)onKey(fn)tweet(el)copyText(s)toast(msg)injectCSS(id, css)waitFor(sel)scope()wayBetter for Xには14個が付属
05 この上に作る
wayBetter for Xを支えるページランタイムとシェルモデルは、waybetterとしてnpmで公開しています。型付きの素のESM、モジュールごとのサブパス、依存関係ゼロ。必要な部品だけ使うことも、アプリをまるごと作ることもできます。
npm i waybetter
import { configureRuntime, type SiteAdapter }
from 'waybetter/runtime/site';
export const KICK: SiteAdapter = {
product: 'wayBetter for Kick',
hosts: ['kick.com'],
runtimeGlobal: 'WayBetterKick',
apiMarks: ['/api/'],
// plugins, rail, account, links, themeSources …
};
configureRuntime(KICK);
waybetter/runtime/*
siteアダプターの構成ルートdomHubMutationObserverひとつ、フレームひとつnetHubすべての機能で共有するfetch/XHRフックひとつpluginApiユーザープラグイン用のヘルパーthemeTokensOKLabカラーモデルpaneNav分割表示でナビゲーションをひとつにlinkRouting横、タブ、またはブラウザーaccountReportログイン中のアカウントwaybetter/shell/*
addressModelアドレスバーのチップpaneModel分割ペイン、横に開くリンクlinkDropリンクをドロップすればペインにpaletteコマンドパレットのランキングprofileModelアカウントのプロファイルupdateModelアップデートチップwindowControlsタイトルバーとウィンドウ操作ボタンchromeタイトルバーとツールバーのサイズ06 次の展開
Web版のあるアプリなら、同じウィンドウ、テーマ、プラグインを手に入れられます。以下は次の候補です。いずれも発表済みではなく、日程もありません。誰かがアダプターを書くのを待っています。README自体のアダプター例はKickです。
次の候補であり、発表済みの製品ではありません。YouTube、Kick、Twitch、Discordは各所有者の商標であり、ロゴはサービスを示す目的でのみ表示しています。wayBetterはこれらのいずれとも提携しておらず、承認も後援も受けていません。
07 無料でオープンソース
有料プランも、広告も、アップセルもありません。今も、「ベータ後」も。
GPL-3.0-or-later。フレームワークもアプリも、ソースをgit.crt.fyiで公開しています。
アナリティクスなし、読んだもの・投稿したものの追跡なし。下書き、設定、プラグインはあなたのマシンに残ります。
フォークして、テーマを作って、プラグインを書いて、次のアプリを作りましょう。ライセンスが、次の人のためにもオープンなまま保ちます。
08 原則
ログインするのはアプリそのものです。プロキシも再ホストもなく、変更はあなたのマシン上だけで行われます。
システムのWebView上のTauriウィンドウ。アプリごとにひとつ、その中にすべてのアカウント。
修正は、あなた自身のクリックを確実に届けるためのもの。wayBetterが自分で投稿、フォロー、削除をすることはありません。
アップデートは署名付きで静かにインストールされるので、インストーラーをやり直さなくても修正が届きます。