waybetter-for-x/CHANGELOG.md
CRT 83f8c363b4 wayBetter for X 1.1.0
Chat+ link previews; theme engine v3 (inks solved on their real grounds, measured rail labels,
on-screen popovers); macOS: iframes no longer take over a tab's address; new-tab links work again;
Make shows full commands. The framework moves to af631fd.
2026-10-15 06:23:25 +08:00

226 lines
22 KiB
Markdown

# Changelog
## 1.1.0
### New
- **Link previews in chats (Chat+).** X's web chat shows a link as a bare card with only the site's name. wayBetter shows the page's title, text and picture under the message, an image link's image, and for YouTube, Vimeo and SoundCloud the video or track, playable right in the chat (Spotify and other sites get a card that opens the link). Only the link is sent to its site (no cookies, never the message or who sent it), and nothing is saved. On by default; Chat+ → Link previews turns it off.
### Better
- **Themes keep every word readable on every surface.** Text and icons on buttons, cards, menus and the rail are solved against the colour they actually sit on (both ends of a gradient included), so outline buttons and labels no longer fade in light themes such as Solarized Light.
- **The rail shows labels only when they fit.** Whether X's left rail shows words or icons is measured from the real labels in the theme's font, not guessed from the window width.
- **Menus and hover cards stay on screen** under every theme, also next to a taskbar or a top bar.
- **Store badges follow the theme**, and X's newer rail items (History, Creator Studio, Articles) get icons in every icon pack.
- **Make shows every scaffold command in full** instead of cutting it off.
### Fixed
- **macOS: a video or player inside a page no longer takes over the tab.** The address bar keeps the page's address, and the tab no longer shows as loading forever.
- **Links that open in a new tab work again** in site tabs (they were cancelled and never opened).
- **A restored layout is no longer overwritten** before it has loaded.
## 1.0.2
### New
- **Open with wayBetter.** Double-click a `.plugin.js`, `.strings.json`, `.icons.json` or theme `.json` (or use Open with) and it opens on the same install screen as a dropped file. Nothing installs without that screen, and wayBetter never becomes the default program for `.js` or `.json` files.
- **Icon packs in the Store**: Line, Classic, Aero and Pixel, plus two new retro packs drawn for wayBetter, Windows 98 and Windows XP, covering X's left rail, the action bar and the composer. The area plugins appear in the in-app Store as Built in, with their switch.
- **String packs can translate whole sentences with links and names in them** ("Replying to @…", "Followed by …"), using X's own links. Packs can apply to one language only.
- **"Tweet" wording is a built-in string pack.** It applies only while X is in English, and turning it off brings "Post" back.
- **Theme doctor report** in the Theme Builder: every finding with where it is, what is wrong and how to fix it, in your language.
### Better
- **Themes are one design everywhere.** Windows 98 is a real Windows 98: bevelled window, title bar, tabs and settings, a taskbar at the bottom, the compose box as a window. Every theme now draws its menus, hover cards, compose dialog, sidebar cards and chat in its own shape and corners, and the app's window follows the theme's corners and accent.
- **macOS has a real menu bar**: wayBetter, File, Edit, View (theme, icon pack, mode, zoom), Account, Plugins, Window (workspaces) and Help, in your language. The media panel moves to ⌘⇧M on macOS.
- **Windows 98 is a real taskbar at every width**: buttons share the bar and shrink to icons on narrow windows; X's Grok and chat buttons sit above it. Menus and the account switcher read cleanly in every theme.
- **A pane with its own theme keeps it**, also while the Theme Builder previews another theme.
- Composer icons keep the theme's colour (X's brightening filter turned Classic's blue cyan).
### Fixed
- **macOS: find in page highlights every match** and the current one.
- **macOS: closing the window keeps the app running** (it goes to the Dock; a Dock click brings it back, Cmd+Q quits).
- **macOS: a deck column no longer comes back empty** after the window was narrow and grew again.
- Older apps (1.0.0, 1.0.1) keep a working Store: the new item kinds live in a second signed catalog only 1.0.2 and later read.
## 1.0.1
### Fixed
- **Themes no longer slow X down.** A few theme rules made the browser restyle most of the page every time X added something (about 440 elements per change; now about 2). Scrolling with any theme on is smooth again. A test now fails any theme that does this.
- **Windows 98 and Classic bars show every item.** X made each menu item as wide as the whole menu, so a bottom or top bar showed only Home.
- **The app menu opens from each pane's wB button** at the top right (Alt+F, F10 and the account menu still open it). The titlebar logo is a plain logo again.
- **A restored window always fits its monitor**, including when a second monitor is smaller or gone.
- **macOS: Cmd+F always opens find** for the page in front, even when the app's own tab was active.
- The "help translate" link points at the public repository.
## 1.0.0
The first public release. wayBetter for X is the first app on the open
[wayBetter](https://git.crt.fyi/CRT/waybetter) framework (`npm i waybetter`). Windows is the platform
offered for download; the macOS and Linux packaging in the release tooling is not offered yet.
### New: area plugins, modes and Chat+
- **Eight area plugins instead of a wall of toggles**: Compose+, Reader+, Profile+, Chat+, Media+, Search+, Notifications+ and Navigation+. Each is one card in Plugins with a switch for the whole area and a toggle for every feature. The 46 tweaks and 13 of the 14 small plugins are features of their area now, with the same names, settings and data, so an update changes nothing you had set up. The reliability fixes are their own "Fixes" list that no plugin switch turns off. See docs/AREA-PLUGINS.md.
- **New in the areas**: a "Posting as @handle" chip, a length meter and snippets (Compose+); a read marker, a language filter and quick mute (Reader+); private labels, account age and more on X's hover card (Profile+); video speed, picture-in-picture, an alt text viewer and blur-until-hover (Media+); saved searches, an advanced search form and Latest by default (Search+); filters by kind, keyword highlight and Open on Mentions (Notifications+).
- **Chat+**: star a message and find it again (open at the message, start X's own reply), find in conversation (Ctrl+Shift+F), pinned chats with your own labels, a person filter for group chats, keyword highlight and mute. Starred messages stay on this computer. Nothing is read, stored or sent on its own, and Chat+ never types or sends a message.
- **Modes**: Basic (only the fixes; X as X ships it), Advanced (recommended: every area with its calm features) and Power User (Advanced plus keyboard shortcuts on posts, snippets, private labels and more). A starting point on the first run and in Settings, never a lock; once your features differ from the preset the menu reads "Custom (based on Advanced)" and offers to re-apply it. A setup from an earlier build keeps exactly what it had until you pick a mode.
- **A feature that X breaks pauses itself**: every feature names the parts of X it depends on. When X changes one, that feature pauses with a note on its card and the rest keeps working.
- **Languages in two tiers**: 17 supported languages (English with British English, Japanese, Spanish, Arabic, Indonesian, German, Portuguese, Turkish, French, Thai, Korean, Dutch, Vietnamese, Traditional Chinese, Italian, Hindi and Russian) and 33 community translations, used only when you pick them.
### New: the app menu, zoom, find, updates, safe mode
- **The app menu** ("Settings and more": Alt+F or F10, or click the wayBetter logo in the titlebar): new tab and splits, language (and a Languages row that opens the Languages section), theme, mode, zoom, Plugins, Store, Workspaces and Drafts, check for updates and report a problem.
- **Page zoom** per tab (Ctrl+=, Ctrl+-, Ctrl+0 or the menu's zoom row): 25% to 500%, the engine's own zoom, remembered per tab.
- **Find in page** (Ctrl+F, the menu or Ctrl+K): a find bar per pane with the match count, in deck columns too. Only what the page has rendered is searched, and what you type is kept nowhere.
- **Check for updates** on demand from the menu: the same check the timer runs, once, and it says calmly what came of it.
- **Safe mode**: start with `--safe-mode` or hold Shift at launch (Windows), or switch it from the menu. X runs with none of wayBetter's layers (no page runtime, plugins, themes, custom CSS or fixes) for that run only; nothing is saved.
- **Report a problem**: a summary with no personal data (app and WebView versions, which features paused), shown exactly as it would be shared, with Copy and the repository's new-issue page. The app sends nothing.
### New: themes v2, icon packs and string packs
- **Theme engine v2** (framework): a theme document can carry component tokens, layout variants, decoration and an icon pack, on top of the colour model.
- **Icon packs**: Appearance → Icons follows the theme, keeps X's own icons, or picks one of four packs (Line, Classic, Aero, Pixel 98). You can import an icon pack too; it applies to X tabs and to the app's own chrome.
- **Share my setup**: Settings → Backup & sync can Copy link or Save file for your theme, icon pack, mode and features (nothing personal). "Use a setup" takes a pasted link or a file, shows what will change, and applies only after you confirm; a `waybetter://setup` link opened from outside shows the same preview.
- **String packs**: data that replaces X's own interface strings (a language X does not offer, a fixed translation, a rewording). Drop a `.strings.json` on the window, open a link or pick one in the Store under Languages; the install screen shows its language, its coverage of X's strings and a sample. Languages turns packs on or off and orders them. Only known string keys can change, and a pack is data, never code. The Store lists one so far (Esperanto). See docs/STRING-PACKS.md in the framework repository.
- **Builds carry no trace of the machine that made them**: `waybetter build-env` removes the build paths from the binary.
### New: the Store, workspaces, backup and the deck
- **Store, install links and drag-and-drop**: install themes and plugins from the new Store section
(signed catalog; the app checks the signature and every file's SHA-256), from
`waybetter://install` links on waybetter.fyi/themes and /plugins, or by dropping a `.json` /
`.plugin.js` file on the window. Every install shows a screen first: name, author, version, where
it came from, SHA-256, permissions and the code; nothing installs until you confirm. Update and
remove from the Store or the Plugins list.
- **The Store is part of the wayBetter framework**: the install screen, the Store section, install
links and the signed catalog come from the framework, so every wayBetter app gets them. One signed
catalog serves every app and each shows only its own items (catalog format 2, `apps` per item);
`waybetter store build|sign|verify` builds and signs it. The Store's words are translated as before.
- **Plugin permissions**: plugins declare what they use (`@permissions storage, ui, network:none`);
the plugin API throws on anything undeclared, and the install screen, Store and Plugins list show
it. Older plugins without the line keep working and are labelled "legacy, full page access".
Permissions are a declaration and a guard rail, not a sandbox (see docs/PLUGINS.md).
- **Workspaces**: save the current tabs, splits and decks (with each tab's page, account and pane
theme) under a name and switch back in one click from the titlebar or Ctrl+K. Pick one to open on
start. Switching opens fresh tabs; the tabs you left come back with Ctrl+Shift+T.
- **Backup & sync** (Settings → Backup & sync): export everything you set up (themes incl. account
and pane themes, plugins you enabled and your own plugin files, custom CSS, X tweaks, links,
keyword alerts, decks, workspaces, your account list) into one `.waybetter` file, with drafts only
if you tick "Include drafts". Importing shows what each section would change and applies only the
ones you tick; no account is ever removed. Optional sync through a folder you already sync
(OneDrive, iCloud Drive, Dropbox, a share): encrypted snapshots (Argon2id + XChaCha20-Poly1305,
your passphrase), newer settings from another computer offered for review. No wayBetter server
or account; cookies, X logins, tokens and keys are never included.
- **Plugin commands in Ctrl+K**: plugins can add their actions to the command palette
(`api.commands.register`), listed under the plugin's name and run in the tab you are using. Focus
Mode, Thread Reader and Hide Blue Checks have some.
- **Developer mode** (Settings → Developer, off by default): saving a plugin, `custom.css` or a theme
file reloads it in every X tab at once; syntax and start errors show with file and line.
- **Deck**: a TweetDeck-style deck (Ctrl+Shift+D). Columns of X side by side (Home,
Following, Notifications, Mentions, Search, List, Profile, Bookmarks), each in the account you
pick; unread counts per column and on the deck tab, per-column filters (keywords, `/regex/`,
replies, reposts, media only), pages of whole columns with off-page columns parked in low memory,
a compose dock with X's own composer, and deck keys (`[` `]`, Alt+1–9, Alt+PageUp/PageDown,
Alt+R, Alt+U, Ctrl+Alt+N). Every column is the real x.com; wayBetter never posts, likes or
requests anything for you. Settings → Deck has widths, density, default column flags and
the memory guard. See docs/POWER-USER.md.
- **Make** in the wayBetter panel: build a plugin or a theme from inside the app. Four example
plugins (the smallest one, a scope with post shortcuts, a settings dialog with storage, a
theme-aware badge) in an editor that shows what the Plugins list will read from the header and
warns about a missing header, export or `stop()`; copy or download the file, open the plugins
folder. A gallery opens the real plugin UI kit (toasts, alert, confirm, prompt, dialog) in your
current theme, a live theme API view lists every `--wb-*` variable and the fonts, and PLUGINS.md,
THEMES.md and PLUGIN-IDEAS.md are readable offline. Install a plugin by dropping its file on the
window or copying it into the plugins folder.
- **`npm create waybetter`** (framework): scaffolds a plugin (JavaScript or TypeScript), a theme
file with the schema, or a whole wayBetter app for another site (YouTube, Kick, Twitch, …).
- **More of wayBetter is framework** (`waybetter-host`): backup and sync, workspaces, Google Fonts,
developer mode, keyword alerts and notifications, the gallery and clipboard history, updates and
the hotfix channel, plugin palette commands and the tab bridge now come from the framework, and so
do the native commands for the Store, media, Google Fonts, updates, workspaces, sync, developer
mode and the settings backup (optional command groups an app turns on), so every wayBetter app
gets them. Nothing changes in how wayBetter for X works.
- **The app itself is framework too**: the window, the shell, the tab webviews (accounts, link
routing, pop-ups, downloads, native resize follow), the tab and window commands, account
profiles and the language setting now come from `waybetter-host` (`app::run_app`); wayBetter for
X is its configuration plus the X features. Its security tests use the framework's checks
(`testkit`), `scripts/release.mjs`/`release-macos.mjs` run `waybetter release` with
`waybetter.release.json`, and the X runtime is bundled by `waybetter/build`. New apps from
`npm create waybetter app` get the same. Nothing changes in how wayBetter for X works.
- **The shell is framework too**: tabs in the titlebar, splits and link drags, the address bar, the
new-tab page, Ctrl+K, the account switcher, decks, workspaces, the developer-mode and sync chips,
the gallery/clipboard panel, pane themes and the first-frame colors come from the wayBetter shell
frame (`createShell` in `waybetter/shell/frame`); wayBetter for X describes X to it (its pages,
address chips, search operators, palette items, column kinds, the compose dock, the drafts picker,
the Twitter/X wording). Its words are the framework's, in all 51 languages. `npm create waybetter
app` now gives a new app this same shell. The browser-only workspace preview and the old
declarative plugin SDK it used are gone (the desktop app never loaded them).
### New: accounts, plugins, themes and view
- **Accounts are real logins.** Each account signs in through X in its own profile, stays signed in,
and shows as its @handle and picture in the titlebar switcher.
- **One-click accounts**: clicking an account opens its home feed in a pane beside the current one
(or jumps to its pane if one is already open); Shift-click opens a tab. Everything else (new tab,
use for new tabs, sign out, remove) is in each account's "…" menu.
- **Emoji Picker** (bundled plugin): a searchable emoji picker (Ctrl+Shift+E or the composer toolbar
button) with recent and frequent emoji and skin tones; `:fire:` shortcodes in text boxes where X has
no emoji suggestions of its own.
- **Hide Blue Checks** (now a Reader+ feature): collapses posts from paid-blue accounts into a one-line stub
you can click to show; keeps people you follow, never hides you, optional quotes and gold/grey
organizations, allowlist handles (Alt+Shift+H).
- **Split view with one navigation**: two X panes of the same account share one left rail; the other
pane parks its rail and slides it in from the edge.
- **Links open where you want**: posts and profiles from the timeline can open beside, in a new tab or
in your browser; links to other sites have their own setting.
- **Theme CSS**: every theme has its own CSS editor in Appearance → Customize; it is exported and
saved with the theme (Custom CSS still applies on top of every theme).
- **The wayBetter panel** opens on a home page with what's new and what wayBetter is.
- Plugin API is `window.wayBetter.api` (the old `window.BetterTwttr` keeps working), with new
`account()` and `users.get(handle)` helpers.
- **Plugin UI kit** (`wayBetter.api.ui`): toasts, alerts, confirmations, prompts and dialogs that
look like X's own and follow the current theme (colors, corners, font), live. Keyboard and screen
reader friendly (focus stays inside, Esc/Enter, focus returns), stackable, respects reduced
motion, and a plugin's dialogs close when it stops. `api.toast` now uses it.
- **Theme API for plugins** (`wayBetter.api.theme`): the active theme's colors, corners, font and
light/dark, with change events, and the same values as `--wb-*` CSS variables.
- **Theme JSON Schema** (`waybetter/theme.schema.json`): editors can complete and check theme
files; exported themes point to it.
- **Focus Mode** (now a Navigation+ feature): hides like/repost/view counts, trends and "Who to follow" (or
the whole right column) while you read; Alt+Shift+F.
- **Reply Guard** (now a Compose+ feature): asks before you reply to an old post (30 days by default) or,
if you want, to someone you don't follow; "Reply anyway" opens X's own reply box.
- Hide Blue Checks, Muted Regex, User Notes and Thread Reader use the new dialogs. User Notes are
written in a dialog (from the profile's ··· menu or by clicking the note under the bio).
### Changed
- **The deck is called "Deck"** (it was "Power User Mode"), so it no longer shares a name with the Power User mode.
- **A "Better Twttr" 1.0.x test install is upgraded in place**: the 1.0.0 setup treats it as older, keeps its data and replaces it.
- **Chat+'s find in conversation is Ctrl+Shift+F**; Ctrl+F is the app's own find bar.
- **My Space** (profile customization) is not in this release.
- **Running the Windows setup again opens the app instead of reinstalling it.** If the same or a
newer version is already installed, the setup installs nothing, closes nothing and opens the
installed app (the running window comes up). So a setup file left in Downloads can no longer
replace or downgrade an app that has updated itself since. A newer setup still upgrades in place
and keeps your settings, drafts and logins. To repair an install, run the setup with `/FORCE`.
The installer template now belongs to the wayBetter framework, so every wayBetter app gets this.
### Fixed
- The install screen says where a theme or plugin comes from ("A file you dropped", "Link: …",
"wayBetter Store …") in your language instead of always in English.
- The wayBetter button no longer sits over X's photo/video viewer or X's dialogs, and stays above
X's bottom bar. Thread Reader's "Read thread" button moved into the post page header, so it no
longer covers posts or the reply box in narrow panes.
- **Like/repost/bookmark counts**: X's live count updates no longer leave the count one too high after
a quick like and unlike; spam-clicking ends where your last click did.
- **Follow button stuck on "Follow back" until F5**, and likes, reposts and bookmarks reverting: a page
load X started before your click no longer puts the old state back.
- A like/follow that X rejects (e.g. rate limited) is never reported to X as a success for the clicks
queued behind it; the screen ends on the server's real state.
- **A liked heart could turn invisible** on some themes (white on white).
- Themes: one color foundation for all 14 themes; X's sign-in and sign-up pages are readable on every
theme; XChat bubbles readable.
- Tabs could not be closed (the titlebar painted over the tab strip).
- The window could come back lost, tiny or off-screen.
- Tab icons: the wayBetter bird shows in the tab strip, and a tab never keeps the previous site's icon.
- Videos in the timeline were hidden by the promoted-posts filter.
- The window bar's account switcher and minimize button were not clickable.
### Faster
- Background tabs drop to WebView2's low-memory mode (about 270–350 MB less RAM with two hidden tabs
in our measurements) and return to normal when shown.