TweetDeck(旧)風のシンプルなマルチカラム型クライアントです。X (Twitter) のAPIを使用せず、WebView2 (Edgeレンダリングエンジン) を利用して複数のタイムラインを効率的に表示します。
- マルチカラム表示: ホーム、通知、検索、リスト、ユーザーなどをカラムとして自由に追加・並べ替え可能。
- プロファイル機能: 複数のアカウントや用途(趣味用、仕事用など)ごとに、Cookieや設定が完全に分離された環境を切り替えられます。
- 多言語対応: 日本語と英語の表示切り替えに対応しています。
- Chrome拡張機能のサポート: 広告ブロック(uBlock Origin等)やスタイル変更(Old Twitter Layout等)などの拡張機能をロードして使用できます。PC内のChromeから直接インポートすることも可能です。
- NGワード機能: 指定したキーワードを含むポストを非表示にできます。設定画面からの登録のほか、テキスト選択時の右クリックメニューからも追加可能です。
- フォーカスモード: ツイートや設定をクリックすると一時的に単一ビューに切り替わり、詳細確認や長文作成に集中できます。
- 柔軟なレイアウト:
- 等分割モード: ウィンドウ幅に合わせて全カラムを自動リサイズ。
- 固定幅モード: 横スクロールで多数のカラムを表示。幅の微調整も可能。
- カスタマイズ性:
- テーマ切り替え: ライト・ダーク・システム準拠の3パターンから外観を選択可能。
- カスタムCSS: 全カラムに適用されるCSSを記述し、フォントや配色の微調整が可能。
- 表示オプション: 左側メニューの非表示、リストヘッダーの簡略化、右サイドバー(トレンド等)の非表示など、画面を広く使う設定が充実。
- RT非表示: カラムごとにリポスト(RT)や「〇〇さんがいいねしました」等の表示を隠すことができます。
- 休止モード(💤)& API制限の自動制御: カラム上部の💤ボタンで、重いページを一時的に軽量な待機画面へ置き換えてメモリを解放できます。さらに X のAPI制限(HTTP 429)対策として、各カラムのAPI残数を監視し、残数が少なくなると自動更新を一時停止して取得済みのタイムライン表示を保持し、制限が解除される時刻になると自動で更新を再開します。残数の状態はカラム上部のアイコン(残僅少=⚠/停止中=🚫)で確認できます。(この自動制御は設定でOFFにできます)
- オフタイマー (自動終了): アプリがバックグラウンド(非アクティブ)の状態が指定時間続くと、自動でアプリを終了させることができます。
- カラム設定の集約: カラムごとの設定(RT非表示、自動更新など)を歯車メニュー内に格納し、カラム幅を狭くしてもレイアウトが崩れない省スペース設計を採用しています。
- キーボードショートカット: 矢印キーでのカラム移動、Ctrl + 数字キーでのジャンプ、PageUp/Downでのスクロール操作に対応。
- アクティブ時タイマー停止: アプリを操作している間は自動更新タイマーを止め、TLが勝手に流れるのを防ぎます。
- アプリ内音量一括管理: カラム内の動画や音声のボリュームを、ツールバーのスライダーで一括調整できます。
- ウィンドウ・スナップ: ウィンドウを移動する際、他のXColumnウィンドウや画面端にピタッと吸着します。
- サーバー状態監視: Xのサーバーダウンや制限を検知し、ステータスアイコンで通知します。
- 外部リンクの開き方を選択: ツイート内の外部サイトへのリンクを、既定のブラウザ/PiPウィンドウ/アプリ内のフォーカスモードのいずれで開くか選べます。
- 自動更新タイミングの分散: 複数カラムの自動更新が同時に集中してX のAPI制限(429)に陥らないよう、更新間隔を少しずつ分散させます(設定でON/OFF可)。
- サイトを追加(試験的): X/Twitter以外の任意のWebページをカラムとして登録できます(設定の「試験的」タブでON)。
- アプリ内自己更新: GitHub Releases から最新版を取得し、ダウンロード→検証→再起動までアプリ内で実行できます(「ヘルプ」→「アップデート確認」で手動確認も可能)。
- API残数の表示(任意): カラムヘッダーの自動更新アイコンの左に、現在のAPI残数を表示できます(設定→表示でON/OFF)。
- 429到達推定: 「ツール」→「429到達推定」で、現在のカラム構成から無操作時にAPI制限(429)へ達するまでの目安を推定します(一般アカウント基準の概算)。
- Windows 10 / 11
- .NET 8.0 デスクトップ ランタイム
- Microsoft Edge WebView2 ランタイム
- (通常、最新のWindowsにはプリインストールされています)
XColumn.exeを実行します。- プロファイル: 必要に応じて「新規」ボタンでプロファイルを作成します(デフォルトでも使用可能です)。
- カラム追加: メニューバーの 「ファイル」→「新規カラムを追加」 から必要なカラムを追加します。
- 並べ替え: カラム上部のハンドル(URLが表示されているバー)をドラッグ&ドロップして、カラムの順序を入れ替えます。
- 設定メニュー: 各カラムの歯車ボタン(⚙️)から、カラムごとの幅調整、自動更新間隔、ズーム倍率、RT/Rep非表示の設定を行えます。
- 言語設定: メニューの 「ツール」→「設定」 から言語(Language)を変更できます(再起動後に適用されます)。
ショートカットの「リンク先」の末尾に引数を追加したり、ターミナルから実行することで、動作を変更できます。
--profile "プロファイル名": 指定したプロファイルで起動します。- 例:
XColumn.exe --profile "趣味用"
- 例:
--enable-devtools: WebView2の開発者ツール (F12キー) を有効にします。--disable-gpu: GPUハードウェアアクセラレーションを無効にします(描画トラブル回避用)。
カラム内の表示(白・ダーク・漆黒など)は、X (Twitter) 公式の設定から変更することでアプリに反映されます。
- ホーム画面などの左メニューから 「設定とプライバシー」 を選択します。
- 「アクセシビリティ、表示、言語」 → 「表示」 を選択します。
- 「背景」 セクションからお好みのテーマを選択してください。
Chromeウェブストアの拡張機能をXColumnで使用するには、以下のいずれかの方法で追加します。
方法A:Chromeからインポート(推奨)
- 普段お使いのChromeブラウザで、目的の拡張機能をインストールしておきます。
- XColumnのメニュー 「ツール」→「拡張機能の管理...」 を開きます。
- 「Chromeからインポート...」 をクリックします。
- 検出された拡張機能一覧から使用したいものにチェックを入れ、「インポート」を押します。
- アプリを再起動すると有効になります。
方法B:フォルダから手動追加
- 拡張機能のフォルダ(
manifest.jsonが含まれるフォルダ)を用意します。 - 「ツール」→「拡張機能の管理...」 → 「フォルダから追加...」 で選択します。
- このリポジトリをクローンします。
- Visual Studio 2022 で
XColumn.slnを開きます。 - .NET 8.0 SDK がインストールされていることを確認します。
- NuGet パッケージ マネージャーからパッケージを復元します(WebView2, GongSolutions.WPF.DragDrop等)。
- ビルドして実行します。
- 🐛 バグ修正: 自動更新の間隔を1時間(3600秒)以上に設定した際、カラムヘッダーのカウントダウン表示に時間の桁が反映されず、正しい残り時間が表示されない不具合を修正しました(1時間以上の残り時間は「時:分:秒」形式で表示します)。
- 🚀 機能改善: 設定ウィンドウの変更を、OKを押さなくても項目を変更した時点で即座に反映するようにしました。これに伴い「キャンセル」ボタンを廃止しています(言語や動画自動再生の無効化など、再起動が必要な設定はウィンドウを閉じる際に再起動を確認します)。
- 🚀 機能改善: フォーカスモードの挙動を変更しました。一度フォーカスモードに入ると、プロフィールやハッシュタグ、ユーザーIDなどをクリックして画面が移動しても解除されず、左上の「カラム一覧に戻る」ボタン(またはESCキー)を押すまでフォーカスモードを維持します。意図せずカラム一覧へ戻ってしまう挙動を解消しました。
- 🔧 内部変更: 設定の適用処理を一元化し、設定項目を追加する際の保守性を向上させました(動作・機能に変更はありません)。
- 🐛 バグ修正: 特定の状況で全カラムが延々とリロードを繰り返す「無限リロード」不具合を修正しました。API制限のリセット時刻(x-rate-limit-reset)が過去や直近を指す応答を受け取った際に、復帰→即再制限→再復帰…を高速で繰り返すのが原因でした。復帰待ちに最低クールダウン(60秒)と、連続再発時の指数バックオフ(最大15分)を導入して確実に収束させます。これにより、ポスト詳細からカラム一覧へ戻った直後や、休止からの復帰後に発生していた無限リロードを解消します。
- 🚀 機能改善: 「API制限を無視(自動休止しない)」設定を、429検知だけでなくAPI残数監視による先回り停止にも適用するようにしました(保護を完全に無効化)。設定をONにすると、レート制限で休止・停止中だったカラムも即座に復帰します。API残数の表示は引き続き有効です。
- 🐛 バグ修正: API制限(429)時の休止画面が、設定で非表示にしていても表示されてしまう不具合を修正しました(既定の「非表示」が正しく機能します。保護による自動休止・自動復帰の動作は従来どおりです)。
- 🐛 バグ修正: カラムヘッダーの「戻る」ボタンが効かず、どのカラムでも履歴を戻れない不具合を修正しました。
- 🚀 機能改善: API制限(429)時の休止画面を既定で非表示にしました(設定→動作で表示に切替可)。表示を保ったまま自動で休止・復帰します。
- 🐛 バグ修正: API制限からの自動復帰が行われない場合がある不具合を修正しました。
- 🐛 バグ修正: API残数表示が再起動時・新規カラム追加時に表示されない不具合を修正しました。
- 🐛 バグ修正: 自己更新後に旧実行ファイル(.old)が残っていても次回更新が失敗しないよう改善しました。
- 🎨 UI改善: 設定「動作」のAPI関連項目を「API / レート制限」セクションに整理しました。
- 🎨 UI改善: カラムヘッダーの「メモリ解放(🧹)」ボタンを廃止しました(↻・💤で代替)。
- ✨ 機能追加: アプリ内自己更新機能を追加。GitHub Releases から最新版を取得し、ダウンロード→検証→再起動までをアプリ内で完結できます。更新通知ダイアログに「今すぐ更新」を追加しました。
- ✨ 機能追加: メニュー「ヘルプ」→「アップデート確認」を追加。任意のタイミングで最新版を手動確認できます。
- ✨ 機能追加: メニュー「ツール」→「429到達推定」を追加。現在のカラム構成から、無操作時にAPI制限(HTTP 429)へ達するまでの目安時間を推定します(一般アカウント基準の概算)。
- 🎨 UI改善: カラムヘッダーの自動更新アイコンの左に、現在のAPI残数を表示するオプションを追加(設定→表示でON/OFF。残数が少なくなると橙→赤で警告)。
- 初期リリース (TweetDeskとして)
本アプリケーションは個人が開発した非公式クライアントです。X (Twitter) のAPIを使用せず、Webサイトをブラウザコンポーネントで表示・制御しています。
- 機能の保証について: Xの仕様変更により、予告なく機能しなくなる可能性があります。
- 責任の所在: 本ソフトウェアの使用によって生じたあらゆる損害(アカウントの制限・凍結、データの消失、PCの不具合など)について、開発者は一切の責任を負いません。
- 自己責任: 本アプリケーションのダウンロード、インストール、および使用は、全てユーザー自身の責任において行ってください。
このプロジェクトは MIT ライセンス の下で公開されています。
A simple multi-column client inspired by (old) TweetDeck. It does not use the X (Twitter) API; instead, it uses WebView2 (the Edge rendering engine) to efficiently display multiple timelines.
- Multi-Column Display: Freely add and reorder columns such as Home, Notifications, Search, Lists, and Users.
- Profiles: Switch between environments with completely separated cookies and settings for each account or purpose (e.g., hobby, work).
- Multi-Language Support: Switch the display between Japanese and English.
- Chrome Extensions Support: Load extensions such as ad blockers (uBlock Origin, etc.) and style modifiers (Old Twitter Layout, etc.). You can also import them directly from Chrome on your PC.
- Muted Words: Hide posts containing specified keywords. Add them from the Settings screen, or from the right-click menu when text is selected.
- Focus Mode: Click a tweet or settings to temporarily switch to a single view, so you can concentrate on details or composing long posts.
- Flexible Layout:
- Uniform-width mode: Automatically resize all columns to fit the window width.
- Fixed-width mode: Display many columns with horizontal scrolling. Fine width adjustment is also possible.
- Customizability:
- Theme switching: Choose the appearance from three patterns: Light, Dark, or System.
- Custom CSS: Write CSS applied to all columns to fine-tune fonts and colors.
- Display options: Plenty of settings to use the screen more spaciously, such as hiding the left menu, simplifying list headers, and hiding the right sidebar (Trends, etc.).
- Hide RT: Hide reposts (RT) and "‚óã liked" notices on a per-column basis.
- Suspend mode (💤) & automatic rate-limit control: Use the 💤 button at the top of a column to temporarily replace heavy pages with a lightweight standby screen and free up memory. In addition, to deal with X's API rate limit (HTTP 429), XColumn monitors each column's remaining API quota and pauses auto-refresh when it runs low, keeping the already-loaded timeline visible, then automatically resumes when the limit resets. The status is shown by header icons (low = ⚠ / paused = 🚫). (This automatic control can be turned off in Settings.)
- Off-Timer (Auto Shutdown): Automatically shut down the app after it stays in the background (inactive) for a specified period.
- Consolidated column settings: Per-column settings (Hide RT, auto-refresh, etc.) are stored inside the gear menu — a space-saving design that keeps the layout from breaking even when a column is made narrow.
- Keyboard shortcuts: Move between columns with the arrow keys, jump with Ctrl + number keys, and scroll with PageUp/PageDown.
- Pause timer while active: While you are operating the app, the auto-refresh timer is paused to prevent the timeline from scrolling on its own.
- In-app volume control: Adjust the volume of videos and audio across all columns at once with the slider in the toolbar.
- Window Snap: When moving a window, it snaps neatly to other XColumn windows or to the screen edges.
- Server status monitoring: Detects X server outages or restrictions and notifies you with a status icon.
- Choose how external links open: Choose whether links to external sites in tweets open in your default browser, a PiP window, or in-app Focus Mode.
- Staggered auto-refresh: Spreads out refresh timing so multiple columns don't refresh at the same moment and hit X's API limit (429). Toggleable in Settings.
- Add site (Experimental): Register any web page (not just X/Twitter) as a column (enable it in the "Experimental" tab in Settings).
- In-App Self-Update: Fetch the latest release from GitHub Releases and perform download, verification, and restart within the app (manual check via "Help" -> "Check for Updates").
- Show API Remaining (optional): Show the current API remaining quota to the left of the auto-refresh icon in the column header (toggle in Settings -> Display).
- Rate Limit (429) Estimate: From "Tools" -> "Rate Limit (429) Estimate", estimate how long until you'd hit the API limit (429) with no interaction, based on your current columns (a rough estimate assuming a non-Premium account).
- Windows 10 / 11
- .NET 8.0 Desktop Runtime
- Microsoft Edge WebView2 Runtime
- (Typically pre-installed on the latest versions of Windows)
- Run
XColumn.exe. - Profiles: Create a new profile with the "New" button if needed (the Default profile is also available).
- Add Columns: Add the columns you need via "File" → "Add New Column" in the menu bar.
- Reorder: Drag and drop the handle at the top of a column (the bar displaying the URL) to change the column order.
- Settings Menu: Use the gear button (⚙️) on each column to adjust per-column width, auto-refresh interval, zoom factor, and Hide RT/Rep.
- Language: Change the language from "Tools" → "Settings" (applied after restart).
You can change the behavior by adding arguments to the end of the shortcut's "Target" field, or by running from a terminal.
--profile "Profile Name": Launch with the specified profile.- Example:
XColumn.exe --profile "Hobby"
- Example:
--enable-devtools: Enable WebView2 Developer Tools (F12).--disable-gpu: Disable GPU hardware acceleration (to avoid rendering issues).
The in-column display (Light, Dark, Lights out, etc.) follows the official X (Twitter) settings and is reflected in the app.
- From the left menu on Home, etc., select "Settings and privacy".
- Select "Accessibility, display, and languages" → "Display".
- Choose your preferred theme under the "Background" section.
To use Chrome Web Store extensions in XColumn, add them using one of the following methods.
Method A: Import from Chrome (Recommended)
- Install the desired extension in your regular Chrome browser.
- Open "Tools" → "Manage Extensions..." in XColumn.
- Click "Import from Chrome...".
- Check the extensions you want to use from the detected list and click "Import".
- Restart the app to apply.
Method B: Manual Addition from Folder
- Prepare the extension folder (the folder containing
manifest.json). - Select "Tools" → "Manage Extensions..." → "Add from Folder...".
- Clone this repository.
- Open
XColumn.slnin Visual Studio 2022. - Make sure the .NET 8.0 SDK is installed.
- Restore packages from the NuGet Package Manager (WebView2, GongSolutions.WPF.DragDrop, etc.).
- Build and run.
- 🚀 Improved: Settings now apply the moment you change an item, without pressing OK. Accordingly, the "Cancel" button has been removed (settings that require a restart, such as language and force-disabling video autoplay, are confirmed when you close the window).
- 🚀 Improved: Changed Focus Mode behavior. Once you enter Focus Mode, it no longer exits when you click a profile, hashtag, or user ID and the page navigates; it stays in Focus Mode until you press the "Back to Columns" button at the top-left (or the ESC key). This resolves the unintended return to the column list.
- 🔧 Internal: Unified the settings-apply logic to improve maintainability when adding new settings (no change to behavior or features).
- 🐛 Bug fix: Fixed an "infinite reload" issue where, under certain conditions, all columns would keep reloading endlessly. It was caused by responses whose rate-limit reset time (x-rate-limit-reset) pointed to the past or the immediate future, making a column resume and immediately get limited again in a tight loop. Resuming now enforces a minimum cooldown (60s) and an exponential backoff (up to 15 minutes) on repeated re-trips, so it reliably settles. This resolves the infinite reload seen right after returning from a post detail to the column list, or after resuming from suspend.
- 🚀 Improved: The "Ignore API rate limit (don't auto-suspend)" setting now also applies to the proactive pause based on remaining-quota monitoring, not just 429 detection (protection is fully disabled). Turning it on immediately resumes any columns that were suspended/paused by a rate limit. The remaining-quota display stays available.
- 🐛 Bug fix: Fixed an issue where the rate-limit (429) pause screen could appear even when it was set to be hidden. The default "hidden" setting now works correctly (automatic pause/resume protection is unchanged).
- 🐛 Bug fix: Fixed an issue where the "Back" button in the column header did nothing, so no column could navigate back in history.
- 🚀 Improved: The rate-limit (429) pause screen is now hidden by default (switchable in Settings -> Behavior). Columns pause/resume automatically while keeping the timeline visible.
- 🐛 Bug fix: Fixed an issue where a column could fail to auto-resume after a rate limit.
- 🐛 Bug fix: Fixed an issue where the API remaining count did not appear after restart or when adding a new column.
- 🐛 Bug fix: Made self-update more robust when a leftover old executable (.old) remains, so the next update no longer fails.
- 🎨 UI: Grouped API-related options in Settings -> Behavior under a new "API / Rate Limit" section.
- 🎨 UI: Removed the "Clear memory (🧹)" button from the column header (use ↻ or 💤 instead).
- ✨ New feature: Added an in-app self-update feature. It fetches the latest release from GitHub Releases and handles download, verification, and restart within the app. An "Update now" choice was added to the update notification dialog.
- ✨ New feature: Added "Help" -> "Check for Updates" to manually check for a newer version anytime.
- ✨ New feature: Added "Tools" -> "Rate Limit (429) Estimate", which estimates how long until you'd hit the API limit (HTTP 429) with no interaction, based on your current columns (a rough estimate assuming a non-Premium account).
- 🎨 UI: Added an option to show the current API remaining quota to the left of the auto-refresh icon in the column header (toggle in Settings -> Display; turns orange then red as it runs low).
- Initial release (as TweetDesk).
This application is an unofficial client developed by an individual. It does not use the X (Twitter) API but displays and controls the website using browser components.
- No Warranty: Features may stop working without notice due to changes in X's specifications.
- Liability: The developer assumes no responsibility for any damages (account restrictions/freezing, data loss, PC malfunctions, etc.) arising from the use of this software.
- Use at Your Own Risk: Download, installation, and use of this application are entirely at the user's own risk.
This project is released under the MIT License.
