# The market catalogue

> Every Create Table Cloth shop on the server in one searchable list: what it sells, for what, whose and where, with "show on map". New in 0.3, off by default.

Source: https://stygion.eu/docs/keystone/market
Updated: 2026-10-25

New in 0.3, module `market`, off by default. Keystone finds every shop players have set up with a **Create Table Cloth and a price tag** in the loaded world and lists it: what it sells, for what, how many are left, whose it is and where. Nothing is bought here; buying stays at the table cloth.

## How shops are found

Every `look-every` (default 5 minutes) the block entities of loaded chunks are read for shops. A shop is remembered after its chunk unloads and forgotten when its chunk is loaded again without it, or when it has not been seen for `forget-after` (30 days). Only loaded chunks are ever read; nothing is loaded for the catalogue.

## For players

- `/market [item]` lists the nearest shops in chat (`listed`, default 8), with the distance and direction.
- With Keystone's client half, `/market` opens the catalogue: search, the item drawn as in the game, price, stock or sold out, owner, world, coordinates, distance and direction.
- **Show on map** (`map`, default `auto`): a waypoint in JourneyMap, else in FTB Chunks, through their public APIs when the player has one of them (neither is a dependency), and always a beam in the world and an arrow on the HUD. `journeymap`, `ftbchunks`, `beam` or `off` picks one.
- Permission `keystone.market` (everybody by default).

## For the owner

- `/keystone market hide` / `show`, standing within 8 blocks of a shop, takes it out of the catalogue or puts it back (`keystone.market.manage`).
- `GET /v1/market` (scope `players.read`, `?item=` part of an item id) gives the same list to a website, a Discord bot or a web map.
- `webhook`: an https address that receives the whole catalogue as JSON (POST) when it changes, with `webhook-key` as a Bearer token. Empty sends nothing anywhere. Addresses inside the network are refused unless the owner sets `allow-local`.
