/
All topics

Make Your Own

Publishing to the Store

A boost you made goes to everyone through a pull request: checked on its live site, read by a person, then listed.

Every listing in the Store comes from one open repository, yab-plugins. A boost gets there as a pull request. Its checks run on the live site, Yab takes pictures before and after, a person reviews it, and the merge puts it in the Store, in Yab and on this site at once.

From Yab#

  1. Make the boost and keep it: ask in ⌘J on the site, try it, press ⌘↩.
  2. Open Site Controls with ⌘E, open the boost’s menu and choose Share to Store….
  3. Say Share. Your agent writes the listing from the boost, forks yab-plugins with your GitHub account, opens the pull request and posts its link in the chat.

You need the GitHub command line signed in (gh auth login). Nothing is sent before you say Share.

By hand#

Copy a folder in boosts/ and name it after the site and what it does, in lowercase with hyphens: youtube-no-shorts. A boost is four files:

boosts/youtube-no-shorts/
  manifest.json     which sites, and the stylesheet
  BOOST.md          name, sites, preview page, checks, then what it is for
  page/style.css    the change itself
  listing.json      the Store's words

BOOST.md starts with its front matter. The words under it are the intent: what the boost is for, in plain words. Yab and your agent mend the boost from them when the site changes, so say what you want, not how the CSS does it.

---
name: Hide Shorts
sites: www.youtube.com
made: your-github-name
preview: https://www.youtube.com/results?search_query=minecraft
checks:
  - on /*: none of ytd-reel-shelf-renderer, a[href^='/shorts/']
  - on /*: some of body
---

Hide YouTube Shorts shelves and Shorts links.

manifest.json is a Manifest V3 file whose content_scripts match https://www.youtube.com/* with "css": ["page/style.css"]. listing.json repeats name, intent and preview, and adds host (the site without www), by, picks (false) and added (the date).

Checks#

A check is one line Yab can run on the page without a model. It is how the Store knows a boost still works, and how Yab notices a site changed under yours.

on <path>: none of <selectors>        nothing visible matches
on <path>: some of <selectors>        something visible matches
on <path>: <n> per row in <selector>  the first row has n visible items
on <path>: text <words> in <selector> a match says these words
on <path>: script <name>              a function in checks.js (code boosts)

The path is matched with * as a wildcard, so on /* is every page. A boost that hides something needs a none of check that fails without it and passes with it. A boost that restyles names what it styles with some of, so a redesign that renames things fails the check. A boost with no checks still works in Yab, but the Store does not list it.

Try it before you send it#

npm ci
npx playwright install webkit
npm run validate
node scripts/check.mjs youtube-no-shorts

The check opens the preview page in WebKit with no cookies, rejects cookie banners, runs the checks before and after your CSS, and saves both pictures in out/pictures/youtube-no-shorts/. Look at them, then open the pull request. It runs the same checks and comments what it found.

What review looks for#

  • One boost per pull request, with a preview page where it visibly changes something.
  • Look boosts are CSS alone: no scripts, no url(…) or @import, exact sites, never every site.
  • New sites, new permissions, code, or a new owner need a second reviewer; the label is added for you.
  • American English, and the intent in your own words.

Code (scripts on a page, tools for agents, plugins with their own page) goes through a reviewed release in plugins/, never as a boost listing. See Building plugins.

After the merge#

The listing is in the Store in Yab and on yetanotherbrowser.com/store with your name, the source and the commit. Every listing is checked again every day: Works today while it passes, Needs Fix after two failed days. A fix is another pull request that changes the CSS and, when the site renamed things, the checks; the intent stays as it is. People who kept your boost get the fix on their own, as long as it changes nothing about what the boost may do.