wayBetter

(FOSS) 이제 모든 게 앱이에요.

쓰던 앱 그대로, 훨씬 더 좋게.

wayBetter는 이미 쓰고 있는 앱을 가벼운 네이티브 창에 담고, 그 자리에서 확장해요. BetterDiscord가 Discord를 확장하는 것과 같은 방식이에요. 탭, 분할 창, 나란히 놓인 모든 계정, 테마, 플러그인, 그리고 앱 자체의 버그 수정까지. 테마든 플러그인이든 누구나 만들 수 있어요. 다음 앱도 누구나 만들 수 있어요.

wayBetter for X 받기

Windows용 wayBetter for X 다운로드 · 무료 · GPL-3.0-or-later · 읽거나 게시한 내용에 대한 원격 수집 없음

  • wayBetter for X의 테마 14개
  • 기본 포함 플러그인 14개
  • X 자체 버그 수정 9개
  • 다운로드 크기 7.9 MB
  • 0.23 s 만에 실행
  • waybetter의 의존성 0개
  • 영원히 $0

01 문제

모든 앱은 필요한 것의 절반만 줘요.

나머지는 가질 수 없어요. 계정을 몇 개 쓸지, 어떻게 보일지, 버그를 언제 고칠지 앱이 정하니까요. wayBetter는 앱을 그대로 두고 나머지 절반을 더해요.

  1. A

    창 하나에 계정 하나. 로그아웃하고, 로그인하고, 또 반복.

    모든 계정을 나란히, 전부 동시에 로그인한 채로.

  2. B

    앱에 버그가 있나요? 고쳐 줄 때까지 기다려야죠.

    내 컴퓨터에서, 그 자리에서, 오늘 고쳐져요.

  3. C

    그들이 고른 모습. 그들이 내놓은 기능.

    누구나 만들 수 있는 테마와 플러그인.

  4. D

    데스크톱 클라이언트마다 통째로 들어 있는 브라우저.

    시스템 WebView 위의 가벼운 네이티브 창 하나.

처음부터 가볍게

이제 모든 게 앱이에요. 그것도 가벼운 앱.

앱마다 브라우저를 하나씩 더 넣는 대신, 시스템에 이미 있는 WebView 위에 띄운 네이티브 창이에요.

7.9 MBWindows 설치 파일 전체 크기
0.23 s실행부터 창이 화면에 뜰 때까지
17 ms테마, 수정, 플러그인이 페이지에 로드되는 시간
0페이지에 추가되는 긴 작업

Windows 11에서 wayBetter for X 1.0으로 측정: 설치 파일 크기는 게시된 다운로드 기준, 실행 시간은 3회 실행의 중앙값, 런타임 평가 시간과 긴 작업(>50 ms)은 wayBetter가 있을 때와 없을 때를 각각 측정했어요.

02 하나의 시스템

진짜 앱을 감싸는 세 개의 레이어.

모든 wayBetter 앱은 같은 시스템이에요. 네이티브 셸, 페이지 안의 런타임, 그리고 그 앱을 아는 작은 어댑터 하나. 앱은 하던 일을 그대로 해요. 프록시를 거치거나 다른 곳에 다시 호스팅되는 것은 없고, 변경은 내 컴퓨터에서만 일어나요.

01 · 셸

가벼운 네이티브 창.

Tauri 2, 시스템 WebView 위에서 동작. 모든 앱에 있었으면 했던 창 기능이에요:

  • 탭, 고정 탭, 분할 창: 탭이나 링크를 가장자리로 끌어다 놓기
  • 계정마다 전용 프로필, 나란히 로그인
  • 링크 여는 위치: 같은 탭, 옆, 새 탭 또는 브라우저
  • 주소창과 명령 팔레트 Ctrl K
  • 조용히 설치되는 서명된 업데이트

02 · 런타임

테마와 플러그인을, 페이지 안에.

앱의 페이지에 주입되고, 모든 wayBetter 앱이 함께 써요:

  • 하나의 색 기반 위에 만든 테마(앱 팔레트의 OKLab 모델)
  • 작은 헬퍼 API를 갖춘 BetterDiscord 스타일 JavaScript 플러그인
  • DOM 허브 하나와 요청 허브 하나로, 기능이 늘어도 가볍게
  • 테마 다음에 적용되는 나만의 CSS

