Skip to content
st

v0.3.0

Catalog discovery with browse and crawl, plus a deeper app and package record.

This release adds two ways to discover the catalog and fills the gaps in what each record captures. st browse pages the whole store catalog, st crawl walks the typed graph from any seed, and the app, package, reviews, and news records now carry the fields the endpoints already returned but earlier versions dropped.

Browse the whole catalog

st browse reads the same paginated list the store page calls as it scrolls. It reports a total of around 260,000 apps and returns them in pages, so it is the seed a bulk walk or export starts from. Each row is a full app reference, so a hit pipes straight into st app, st reviews, or st crawl.

st browse --sort Released_DESC -n 20   # the 20 newest apps
st browse --maxprice free -n 50        # the first 50 free apps
st browse --query roguelike            # the catalog filtered by a term

The filters are --query, --sort (Released_DESC, Reviews_DESC, Price_ASC, Name_ASC), --maxprice, and --start for resuming a walk.

Crawl the graph

st crawl follows the typed edges a record already carries. From an app it reaches the DLC, demos, base game, and packages; from a package it reaches the apps it bundles; from a profile it reaches the most-played apps. It emits one node per visited record, never revisits a node, and is best-effort past the seed, so an unreachable node is skipped rather than fatal.

st crawl 620 --depth 2                  # the graph two hops out from Portal 2
st crawl gabelogannewell --depth 1      # a profile's most-played apps

Each node carries its kind:id edges, so the output loads as a graph elsewhere. --depth bounds how far the walk goes (0 visits only the seed) and -n bounds the total node count.

A deeper app record

st app now captures the appdetails fields earlier versions read past:

  • The content ratings from every board (ESRB, PEGI, USK, and the rest), each with its rating, age, and descriptors.
  • The per-platform system requirements (pc_requirements, mac_requirements, linux_requirements).
  • The buy options from the package groups, with each package's price and savings, and any package they name is folded into the package edges.
  • The highlighted achievements, each with its localized name and icon URL.
  • The extra store art (capsule_image, capsule_imagev5, background_raw) and the legal, DRM, and external-account notices.
  • The demos an app links to, both as records and as crawlable edges.

It also folds in the canonical review summary from the appreviews endpoint: review_score_desc (the "Overwhelmingly Positive" label), total_reviews, total_positive, and total_negative.

A fixed package record

st package read the wrong keys and left its description and image fields empty. It now reads what the endpoint actually returns: page_image, small_logo, the controller support, and the individual price.

Smaller additions

st search now carries the controller support a hit reports, and st news carries each item's feed_type.

Upgrade notes

The package record dropped the always-empty description and header_image fields and replaced them with page_image and small_logo. A consumer that referenced the old fields should switch to the new ones.