# Milestones from tags

> Whatever puts a vanilla entity tag on a player - a quest mod's reward, a datapack, /tag - becomes a milestone Keystone remembers once, with commands and an announcement. New in 0.3, off by default.

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

New in 0.3, module `milestones`, off by default. A vanilla entity tag is what `/tag <player> add <name>` puts on a player; quest mods can give one as a reward command, and datapacks and command blocks can too. Keystone turns the tags you name into milestones, remembered **once per player, ever**. No quest mod is a dependency, and nothing is sent anywhere.

## Settings (`milestones.toml`)

- `watch`: which tags are milestones, exact names or a prefix ending in `*`: `stygion_quests.*`.
- `commands`: console commands for a milestone, a line each as `tag | command` with `{player}` and `{tag}`: `stygion_quests.create | keystone crate give {player} 1`. `* | …` runs for every milestone.
- `announce`: a line for everybody, `tag | text` with `{player}`: `stygion_quests.space | &6{player} reached space!`. `[en]…[cs]…` works.
- `check-every`: seconds between two looks at who is online (5). Reading tags costs next to nothing.

## For other parts

The `TagGained` event tells other modules and addons (badges can use `tag:<name>` rules too). `GET /v1/milestones` (scope `stats.read`) lists who reached what, for a website that awards its own way.