03 · 어댑터

앱마다 작은 조각 하나.

앱을 아는 유일한 부분이에요: 호스트, 레이아웃, 계정 버튼, 그리고 앱이 이미 불러오는 데이터.

  • 네이티브 SiteSpec과 페이지 SiteAdapter
  • 앱의 탭이 호출할 수 있는 것을 정한, 짧고 검토된 목록
  • 나머지는 모두 시스템이 제공해요

03 첫 번째 앱

wayBetter for X.

진짜 x.com을 탭과 분할 창으로. 모든 계정을 나란히, 14개 테마, 8개 영역 플러그인, 그리고 X가 가진 버그 수정: 서로 엇갈리는 좋아요와 팔로우, 사라지는 초안, 튀는 타임라인. 지금 Windows, macOS, Linux에서 사용할 수 있습니다.

14기본 테마, 그리고 내 테마
14기본 포함 플러그인, 켜기 전까지는 꺼져 있어요
9X 자체 버그 수정
36X를 숨기고, 보이고, 바꾸는 조정
  • 01
    모든 계정을, 나란히

    진짜 x.com 위의 탭과 분할 창. 각 계정은 전용 프로필에서 동시에 로그인돼 있어요.

  • 02
    X의 버그, 수정 완료

    제대로 반영되는 마음에 들어요와 팔로우, 뒤로 가도 유지되는 위치, 튀지 않는 타임라인, 다시 시도되는 업로드.

  • 03
    임시 보관함

    모든 임시 보관글을 수정 기록과 함께 로컬에 보관하고, X가 잃어버리면 되돌려 놓아요.

  • 04
    14개 테마, 8개 영역 플러그인

    색만이 아닌 완전한 재디자인. Reader+, Chat+, Media+ 외 5개 영역 플러그인, 기능마다 스위치 하나.

  • 05
    무엇이든 Ctrl+K

    탭, 계정, 설정, 그리고 연산자 칩을 갖춘 X 검색을 위한 명령 팔레트.

  • 06
    덱

    TweetDeck 스타일의 덱: X의 열을 나란히 놓고, 열마다 원하는 계정으로, 필터와 읽지 않은 개수까지.

wayBetter for X

무료 · 오픈 소스 · 조용히 업데이트

Windows용 다운로드 모두 보기

Windows · macOS · Linux

04 내 것으로 만들기

테마와 플러그인은 누구나 만들 수 있어요.

테마는 JSON 파일 하나예요. 플러그인은 JavaScript 파일 하나고요. 쓰는 데 심사 대기도, 계정도 필요 없어요. 작성하고, 폴더에 넣고, 파일을 공유하거나 스토어에 게시하면 돼요. CSS를 쓸 줄 알면 앱의 모습을 바꿀 수 있어요. JavaScript를 조금 쓸 줄 알면, 끝내 나오지 않던 기능을 직접 더할 수 있어요.

테마

색, 글꼴, 모양, 레이아웃, 배경, 효과.

화면 스타일 패널에서 JSON을 가져오고 내보내요. 대비는 자동으로 검사돼서, 어떤 표면 위에서도 글자가 잘 읽혀요.

홈게시하기
추천팔로잉
wayBetter@CRTkafa · 2m

열네 가지 테마가 함께 제공돼요. 열다섯 번째는 내 테마예요.

1248♥ 101
playfishies@playfishies · 9m

JSON 파일 하나. 화면 스타일 → 가져오기에 끌어다 놓으면 돼요.

Night Ink
deep-sea.theme.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가 처리해요.

