ธีม
สี ฟอนต์ มุม ความหนาแน่น เลย์เอาต์ พื้นหลัง เอฟเฟกต์ สามสีก็เพียงพอ ที่เหลือระบบคำนวณให้ และข้อความยังอ่านง่าย
หรือสร้างในแอป: รูปลักษณ์ → ตัวสร้างธีม → ส่งออก THEMES.md มีรายการทุกอย่างที่ธีมกำหนดได้
(FOSS) pull request ก็คือการส่งผลงาน
ธีมคือไฟล์ JSON หนึ่งไฟล์ ปลั๊กอินคือไฟล์ JavaScript หนึ่งไฟล์ สร้างขึ้นมา ลองในแอป แล้วเพิ่มเข้าร้านค้า: โฟลเดอร์เดียวใน pull request เดียว หรือแนบไฟล์ใน issue ถ้าคุณไม่ใช้ git ทั้งสองทางต้องมีบัญชี git.crt.fyi ที่สมัครฟรี และไม่ต้องใช้อย่างอื่นอีก
เริ่มจากไฟล์ที่ใช้งานได้ ตัวสร้างโครงจะเขียนให้หนึ่งไฟล์ ส่วนหัวข้อสร้างในแอปเอง (wayBetter → สร้าง) มีตัวอย่างและค่าธีมปัจจุบันให้ดู
สี ฟอนต์ มุม ความหนาแน่น เลย์เอาต์ พื้นหลัง เอฟเฟกต์ สามสีก็เพียงพอ ที่เหลือระบบคำนวณให้ และข้อความยังอ่านง่าย
หรือสร้างในแอป: รูปลักษณ์ → ตัวสร้างธีม → ส่งออก THEMES.md มีรายการทุกอย่างที่ธีมกำหนดได้
คลาสที่มี start() และ stop() พร้อมส่วนหัวที่บอกว่าใครสร้างและใช้อะไรบ้าง
เพิ่ม --ts สำหรับโปรเจกต์ TypeScript PLUGINS.md มีรายละเอียด API สิทธิ์ และการรีโหลดสด
/**
* @name Hide Trends
* @description Hides the trends box in the right column, so the timeline is the only thing moving.
* @version 1.0.0
* @author you
* @permissions network:none
*/
module.exports = class HideTrends {
start() { wayBetter.api.injectCSS('hide-trends', '[data-testid="sidebarColumn"] section { display: none }'); }
stop() { wayBetter.api.clearCSS('hide-trends'); }
};
ร้านค้าอ่านชื่อ ผู้เขียน เวอร์ชัน คำอธิบาย และสิทธิ์ของปลั๊กอินจากส่วนหัวนี้ และอ่านชื่อ ผู้เขียน และคำอธิบายของธีมจาก JSON ของธีม หน้าจอติดตั้งแสดงค่าเดียวกัน ทั้งสองที่จึงไม่มีทางไม่ตรงกัน
ร้านค้าเป็นทางเลือก ไฟล์ที่ใช้งานได้ก็แชร์ได้เลย
custom.css ที่บันทึกแล้วจะรีโหลดในทุกแท็บพร้อมกันwaybetter://install ที่ชี้ไปยัง URL แบบ https บน waybetter.fyi, cdn1.crt.fyi หรือไฟล์ดิบบน git.crt.fyi จะไม่มีการติดตั้งโดยไม่ผ่านหน้าจอติดตั้งเด็ดขาดทุกรายการในร้านค้าคือโฟลเดอร์ภายใต้ store/<app>/ ในรีโพซิทอรี ชื่อโฟลเดอร์คือ id ของรายการ และเป็นที่อยู่ของมันที่นี่: /store/plugins/<id>/
store/x/plugins/hide-trends/
hide-trends.plugin.js the plugin, exactly as it installs
item.json { "category": "focus", "tags": ["trends", "sidebar"] }
preview.svg optional, 640×400 (.svg or .png); drawn for you without one
store/x/themes/midnight-mint/
theme.json the theme, as Appearance → Export writes it
item.json { "version": "1.0.0" }
preview.svg optional; drawn from the theme without one
categoryreading, writing, filters, focus หรือ tools ธีม: dark หรือ light ซึ่งจะใช้ค่าจาก mode ของธีมถ้าคุณไม่ได้ระบุtagsversionการส่งผลงานมีเท่านี้ หน้า การ์ด รายการค้นหา ตัวอย่างลิงก์ ข้อมูลแบบมีโครงสร้าง และรายการในไซต์แมป ถูกสร้างจากแคตตาล็อกที่ลงนามเมื่อเว็บไซต์ถูกบิลด์ store/README.md มีกฎทั้งหมด
ไม่มี CI ที่โฮสต์ไว้ การตรวจสอบคือคำสั่งที่คุณรันก่อนส่ง และผู้ดูแลจะรันอีกครั้งก่อน merge
git submodule update --init
bun install --frozen-lockfile
bun run check:store # your folder, against the Store's rules
bun run test # everything else, including the site's SEO test
a-z 0-9 - ไม่เกิน 40) name.plugin.js ไม่ซ้ำกันในแอปเดียวกัน@name, @version, คำอธิบาย และบรรทัด @permissions ที่ระบุ network หรือ network:nonenetwork:none จะถูกปฏิเสธเมื่อโค้ดเรียก fetch, XMLHttpRequest, WebSocket, EventSource หรือ sendBeacon การเรียก API ที่ถูกจำกัดต้องประกาศไว้eval, new Function หรือ import() ไม่มีสคริปต์หรือไฟล์ภายนอกในภาพตัวอย่าง ไม่มี @import หรือ URL ภายนอกใน CSS ของธีมมีสองทาง ทั้งสองต้องมีบัญชี git.crt.fyiฟรี: ใครก็สมัครได้ และผู้ดูแลจะอนุมัติบัญชีใหม่ทีละบัญชีด้วยตนเอง
คีย์ลงนามของร้านค้าถูกเก็บออฟไลน์โดยตั้งใจ การ merge จึงยังไม่ใช่การเผยแพร่ หลัง merge ผู้ดูแลจะอ่านโค้ด รัน waybetter store build และ waybetter store sign บนเครื่องที่เก็บคีย์ แล้ว push เว็บไซต์จะถูกบิลด์ใหม่ รายการของคุณจะมีหน้าของตัวเอง และทุกแอปจะเห็นมันเมื่ออ่านแคตตาล็อกที่ลงนามครั้งถัดไป
ทุกอย่างในแคตตาล็อกที่ลงนามได้รับการรับรองด้วยคีย์นั้น จึงต้องมีคนอ่านปลั๊กอินทุกตัวก่อนลงนาม
ไฟล์เดียวสำหรับแอป wayBetter ทุกตัว คุณไม่ต้องแก้ไขด้วยมือ เพราะมันถูกบิลด์จากโฟลเดอร์
{ "format": 2, "name": "wayBetter Store", "generatedAt": "2026-09-30T…Z", "items": [
{ "apps": ["x"], "kind": "plugin", "id": "thread-reader", "name": "Thread Reader",
"author": "wayBetter", "version": "1.2.0", "description": "…",
"category": "reading", "tags": ["threads"],
"url": "https://waybetter.fyi/store/plugins/bt-thread-reader.plugin.js",
"file": "bt-thread-reader.plugin.js", "sha256": "<64 hex>", "size": 10961,
"preview": "https://waybetter.fyi/store/previews/plugin-thread-reader.svg",
"permissions": ["ui", "clipboard", "commands", "network:none"] }
] }
apps ของตัวเอง แอปจะตรวจสอบทั้งไฟล์และเก็บไว้เฉพาะรายการของตัวเองไม่ใช่รายการในร้านค้า: ทั้ง 51 ภาษามีอยู่ในแอปแล้ว และโหลดเมื่อต้องใช้
apps/desktop/locales/<tag>.json ผ่าน pull request หรือ issue ที่แนบไฟล์ที่แก้แล้วbun run i18n:check: คีย์ ตัวยึดตำแหน่ง รูปพหูพจน์ และต้องไม่มีมาร์กอัป ผลลัพธ์ต้องเป็น 0 error(s)