copy-quote.plugin.js
/**
 * @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에는 열네 개가 함께 제공돼요

  • Thread Reader
  • Exact Timestamps
  • Clean Links
  • Copy as Markdown
  • Alt-text Reminder
  • User Notes
  • Muted Regex
  • Reading Time
  • Media Grid Focus
  • Keyboard Plus
  • Emoji Picker
  • Hide Blue Checks
  • Focus Mode
  • Reply Guard

05 이 위에 만들기

시스템 전체가 패키지 하나.

wayBetter for X를 받치는 페이지 런타임과 셸 모델은 npm에 waybetter로 올라와 있어요. 타입을 갖춘 순수 ESM, 모듈마다 자체 서브패스, 의존성은 0개. 필요한 조각만 가져가도 되고, 앱을 통째로 만들어도 돼요.

터미널

npm i waybetter

의존성 0개ESM + .d.tsruntime/* 와 shell/*GPL-3.0-or-later
adapter.ts · README에서 발췌
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 다음은

X가 처음이었어요. 다음은 당신이 만들어요.

웹 버전이 있는 앱이라면 같은 창, 테마, 플러그인을 가질 수 있어요. 아래는 다음 후보예요. 발표된 것도, 날짜가 정해진 것도 없어요. 누군가 어댑터를 써 주기를 기다리고 있어요. README의 어댑터 예시는 Kick이에요.

가능

wayBetter forYouTube?

동영상을 탭과 분할 창으로, 모든 채널 계정을 나란히, 테마와 플러그인까지.

가능

wayBetter forKick?

가벼운 창 하나에 스트림을 나란히, 내 채팅 플러그인과 내 테마로.

가능

wayBetter forTwitch?

여러 스트림을 분할 창으로, 모든 계정은 로그인한 채로, 채팅용 플러그인까지.

가능

wayBetter forDiscord?

무거운 클라이언트 대신 가벼운 Tauri 창에서 쓰는 웹 앱. 같은 셸, 같은 플러그인.

wayBetter for당신이 쓰는 앱.

어댑터를 작성하세요. 셸, 런타임, 테마, 플러그인은 함께 따라와요.

npm i waybetter

다음 앱을 만들어 보세요.

패키지와 README의 어댑터 예시에서 시작하세요. 무언가 만들었나요? 풀 리퀘스트로 “wayBetter를 사용하는 프로젝트” 목록에 추가해 주세요.

만들기 시작

다음 후보일 뿐, 발표된 제품이 아니에요. YouTube, Kick, Twitch, Discord는 각 소유자의 상표이며, 로고는 서비스를 가리키기 위해서만 표시했어요. wayBetter는 이들 중 어느 곳과도 제휴하지 않았고, 승인이나 후원을 받지 않았어요.

07 무료 오픈 소스

숨은 조건은 없어요. 한 줄 한 줄 읽어 보세요.

  1. i.

    무료

    유료 요금제도, 광고도, 업셀도 없어요. 지금도, “베타가 끝난 뒤”에도요.

  2. ii.

    오픈

    GPL-3.0-or-later. 프레임워크와 앱의 소스는 git.crt.fyi에 공개돼 있어요.

  3. iii.

    프라이빗

    분석도, 읽거나 게시한 내용에 대한 원격 수집도 없어요. 임시 보관글, 설정, 플러그인은 내 컴퓨터에 남아요.

  4. iv.

    당신의 것

    포크하고, 테마를 입히고, 플러그인을 쓰고, 다음 앱을 만들어 보세요. 라이선스가 다음 사람을 위해서도 열린 상태를 지켜 줘요.

08 원칙

더 좋게, 다르게는 아니에요.

진짜 앱을, 그 자리에서

앱 자체에 로그인해요. 프록시를 거치거나 다른 곳에 다시 호스팅되는 것은 없고, 변경은 내 컴퓨터에서만 일어나요.

가볍게, 브라우저를 하나 더 얹지 않고

시스템 WebView 위의 Tauri 창. 앱마다 하나, 그 안에 모든 계정.

절대 대신 행동하지 않아요

수정은 내가 한 클릭이 제대로 반영되게 할 뿐이에요. wayBetter가 스스로 게시하거나, 팔로우하거나, 삭제하는 일은 없어요.

조용히 최신 상태로

업데이트는 서명돼 있고 조용히 설치돼서, 설치 파일을 다시 받지 않아도 수정이 도착해요.

X로 시작하세요.
다음을 만들어 보세요.

wayBetter for X 보기