{
  "version": 1,
  "generated_at": "2026-08-20T08:38:45-07:00",
  "plugins": [
    {
      "id": "broaty.discworld-blorpsack",
      "name": "Discworld Blorpsack",
      "description": "Tracks blorps (location-remembering jewellery) in your inventory and broadcasts the list for other plugins to route to.",
      "language": "lua",
      "homepage": "https://github.com/johnerlandsson/broaty.discworld-blorpsack",
      "tags": [
        "discworld",
        "location",
        "teleport",
        "inventory"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "John Erlandsson"
      ],
      "panels": [
        {
          "id": "blorps",
          "title": "Blorpsack"
        }
      ],
      "latest_readme": "# Discworld Blorpsack\n\nA [Mallard](https://mallard.vnsf.xyz) plugin for [Discworld MUD](https://discworld.starturtle.net/lpc/) that tracks **blorps** — pieces of jewellery enchanted to remember a location — carried by your character, and broadcasts the list for other plugins (e.g. cowtography) to route to.\n\nBlorpsack has no routing or mapping logic of its own. Its whole job is\nregistering blorps and telling other plugins where they are.\n\n## Commands\n\nCommands use Mallard's client command prefix — `/` by default. Blorps are\nstored per character, so a fresh character starts with an empty list even\non the same account and world.\n\n```\n/blorp                  — list all registered blorps\n/blorp add <name>       — register a blorp named <name> at your current room\n/blorp rm <name>        — remove a blorp\n```\n\nAdding a blorp with a name that already exists overwrites its stored room\nsilently — that's how you re-register a blorp after recasting it\nsomewhere new.\n\n```\n/blorp add market        Registered blorp \"market\" at The Mended Drum.\n/blorp                   Blorps:\n                            market               The Mended Drum\n/blorp rm market          Removed blorp \"market\".\n```\n\n## Panel\n\nAn optional \"Blorpsack\" panel shows the same list with Add/Remove\ncontrols. It's a pure convenience layer over the commands above — nothing\nin this plugin requires opening it.\n\n## For plugin authors: subscribing to the blorp list\n\nBlorpsack broadcasts over Mallard's cross-plugin `events` bus:\n\n- `broaty.discworld-blorpsack.blorps` — emitted after every successful\n  `add`/`rm`, and in response to the request event below. Payload:\n  `{ blorps = { { room_id = \"...\", name = \"...\" }, ... } }`.\n- `broaty.discworld-blorpsack.blorps.request` — emit this once after your\n  own plugin's load (e.g. after a short delay, to give blorpsack a chance\n  to load too) to get the current list regardless of which plugin loaded\n  first. Blorpsack never broadcasts unprompted at load.\n\n```lua\nevents.on(\"broaty.discworld-blorpsack.blorps\", function(data)\n  -- data.blorps is an array of { room_id, name }\nend)\n\nevents.emit(\"broaty.discworld-blorpsack.blorps.request\", {})\n```\n\n## Installation\n\nInstall from the Mallard marketplace.\n\n## AI disclosure\n\nMuch of this plugin's code was written with the help of an LLM (Claude).\nDesign decisions, testing, and review are the author's own.\n",
      "versions": [
        {
          "version": "0.1.1",
          "published_at": "2026-08-08T11:15:47+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/broaty.discworld-blorpsack/0.1.1/discworld-blorpsack-0.1.1.mallardx",
          "archive_sha256": "e237d906813a2236d29dd725b9313916d1b9c55169770ff4c3b24aaed93b28bc",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/broaty.discworld-blorpsack/0.1.1/discworld-blorpsack-0.1.1.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/broaty.discworld-blorpsack/0.1.1/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "com.github.rhwone.greg-tracker",
      "name": "Bosse's Discworld Greg Tracker",
      "description": "Tracks each skeleton warrior raised with Grisald's Reanimated Guardian on Discworld MUD, from birth to death, and builds lifetime statistics grouped by cause of death and fierceness.",
      "language": "lua",
      "homepage": "https://github.com/rhwone/mallard-greg-tracker",
      "tags": [
        "discworld",
        "necromancy",
        "tracker",
        "panel"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*",
        "*.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "rhwone"
      ],
      "panels": [
        {
          "id": "greg",
          "title": "Greg"
        }
      ],
      "latest_readme": "# Bosse's Discworld Greg Tracker\n\nTracks each skeleton warrior raised with Grisald's Reanimated Guardian on\n[Discworld MUD](https://discworld.starturtle.net/), from the moment it rises to the\nmoment you lose control of it, and builds lifetime statistics grouped by cause of\ndeath and fierceness.\n\n## Use\n\nRaise a skeleton as usual. The tracker picks up the rise line and the \"you mentally\ntake control\" line automatically, then parses its fierceness the next time you look\nat it. Nothing further is needed — just play, and check the **Greg** panel or type\n`greg` for a status line.\n\n| Command | What it does |\n| --- | --- |\n| `greg` | Uptime, fierceness, and how it compares to past runs |\n| `greg stats` | Lifetime statistics |\n| `greg list [n]` | The last n runs (default 10) |\n| `greg died [cause]` | Close the current run by hand — `expired`, `slain`, `killed` or `unknown` |\n| `greg fix <cause>` | Reclassify the most recent run |\n| `greg debug` | Toggle parse echoing |\n| `greg forget` | Discard the current run without recording it |\n| `greg reset confirm` | Erase all recorded runs |\n\nBoth `greg …` and `/greg …` work. If the bare form gets in the way, turn off\n**\"Accept 'greg ...' typed without the command prefix\"** in the plugin's settings.\n\n## How death is classified\n\nOnly old-age deaths (\"expired\") describe how long a skeleton actually lives —\neverything else was cut short for a reason the tracker already knows, and is counted\nseparately rather than averaged in:\n\n- **Killed by you** — your own killing blow landed within the last 10 seconds.\n- **Killed by something else** — control was lost with no recent kill and no recent\n  old-age warning.\n- **Died of old age** — the old-age warning (\"*You feel your mental connection to the\n  skeleton weakening…*\") fired within the last 5 minutes. This is the only death that\n  announces itself in advance, which is what makes the other two distinguishable at\n  all.\n- **Replaced by a new raise** — a new skeleton was raised while the tracker still\n  thought the last one was alive (missed death line, disconnect, etc).\n\n## The panel\n\nThe **Greg** panel is the current skeleton, in two lines: uptime and fierceness on\nthe first, and on the second how far through the expected lifetime it is alongside\nits TPA (Transcendent Pneumatic Alleviator) shield state — up, or which colour it\nhas faded to on its way to breaking. Between them, once at least one skeleton has\ndied of old age, a progress bar against the expected lifetime for that fierceness\ntier (falling back to the overall average until three runs of that tier exist).\nOnce the old-age warning fires the projection is pointless, so the bar goes and the\nline reads **FAILING** with how long ago the warning landed.\n\nA stripe down the left edge carries the state — the fierceness accent while a run is\nhealthy, amber once it is past its expected lifetime, red once it is failing, and\ngrey when nothing is up. It is what makes the panel findable in a stacked sidebar\nwithout reading it. Figures that don't fit on a line aren't lost: the average behind\nthe percentage, and total uptime while failing, are on hover.\n\nIt deliberately fits in a few centimetres of panel height. The statistics and the\nrun history are `greg stats` and `greg list` — read once in a while, not worth\nstanding chrome.\n\n## Notes\n\n- **Runs are kept per character.** The same account raising on two characters won't\n  average one skeleton's lifetime against the other's. Storage isn't touched until\n  the character name actually arrives over GMCP (0.1.6+) — earlier versions could\n  read (and then overwrite) the wrong bucket for an instant at boot, which looked\n  like every recorded run had vanished after a Mallard restart or plugin reload.\n- **The panel follows your Mallard theme** (0.1.2+), light, dark, or tinted — it\n  previously always rendered in one fixed dark palette regardless of theme.\n- **No permissions beyond `char.info`/`char.info.name`**, used only to key storage per character.\n  The plugin never sends anything to the MUD and makes no network requests.\n- **Timestamps come from `os.time()`**, so runs are timed whether or not the panel is\n  open.\n- **TPA tracking is derived entirely from the shield's own visible glow** (0.1.7+) —\n  there's no command that reports it. The colour isn't a one-way ladder: it moves\n  between dull red / bright red / wobbling orange / flickering yellow in either\n  direction as the shield takes damage or recovers, drops back to no colour when\n  fully healed, and clears to \"Down\" on the shield actually breaking (a different\n  message entirely). The panel shows the same colour you'd see in the game window.\n  If [discworld-magic](https://github.com/wizardquack/mallardx-discworld-magic) is\n  also installed, its shield broadcast is used as a second, independent source for\n  the same state (0.1.8+) — not a dependency, just a bonus: this plugin fully\n  tracks TPA on its own either way.\n\n## Requirements\n\nMallard 0.24.0 or later. No other plugins needed.\n\n## Development\n\nSee [DEVELOPING.md](DEVELOPING.md) for building, sideloading and the port history.\n\n## License\n\nMIT\n",
      "versions": [
        {
          "version": "0.2.1",
          "published_at": "2026-08-10T00:32:46+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.greg-tracker/0.2.1/greg-tracker.mallardx",
          "archive_sha256": "63f8afd39b167d049778c94bc1d0925e55d52229c53b2d1ee4caa9c5ae52dd62",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.greg-tracker/0.2.1/greg-tracker.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.greg-tracker/0.2.1/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "char.info.name"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.9",
          "published_at": "2026-08-07T19:02:05+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.greg-tracker/0.1.9/greg-tracker.mallardx",
          "archive_sha256": "da312b24487c643b7655d8dffb3357ba78932530d87522eadc70f38d9fc9ca77",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.greg-tracker/0.1.9/greg-tracker.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.greg-tracker/0.1.9/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "char.info.name"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.7",
          "published_at": "2026-08-07T15:18:02+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.greg-tracker/0.1.7/greg-tracker.mallardx",
          "archive_sha256": "cd28b5a15ab6581f6850dc0cdf9d5166f8a6284741d235f8925582616de7de8b",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.greg-tracker/0.1.7/greg-tracker.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.greg-tracker/0.1.7/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "char.info.name"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "com.github.rhwone.vaulttracker",
      "name": "Bosse's Discworld Vault Tracker",
      "description": "Remembers what is inside your vaults on Discworld MUD, one per room, and keeps a searchable list of every item you have stashed.",
      "language": "lua",
      "homepage": "https://github.com/rhwone/mallard-discworld-vaulttracker",
      "tags": [
        "discworld",
        "inventory",
        "storage",
        "panel"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*",
        "*.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "rhwone"
      ],
      "panels": [
        {
          "id": "vault",
          "title": "Vaults"
        }
      ],
      "latest_readme": "# Bosse's Discworld Vault Tracker\n\nRemembers what is inside your vaults on [Discworld MUD](https://discworld.starturtle.net/),\none per room, and keeps a searchable list of everything you have stashed anywhere.\n\nLook in a vault container once and Vault Tracker records its contents. From then on\nyou can browse, search and gauge the fullness of every vault from anywhere, across\nsessions — without walking back.\n\n## Use\n\nStand in the room containing a vault, then:\n\n```\nvault register <name>\n```\n\nNow just `look in <container>` — `l drawer`, say. The first look locks that vault to\nthat container and records everything in it.\n\n| Command | What it does |\n| --- | --- |\n| `vault register <name>` | Register the room you are standing in |\n| `vault list` | List registered vaults |\n| `vault show [name]` | Print a vault's contents to the output window |\n| `vault find <text>` | Search every vault for an item |\n| `vault unlock [name]` | Re-bind a vault to a different container |\n| `vault forget <name>` | Unregister a vault |\n\nBoth `vault …` and `/vault …` work. If the bare form gets in the way, turn off\n**\"Accept 'vault ...' typed without the command prefix\"** in the plugin's settings.\n\n## What changed since you last looked\n\nEvery look at a vault is compared against the one before it, and anything that moved\nis reported under the list (0.2.2+):\n\n```\n[Vault Tracker] Updated vault 'AM vault' - 12 item entries.\n[Vault Tracker] New since your last look: a bone amulet, three gold coins.\n[Vault Tracker] Gone since your last look: a silver ring.\n```\n\nQuantities are ignored for this: `three gold coins` becoming `two gold coins` — or\n`a gold coin` — is the same item, not a departure and an arrival. The first look at a\nvault reports nothing, having nothing to compare against.\n\nWalking into a registered vault room whose record has gone stale prints one line:\n\n```\n[Vault Tracker] You're in 'AM vault'. Last recorded 34 days ago - look in the drawer to refresh it.\n```\n\nThe threshold is **\"Remind me when a vault's record is this many days old\"** in the\nplugin's settings, 14 days by default. Set it to 0 to turn the reminder off.\n\n## The panel\n\nThe **Vaults** panel gives one tab per vault, each with a fullness dot running from\ngreen (empty) through to red (completely full), and \"almost completely full\" called\nout separately in orange-red — that being the one worth acting on before your next\ndelivery bounces.\n\nContents are sorted alphabetically ignoring the leading quantity word, so \"a black\nbackpack\" files under B rather than under A with everything else. The search box at\nthe top searches every vault at once as you type; click a `[vault name]` on a hit to\njump straight to that vault's tab.\n\n## Notes\n\n- **One container per room.** Each vault is keyed to its room's GMCP identifier, and\n  the first container you look in there claims it. Looking in your backpack afterwards\n  won't overwrite the record. Use `vault unlock` if it bound to the wrong one.\n- **Nothing here is specific to the guild vaults.** Any room that reports a GMCP\n  identifier and any container that lists its contents when looked in will work —\n  a chest in a rented player home, for instance.\n- **Contents are only as current as your last look.** The timestamp above each list\n  tells you how stale a record is, and walking back into the room reminds you when\n  that record has gone stale (0.2.2+). Timestamps come from `os.time()` since 0.2.2;\n  before that a vault recorded while the panel was shut carried no date at all and\n  showed an em dash forever.\n- **Vaults are kept per character** (0.2.0+). Two characters on the same Mallard\n  install used to share one list; upgrading carries your existing vaults forward\n  automatically. Storage isn't touched until the character name actually arrives\n  over GMCP (0.2.1+) — earlier versions could read (and then overwrite) the wrong\n  bucket for an instant at boot, which looked like every vault had vanished after\n  a Mallard restart or plugin reload.\n- **The panel follows your Mallard theme** (0.2.0+), light, dark, or tinted — it\n  previously always rendered in one fixed dark palette regardless of theme.\n- **No permissions beyond `room.info` and `char.info`/`char.info.name`** (the\n  latter two only to key storage per character). The plugin never sends anything\n  to the MUD and makes no network requests.\n\n## Requirements\n\nMallard 0.24.0 or later. No other plugins needed.\n\n## Development\n\nSee [DEVELOPING.md](DEVELOPING.md) for building, sideloading and the port history.\n\n## License\n\nMIT\n",
      "versions": [
        {
          "version": "0.2.3",
          "published_at": "2026-08-11T13:16:27+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.3/vaulttracker.mallardx",
          "archive_sha256": "2ed8b24665b744e619979eaa2fcdab2520bb82e2674a76809f1cb9eac0d499ea",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.3/vaulttracker.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.3/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.info",
              "room.info.identifier",
              "char.info",
              "char.info.name"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.2",
          "published_at": "2026-08-10T01:31:59+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.2/vaulttracker.mallardx",
          "archive_sha256": "5cb99ecf2333d45ef93290472e06bc98623c2171f8935836d9a4fa88ebd22834",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.2/vaulttracker.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.2/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.info",
              "room.info.identifier",
              "char.info",
              "char.info.name"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.1",
          "published_at": "2026-08-07T14:15:50+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.1/vaulttracker.mallardx",
          "archive_sha256": "a932745eb383f3a635b7c8ee104c61f5db4a1a301b61d535cc6e68893df65019",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.1/vaulttracker.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.1/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.info",
              "room.info.identifier",
              "char.info",
              "char.info.name"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.0",
          "published_at": "2026-08-07T02:27:18+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.0/vaulttracker.mallardx",
          "archive_sha256": "81226326485890931fa6bcbde26ec636697132cb0592aab7304acb8d1de48fac",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.0/vaulttracker.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.2.0/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.info",
              "room.info.identifier",
              "char.info.name"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.4",
          "published_at": "2026-08-05T19:25:55+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.4/vaulttracker.mallardx",
          "archive_sha256": "e06aa569f602ec4c6d80fe5f2c478a81afc3cbb85b7c7a8191f7fe4dd1ab9962",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.4/vaulttracker.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.4/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.info",
              "room.info.identifier"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.2",
          "published_at": "2026-08-04T20:52:39+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.2/vaulttracker.mallardx",
          "archive_sha256": "47d9a2c1f3c45ad49c2e6aac2ded983e72501ddcf7e13126b54f92b732d474bb",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.2/vaulttracker.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.2/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.info",
              "Room.Info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.1",
          "published_at": "2026-08-04T17:44:21+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.1/vaulttracker.mallardx",
          "archive_sha256": "e6cef1bd838c078d352174a2f3d37438995c78d1615d25da49c72a54c63be552",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.1/vaulttracker.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.1/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.info",
              "Room.Info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.0",
          "published_at": "2026-08-04T17:03:31+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.0/vaulttracker.mallardx",
          "archive_sha256": "66ca4c0a43042efcab40fb6782388181d8eeb6cb8e09c5d8c44ad9ac42cea78d",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.0/vaulttracker.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.vaulttracker/0.1.0/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.info",
              "Room.Info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": true,
          "withdrawn_reason": "Fails to load where log.debug is unavailable; upgrade to 0.1.1 or later."
        }
      ]
    },
    {
      "id": "com.github.rhwone.xp-goals",
      "name": "Bosse's Discworld XP Goals",
      "description": "Set an XP goal and see how much is left to reach it, on a small panel that updates the moment a new XP figure arrives.",
      "language": "lua",
      "homepage": "https://github.com/rhwone/mallard-discworld-xp-goals",
      "tags": [
        "discworld",
        "xp",
        "goals",
        "panel"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*",
        "*.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "rhwone"
      ],
      "panels": [
        {
          "id": "goal",
          "title": "XP Goal"
        }
      ],
      "latest_readme": "# Bosse's Discworld XP Goals\n\nPick an XP total to aim for on [Discworld MUD](https://discworld.starturtle.net/) —\nthe price of a guild title, the next batch of levels, whatever you are saving towards\n— and a small panel keeps the gap in front of you: the goal, your current XP, what is\nleft, and how far along you are.\n\nIt redraws the moment a new XP figure arrives rather than on a timer, reads your XP\nthree different ways so it works with or without MXP, and keeps a separate goal for\nevery character on the account.\n\n## Use\n\n| Command | What it does |\n| --- | --- |\n| `xpg <amount>` | Set a goal (commas ok, e.g. `xpg 5,000,000`) |\n| `xpg clear` | Clear the current goal |\n| `xpg` | Show the current goal and how much is left |\n| `xpg help` | List the above in the output window |\n\nBoth `xpg …` and `/xpg …` work. Amounts may be written with or without commas.\n\n## The panel\n\nOpen **XP Goal** from the panel list:\n\n```\nGoal      5,696,459 xp\nCurrent   3,125,000 xp\n2,571,459 xp left\n[███████████░░░░░░░░░░░]  54% there\n```\n\nBefore the first XP figure arrives the panel says so rather than guessing at one,\nand once you pass the goal the line becomes **Goal reached!**\n\n## Settings\n\nIn Mallard's plugin manager, under this plugin:\n\n| Setting | Default | What it does |\n| --- | --- | --- |\n| Accept `xpg ...` typed without the command prefix | **on** | Lets you type `xpg` bare as well as `/xpg`. Turn it off if something else wants the word. |\n| Set the goal automatically from `teachers cost` replies | **off** | See below. |\n\n## Setting a goal from a teacher's price\n\nOff by default — tick **\"Set the goal automatically from 'teachers cost' replies\"**\nin the plugin's settings to turn it on. Then pricing something up sets the goal for\nyou. Ask the MUD what it costs —\n\n```\nteachers cost 10 fi.de.do\n```\n\n— and the reply *\"To learn 10 levels of fighting.defence.dodging from an optimal\nteacher would cost you 5696459.\"* becomes the goal, announced in the output so it is\nnever a silent change. The quoted price **is** the goal rather than something added\nto your current XP, because that XP is spent out of the same total the panel tracks.\n\nIt replaces whatever goal was set before, which is why it is off until you ask for\nit. Only that checkbox controls it — Mallard's Lua API can read plugin settings but\nnot write them, so there is no command that flips it.\n\n## How current XP is read\n\nNo command reports XP on demand, so this reads it the same way\n[discworld-vitals](https://github.com/wizardquack/mallardx-discworld-vitals) does,\nwithout depending on that plugin being installed:\n\n1. **MXP entity push** — the primary real-time path.\n2. **GMCP `char.vitals`** — authoritative on login, and on some configs a periodic\n   refresh too.\n3. **The classic score-brief text line** (`Hp: … Gp: … Xp: … Burden: …%`), as a\n   fallback for anyone with MXP disabled — only trusted when a `Burden` field is\n   present, since burden-less variants of that line are combat-monitor spam rather\n   than a real vitals line.\n\n## Notes\n\n- **Goals are kept per character.** The same account raising XP on two characters\n  won't mix their goals up. Storage isn't touched until the character name actually\n  arrives over GMCP, avoiding the boot-race bug found in earlier ports of Vault\n  Tracker / Greg Tracker (an empty name for an instant at boot could otherwise\n  overwrite a real character's saved goal).\n- **The panel follows your Mallard theme** — light, dark, or tinted.\n- **No permissions beyond `char.vitals`/`char.info`**, used only to read XP and key\n  storage per character. The plugin never sends anything to the MUD.\n\n## Requirements\n\nMallard 0.24.0 or later. No other plugins needed.\n\n## Development\n\n- `dev-install.ps1` links this working copy into Mallard's `plugins-dev` folder via\n  a junction (no admin rights needed) — an edit is live after \"Reload plugins\" and a\n  reconnect (the Lua VM is only created at world connect).\n- `build.ps1` assembles the `.mallardx` archive for distribution.\n\n## License\n\nMIT\n",
      "versions": [
        {
          "version": "0.2.0",
          "published_at": "2026-08-09T23:59:59+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.xp-goals/0.2.0/xp-goals.mallardx",
          "archive_sha256": "166ff6b9570ff5bc93badec5541cd5af24742b26aa62b0fac4620be3a9c7c37b",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.xp-goals/0.2.0/xp-goals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/com.github.rhwone.xp-goals/0.2.0/plugin.toml",
          "minimum_app_version": "0.24.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.discworld.beings-discworld-notes",
      "name": "Being's Discworld Notes",
      "description": "",
      "language": "lua",
      "homepage": "https://github.com/bytechipper/beings-discworld-notes",
      "tags": [
        "discworld",
        "notes"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "duzchip"
      ],
      "panels": [
        {
          "id": "beings-discworld-notes",
          "title": "Being's Discworld Notes"
        }
      ],
      "latest_readme": null,
      "versions": [
        {
          "version": "1.0.2",
          "published_at": "2026-08-19T22:39:47+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-notes/1.0.2/net.discworld.beings-discworld-notes.mallardx",
          "archive_sha256": "f45fd2e8f9dd5224e0ef7013f9c19f82feac91d8ae62775cd759cecd8e1fc0a2",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-notes/1.0.2/net.discworld.beings-discworld-notes.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-notes/1.0.2/plugin.toml",
          "minimum_app_version": "0.22.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "1.0.0",
          "published_at": "2026-08-19T19:58:10+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-notes/1.0.0/net.discworld.beings-discworld-notes.mallardx",
          "archive_sha256": "4c2a1cad9a2b156f83a75588a47ef5337fbaad3f3fce0684275ac02a85228a63",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-notes/1.0.0/net.discworld.beings-discworld-notes.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-notes/1.0.0/plugin.toml",
          "minimum_app_version": "0.22.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.discworld.beings-discworld-xp-timers",
      "name": "Being's Discworld XP Timers",
      "description": "",
      "language": "lua",
      "homepage": "https://github.com/bytechipper/beings-discworld-xp-timers",
      "tags": [
        "discworld",
        "xp",
        "timers",
        "numberchasing"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "duzchip"
      ],
      "panels": [
        {
          "id": "beings-discworld-xp-timers",
          "title": "Being's Discworld XP Timers"
        }
      ],
      "latest_readme": null,
      "versions": [
        {
          "version": "1.0.2",
          "published_at": "2026-08-19T22:39:47+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-xp-timers/1.0.2/net.discworld.beings-discworld-xp-timers.mallardx",
          "archive_sha256": "57373707f9246864d8e15ffd23215b68792bd0cd1d5846d967482b3096aab6ab",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-xp-timers/1.0.2/net.discworld.beings-discworld-xp-timers.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-xp-timers/1.0.2/plugin.toml",
          "minimum_app_version": "0.22.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "Char.Vitals",
              "Char.Info",
              "Room.Info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "1.0.0",
          "published_at": "2026-08-19T19:19:23+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-xp-timers/1.0.0/net.discworld.beings-discworld-xp-timers.mallardx",
          "archive_sha256": "6cbe265b32258026bb32cfe7fa5933107dc2abdba0261da26f3a1d8f4ef93213",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-xp-timers/1.0.0/net.discworld.beings-discworld-xp-timers.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.discworld.beings-discworld-xp-timers/1.0.0/plugin.toml",
          "minimum_app_version": "0.22.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "Char.Vitals",
              "Char.Info",
              "Room.Info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.mallard.discworld-autocols",
      "name": "Discworld Autocols",
      "description": "Automatically toggles the server-side `cols` setting around column-aware commands.",
      "language": "lua",
      "homepage": "https://github.com/wizardquack/mallardx-discworld-autocols",
      "tags": [
        "discworld"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "Wizard Quack"
      ],
      "panels": [],
      "latest_readme": "# Discworld Autocols\n\nAutomatically toggles the server-side `cols` setting around column-aware commands.\n\n## What it does\n\nMallard encourages users to set `cols` to 999 columns to minimize\nproblems with server-side word-wrap interfering with trigger matching.\nHowever, many Discworld commands like `inv`, `who`, `help`, and\n`skills` respond with decorative banners padded to your advertised\nwidth — which becomes 999-character visual noise when displayed in a\nreasonably-sized window.\n\nThis plugin intercepts those commands, temporarily sets `cols` to your live\nOutputPane width (read via `mud.viewport()`), sends the command, and restores\n`cols` to 999 afterwards. The result is readably-formatted command output sized\nto your actual pane — wider pane, wider banners — while preserving trigger-safe\nserver-side wrapping for normal prose.\n\n## Wrapped commands\n\nThe plugin automatically wraps the following commands:\n\n- **Single-shot** (toggle narrower, send, toggle back): `alias`, `blog`, `cost`,\n  `countries`, `group status`, `help`, `inv` / `inventory`, `lang` / `language`,\n  `nickname`, `quest`, `rituals`, `skills`, `sp` / `speak`, `spells`, `who`\n- **Stateful modes** (stay narrow until explicit exit): `mail`, `title quest`\n\n## Column width\n\nThe narrow width follows your OutputPane: drag the pane wider and banners get\nwider; drag it narrower and they shrink. The `mail` and `title quest` modes\nalso re-send `cols N` when you resize mid-session so subsequent prompts match.\n\n## Adding your own commands\n\nThe plugin exposes an **Extra commands to wrap** setting (per world, so each\ncharacter can have its own list). Add any command word that produces banner\noutput you'd like sized to your pane.\n\n- Separate entries with commas: `skp, taa, score`\n- An entry may contain spaces for multi-word commands: `look mailbox, read runes`\n- Use a pipe to list synonyms for one entry: `skp|skillpoints`\n- Only letters, digits, spaces, `_`, `-`, and `|` are allowed inside an entry\n- If you re-declare a command that's already wrapped (e.g. `skills`), your entry\n  is ignored with a warning\n\n## Known limitation: abbreviations\n\nAliases match exact command spellings. If you type `i` for `inventory` or\n`w` for `who`, the plugin will not intercept them. Type the full command name\n(`inventory` or `who`) for the plugin to engage.\n\n## Credit\n\nMany thanks to Oki and their scripts at\nhttps://code.tubul.net/tt_dw/scripts for the clever idea and\ninspiration for this plugin.\n",
      "versions": [
        {
          "version": "0.5.0",
          "published_at": "2026-08-16T08:56:27-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.5.0/discworld-autocols.mallardx",
          "archive_sha256": "493e7557291c1c641285399ba16c761b45f0362ac04981f9b73ac99bbc647425",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.5.0/discworld-autocols.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.5.0/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.1",
          "published_at": "2026-06-18T19:39:48-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.4.1/discworld-autocols.mallardx",
          "archive_sha256": "26d834187942d14484a322798dd73560ea2c7f4a9f2883337a9438cd36d2c5bc",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.4.1/discworld-autocols.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.4.1/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.0",
          "published_at": "2026-06-16T07:50:31-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.4.0/discworld-autocols.mallardx",
          "archive_sha256": "9248dcd0d1f1a4f43e2bb0a83f42589ba7bcb7487b1f48e3b580c9153a38f0a7",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.4.0/discworld-autocols.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.4.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.3.0",
          "published_at": "2026-06-11T13:53:02-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.3.0/discworld-autocols.mallardx",
          "archive_sha256": "fc19b059dc660d1264c39579bae055986c4abd1c7840575fa8e619018ff09f14",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.3.0/discworld-autocols.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.3.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.2",
          "published_at": "2026-06-05T07:20:36-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.2.2/discworld-autocols.mallardx",
          "archive_sha256": "54a8ee96d4fb87d67482b83176ef6d57bc1f08cf2ac8dda04d9b5e6ba7fb48b5",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.2.2/discworld-autocols.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.2.2/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.1",
          "published_at": "2026-06-04T16:27:39-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.2.1/discworld-autocols.mallardx",
          "archive_sha256": "8a414ec69cc009004577cea0f0bd1ecdb6c40f7cab844fb57177aa609e5dc33e",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.2.1/discworld-autocols.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.2.1/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.0",
          "published_at": "2026-06-04T08:01:05-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.2.0/discworld-autocols.mallardx",
          "archive_sha256": "382999a42a2c00831a190e20dfbd7f476bb22beb5a2735015d9cfc252793fc05",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.2.0/discworld-autocols.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.2.0/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.3",
          "published_at": "2026-06-04T07:36:06-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.1.3/discworld-autocols.mallardx",
          "archive_sha256": "8d1d7807b0b8d183cf5b5d5fa54d936a52e9fd5a41f41c8ac22b136b5cce0754",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.1.3/discworld-autocols.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.1.3/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.2",
          "published_at": "2026-05-29T13:59:48-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.1.2/discworld-autocols.mallardx",
          "archive_sha256": "325f5ebd320c44c480f6c49d6e3b39b44457dd62bc97f5fb39b9b129942b1c58",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.1.2/discworld-autocols.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.1.2/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.1",
          "published_at": "2026-05-27T06:52:03-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.1.1/discworld-autocols.mallardx",
          "archive_sha256": "69cb397965d5388518f83ff677d0eba55ba8ee1638fc5a1125cbd77832d7bd81",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.1.1/discworld-autocols.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-autocols/0.1.1/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.mallard.discworld-chat",
      "name": "Discworld Chat",
      "description": "A tabbed chat panel for capturing tells, group chatter, and talker chatter.",
      "language": "lua",
      "homepage": "https://github.com/wizardquack/mallardx-discworld-chat",
      "tags": [
        "discworld"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "Wizard Quack"
      ],
      "panels": [
        {
          "id": "chat",
          "title": "Chat"
        }
      ],
      "latest_readme": "# Discworld Chat\n\nA Mallard plugin for Discworld MUD. Captures tells, group chatter/events,\nand talker channels into a configurable, tabbed chat panel.\n\nThe panel is configurable via the gear icon on the right side, where\nyou can add/remove tabs, and control per tab/channel settings for\nthings like:\n\n- the colour of the channel's tag in the chat log\n- whether or not to play notification sounds\n- whether or not to show a desktop (OS) notification\n- whether or not to gag from the main output\n- whether or not to pina dedicated tab for the channel, or just\n  capture in an aggregator tab like \"Channels\"\n\n## Credit\n\nMany thanks to Quow and Oki, whose work on similar plugins was\ninvaluable in designing and building this one.\n",
      "versions": [
        {
          "version": "0.5.0",
          "published_at": "2026-08-09T09:23:54-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.5.0/discworld-chat.mallardx",
          "archive_sha256": "c93563418a34fc961033d3d4c11258b228800fb04dc567708e3bfcac40dc7945",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.5.0/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.5.0/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.1",
          "published_at": "2026-07-28T16:14:13-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.4.1/discworld-chat.mallardx",
          "archive_sha256": "50d3ea0cd167f39e75593688dec9a4b9d86b1106b48c2b3d86c466b811efa748",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.4.1/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.4.1/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.0",
          "published_at": "2026-06-29T08:47:10-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.4.0/discworld-chat.mallardx",
          "archive_sha256": "2c929ea67eba335603d1762277738bf3bbc2072275e6f1b0109efcf7441cf53e",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.4.0/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.4.0/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.3.1",
          "published_at": "2026-06-23T11:20:02-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.3.1/discworld-chat.mallardx",
          "archive_sha256": "b720b4d310539a0ad14f038b09b59354aa7ebb5ad44400646eed5a2166da64cd",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.3.1/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.3.1/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.3.0",
          "published_at": "2026-06-21T08:34:51-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.3.0/discworld-chat.mallardx",
          "archive_sha256": "8cf33ea641d66a5ebc64552cbd8bfadccc1a817020406c7bd7783066a2c743a4",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.3.0/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.3.0/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.4",
          "published_at": "2026-06-15T16:08:10-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.4/discworld-chat.mallardx",
          "archive_sha256": "04b8a960e4bdea5dc734369273e3cda1506a6fddd4b897414328aa411a66d520",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.4/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.4/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.2",
          "published_at": "2026-06-12T09:38:00-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.2/discworld-chat.mallardx",
          "archive_sha256": "f86b95b87995c45bc83a5e50ce023314f4c5ac125e98c5e08d7b772996d7e9e7",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.2/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.2/plugin.toml",
          "minimum_app_version": "0.8.3",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.1",
          "published_at": "2026-06-11T14:21:33-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.1/discworld-chat.mallardx",
          "archive_sha256": "0cafafd6a9ff51f55f57f56d8530572d2d383f56f403f427c987794f28f8f823",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.1/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.1/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.0",
          "published_at": "2026-06-11T13:19:55-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.0/discworld-chat.mallardx",
          "archive_sha256": "69cf6528032c01932b18928302ee658a2dabe6049fa727143791bd95d39050c2",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.0/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.2.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.2",
          "published_at": "2026-06-05T07:09:00-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.1.2/discworld-chat.mallardx",
          "archive_sha256": "022c1642e7e19355e2116b9cd654a2c9c580fa8232de9d6a6e4fc8701269bc4e",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.1.2/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.1.2/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.1",
          "published_at": "2026-06-04T07:36:06-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.1.1/discworld-chat.mallardx",
          "archive_sha256": "085a84708da45f3dfd13a488e22d72bfd3236ab479daa981186c82e05010ffa2",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.1.1/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.1.1/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.0",
          "published_at": "2026-06-01T10:05:09-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.1.0/discworld-chat.mallardx",
          "archive_sha256": "49a53bbf959046091587387c48e5497f8a1b76fe5825506936b0809ca66fe0e5",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.1.0/discworld-chat.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-chat/0.1.0/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.mallard.discworld-cowtography",
      "name": "Discworld Cowtography",
      "description": "Minimap and database search for Discworld MUD. Search Quow's database for rooms, items, shops and NPCs, speedwalk to any result, and view the map panel as you move.",
      "language": "lua",
      "homepage": "https://github.com/johnerlandsson/mallardx-discworld-cowtography",
      "tags": [
        "discworld",
        "mapping",
        "navigation",
        "database"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "John Erlandsson"
      ],
      "panels": [
        {
          "id": "map",
          "title": "Map"
        },
        {
          "id": "ascii_map",
          "title": "ASCII Map"
        }
      ],
      "latest_readme": "# Discworld Cowtography\n\nA [Mallard](https://mallard.vnsf.xyz) plugin for [Discworld MUD](https://discworld.starturtle.net/lpc/) combining a minimap panel with a searchable database of rooms, shop items, NPC items and NPCs — with GMCP-driven speedwalk to any result.\n\nMap data from **[Quow's Cow Bar and Minimap](https://quow.co.uk/minimap.php)**.\n\n---\n\n## Map panel\n\nThe map panel opens automatically on the right side of the window. As you walk through the MUD it tracks your position and highlights it on the map. Zoom in and out with the `+` and `−` buttons. Hover over the map to see room names.\n\n**Keyboard navigation:** Click the map or press `Ctrl+Shift+m` to focus it, then use arrow keys to pan and `+`/`−` to zoom. Press `Escape` to release focus and return keyboard input to the MUD.\n\n**Click any room to route there.** The path is highlighted on the map and a footer appears at the bottom of the panel showing the destination and move count. Click **walk** to start walking, or **✕** to cancel. If a clicked room has no reachable route, a brief error message appears in the footer instead. Click **⌂** at any time to switch back to your current character map and centre on your position. Middle-mouse drag pans the map; left-drag on empty space also pans.\n\n**World map:** When you travel between cities or through the Disc's terrain the panel automatically switches to a world map showing your position on the full Discworld. Road and river networks, terrain types and major location markers are all shown.\n\n**Right-click the map** to open a context menu. On SVG city maps, a **Filters** section lets you toggle street name labels and staircase exits. The **Maps** section lists all available maps grouped by region — hover a region to see its maps and click one to jump to it. Click-to-route works normally on any map you browse to.\n\n## ASCII Map panel\n\nA second, independent panel shows Discworld's own live ASCII minimap —\nthe same colour grid the MUD can print above `look`/`glance` — fed\ndirectly from the `room.map` GMCP frame. It updates automatically as you\nmove, with no per-room map data to author. Some locations (indoors,\nspecial zones) have no map to show; the panel says so rather than\nshowing a stale grid.\n\n**Zoom:** Scroll anywhere in the panel to zoom in and out. The zoom\nlevel is remembered per character.\n\n**Right-click the panel** for two commands that control whether\nDiscworld also prints the map inline above `look`/`glance` in your main\nwindow (via `options output map`, all four contexts: `look`,\n`lookcity`, `glance`, `glancecity`):\n\n- **Show map in output** — sets them all to `top`.\n- **Hide map in output** — sets them all to `off`, so the map only\n  appears in this panel.\n\nThis panel is read-only otherwise in this version: no click-to-route.\nShow or hide the panel itself like any other Mallard panel.\n\n---\n\n## Commands\n\nCommands use Mallard's client command prefix — `/` by default, configurable in Mallard's settings. Type `/db` on its own to print a command reference in the MUD window.\n\n### Searching\n\n```\n/db <room name>           — search rooms by name\n/db npc <name>            — search NPCs by name\n/db npc {<area>} <name>   — search NPCs filtered by area name\n/db item <name>           — search items for sale in shops\n/db npcitem <name>        — search items carried or sold by NPCs\n```\n\nSearch is case-insensitive. Up to 10 reachable results are shown, sorted by distance from your current room.\n\n```\n/db drum\n/db npc wizard\n/db npc {AM} pawn\n/db item long sword\n/db npcitem dagger\n```\n\n### Routing and walking\n\nAfter a search, pick a result by number to route there and start walking immediately:\n\n```\n/db drum\n  DB Search: room — \"drum\"  (3 results, nearest first)\n   1.  The Drum  ...\n   2.  ...\n/db 1\n  Walking to \"The Drum\" — 12 moves.\n```\n\n```\n/go         — start or resume walking the current route\n/go clear   — cancel the current route\n```\n\n`/go` walks whatever route is currently set, whether it came from a `/db` search result or a `/bm` bookmark.\n\nYou can also click any room on the map to set a route directly, without running a search first.\n\n> You must be in a room tracked by the map data for routing and distance sorting to work.\n\n### Bookmarks\n\nSave your current room as a named bookmark and route back to it at any time. Bookmarks are stored per character.\n\n```\n/bm                     — list all bookmarks\n/bm add <name>          — bookmark current room as <name>\n/bm rm <name>           — remove bookmark <name>\n/bm <name>              — highlight route to <name>, then /go to go\n```\n\n```\n/bm add market           — saves current room as \"market\"\n/bm market               — routes to your \"market\" bookmark\n/go                      — starts walking the highlighted route\n```\n\nSaving a bookmark with a name that already exists overwrites silently.\n\n---\n\n## Settings\n\nSettings are in the Mallard plugin settings panel.\n\n**Map style** — Switch between *SVG (vector)* maps and *PNG (classic pixel art)* maps. SVG maps are sharp at any zoom and show room types, exits, and route highlighting. PNG maps use the original pixel-art images from Quow's Cow Bar.\n\n**Walk arrival sound** — Optional chime to play when a `/go` completes.\n\n**Brief/verbose look around walks** — When enabled, sends `brief look` before and `verbose look` after the movement commands of a route, so long walks don't flood the screen with full room descriptions.\n\n**Blorp routing** — When enabled, and the Discworld Blorpsack plugin is installed with blorps registered, route results and search results show a tip when teleporting to a blorp would shorten (or enable) the route. Off by default.\n\n**Minimum blorp savings** — How many moves a blorp teleport must save before cowtography suggests it, in both the route tip and search results. Default 5.\n\n---\n\n## Installation\n\nInstall from the Mallard marketplace.\n\n---\n\n## Updating the database\n\nThe map and search data are built from [Quow's Cow Bar and Minimap](https://quow.co.uk/minimap.php). When Quow releases an update, regenerate all data files:\n\n```bash\nnpm install\nnpm run build:data\ngit add data/ src/data/ ui/data/ ui/maps/\ngit commit -m \"chore: regenerate data from updated Quow DB\"\n```\n\nThis downloads `quow_cowbar.zip` directly from quow.co.uk, extracts the database and map images, and regenerates everything.\n\nIf you already have a local copy of the zip or the SQLite database:\n\n```bash\nnpm run build:data -- --zip /path/to/quow_cowbar.zip\nnpm run build:data -- --db /path/to/_quowmap_database.db   # seed db only; no maps.lua, JS, or PNGs\n```\n\n---\n\n## Credits\n\nMap data, database content and pathfinding algorithm adapted from **[Quow's Cow Bar and Minimap](https://quow.co.uk/minimap.php)** plugin for MUSHClient by Quow. Used with gratitude.\n\n---\n\n## AI disclosure\n\nMuch of this plugin's code was written with the help of an LLM (Claude). Design decisions, testing, and review are the author's own.\n",
      "versions": [
        {
          "version": "0.30.0",
          "published_at": "2026-08-11T12:52:30+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.30.0/discworld-cowtography-0.30.0.mallardx",
          "archive_sha256": "4a150c78086e4fcfe7f7081a8fa06278d76a0236a10cc7f7395c4319bcaf46bb",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.30.0/discworld-cowtography-0.30.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.30.0/plugin.toml",
          "minimum_app_version": "0.25.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname",
              "room.map"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.29.1",
          "published_at": "2026-07-28T10:01:55+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.29.1/discworld-cowtography-0.29.1.mallardx",
          "archive_sha256": "d6f08b56dc184a431316d0aa5cc7c0afc0d18d652d2dc611f1699e1241f11ce5",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.29.1/discworld-cowtography-0.29.1.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.29.1/plugin.toml",
          "minimum_app_version": "0.17.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname",
              "room.map"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.29.0",
          "published_at": "2026-07-26T22:29:16+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.29.0/discworld-cowtography-0.29.0.mallardx",
          "archive_sha256": "a8c0e40907ce9f0ad7a134dab4976a77d62a53fb1f8831a634922a5ed1c101f2",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.29.0/discworld-cowtography-0.29.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.29.0/plugin.toml",
          "minimum_app_version": "0.17.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname",
              "room.map"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.28.1",
          "published_at": "2026-07-13T09:52:15+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.28.1/discworld-cowtography-0.28.1.mallardx",
          "archive_sha256": "8539c94e277d325d150cfd427bf473049db3443ee904278f91bcb6a295af8fdd",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.28.1/discworld-cowtography-0.28.1.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.28.1/plugin.toml",
          "minimum_app_version": "0.17.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname",
              "room.map"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.28.0",
          "published_at": "2026-07-11T23:11:46+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.28.0/discworld-cowtography-0.28.0.mallardx",
          "archive_sha256": "f0749a66e6724925811a55cdb660372b362bdf8463dc58fd069c92b094e85259",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.28.0/discworld-cowtography-0.28.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.28.0/plugin.toml",
          "minimum_app_version": "0.17.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname",
              "room.map"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.27.0",
          "published_at": "2026-07-08T20:17:13+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.27.0/discworld-cowtography-0.27.0.mallardx",
          "archive_sha256": "0eb3932efbe0a7a2bbc6273da4320193e999131e49d427c41ed70f3f33daf717",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.27.0/discworld-cowtography-0.27.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.27.0/plugin.toml",
          "minimum_app_version": "0.16.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.26.0",
          "published_at": "2026-07-02T10:44:12+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.26.0/discworld-cowtography-0.26.0.mallardx",
          "archive_sha256": "af0e2de037691bb3b6e2f572cd4d7e04ac6ae556bdacab125f498e5e8868dc62",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.26.0/discworld-cowtography-0.26.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.26.0/plugin.toml",
          "minimum_app_version": "0.11.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.25.0",
          "published_at": "2026-06-29T20:51:26+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.25.0/discworld-cowtography-0.25.0.mallardx",
          "archive_sha256": "eef8a3ac1a695340cd46d9e4fed520bf383087b55d85fd4b41910701c68b48b0",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.25.0/discworld-cowtography-0.25.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.25.0/plugin.toml",
          "minimum_app_version": "0.11.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.24.0",
          "published_at": "2026-06-29T01:17:04+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.24.0/discworld-cowtography-0.24.0.mallardx",
          "archive_sha256": "b5fdd78ad40f0237df464b929ddc48716960d1e42f1796bdeb6f7689dce23c93",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.24.0/discworld-cowtography-0.24.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.24.0/plugin.toml",
          "minimum_app_version": "0.11.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.23.1",
          "published_at": "2026-06-28T01:02:30+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.23.1/discworld-cowtography-0.23.1.mallardx",
          "archive_sha256": "83003288a2d14b91073851199902c420db99a910d79512da48f5f55a288662b4",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.23.1/discworld-cowtography-0.23.1.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.23.1/plugin.toml",
          "minimum_app_version": "0.11.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.23.0",
          "published_at": "2026-06-27T01:22:17+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.23.0/discworld-cowtography-0.23.0.mallardx",
          "archive_sha256": "08585ce1425c2bf2290095bfe61847e0395f94e95f505e3ee50479765b3c54ae",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.23.0/discworld-cowtography-0.23.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.23.0/plugin.toml",
          "minimum_app_version": "0.11.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.22.1",
          "published_at": "2026-06-26T01:17:22+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.22.1/discworld-cowtography-0.22.1.mallardx",
          "archive_sha256": "d0422558d8642bab55f6e9369a16de4d85ec9f2469b6ca50db98c09679dce725",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.22.1/discworld-cowtography-0.22.1.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.22.1/plugin.toml",
          "minimum_app_version": "0.11.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.22.0",
          "published_at": "2026-06-24T23:26:23+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.22.0/discworld-cowtography-0.22.0.mallardx",
          "archive_sha256": "445238e0cbf2b644df8d0aea84730988cb482fd2ef1e1d075bcb3ada1238b25c",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.22.0/discworld-cowtography-0.22.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.22.0/plugin.toml",
          "minimum_app_version": "0.11.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.21.0",
          "published_at": "2026-06-23T23:10:52+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.21.0/discworld-cowtography-0.21.0.mallardx",
          "archive_sha256": "3fae2fec861a20a38e177cff5333db3f7c533ee260f8a7ef03228b3b5ced1e49",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.21.0/discworld-cowtography-0.21.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.21.0/plugin.toml",
          "minimum_app_version": "0.11.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.20.0",
          "published_at": "2026-06-22T22:59:17+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.20.0/discworld-cowtography-0.20.0.mallardx",
          "archive_sha256": "7eed1c23e6a4652ad3bdcfd85a939faf419278ae1f7ebfc9c778333c6e410e38",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.20.0/discworld-cowtography-0.20.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.20.0/plugin.toml",
          "minimum_app_version": "0.11.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.19.0",
          "published_at": "2026-06-21T00:50:30+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.19.0/discworld-cowtography-0.19.0.mallardx",
          "archive_sha256": "6521f3ce412351abac1c79a0306d53174935d60a3266386098ecec4186bde0aa",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.19.0/discworld-cowtography-0.19.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.19.0/plugin.toml",
          "minimum_app_version": "0.9.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.18.2",
          "published_at": "2026-06-20T01:53:26+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.18.2/discworld-cowtography-0.18.2.mallardx",
          "archive_sha256": "f0b3b2de2e2fd6af33ff35945aace7618b832a8de0e8be2e4b50725dc8584dc1",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.18.2/discworld-cowtography-0.18.2.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.18.2/plugin.toml",
          "minimum_app_version": "0.9.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.18.0",
          "published_at": "2026-06-19T00:25:50+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.18.0/discworld-cowtography-0.18.0.mallardx",
          "archive_sha256": "9daef90936a1beb398bb9ac447f424a2c33a43ec11caca235dd048caef7039c1",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.18.0/discworld-cowtography-0.18.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.18.0/plugin.toml",
          "minimum_app_version": "0.9.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.17.0",
          "published_at": "2026-06-18T00:59:47+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.17.0/discworld-cowtography-0.17.0.mallardx",
          "archive_sha256": "fc780cafafe916e25fe1131383358f6b2f64ce40d2b959b50d69b998c5a3368b",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.17.0/discworld-cowtography-0.17.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.17.0/plugin.toml",
          "minimum_app_version": "0.9.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.16.1",
          "published_at": "2026-06-17T01:22:09+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.16.1/discworld-cowtography-0.16.1.mallardx",
          "archive_sha256": "2aa77321b03a6fe5201309d6e144dd44093a5f7b9f31017ea18b6cc8153a9a95",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.16.1/discworld-cowtography-0.16.1.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.16.1/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.16.0",
          "published_at": "2026-06-16T14:07:37+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.16.0/discworld-cowtography-0.16.0.mallardx",
          "archive_sha256": "88a68f2a68aada0a6d010819942fd571b1c3282116a3c1fa63a5e4f29ead3887",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.16.0/discworld-cowtography-0.16.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.16.0/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info",
              "char.info",
              "char.info.*",
              "char.info.capname"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.14.0",
          "published_at": "2026-06-15T14:45:13+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.14.0/discworld-cowtography-0.14.0.mallardx",
          "archive_sha256": "c0399c6bab16e84eb56fc07ef8c7acc954c270945a273e5f45c1a4e0da791538",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.14.0/discworld-cowtography-0.14.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.14.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.12.0",
          "published_at": "2026-06-15T01:49:02+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.12.0/discworld-cowtography-0.12.0.mallardx",
          "archive_sha256": "7a2a7a20ab1b1e2c0bd6ca33cc7cd0d8abfa4729adc391ab04672501cebfc315",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.12.0/discworld-cowtography-0.12.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.12.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.11.0",
          "published_at": "2026-06-14T13:28:58+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.11.0/discworld-cowtography-0.11.0.mallardx",
          "archive_sha256": "cb8981ed12d8604366d43dbc3e04457568209e8ed02ec5b6472062251f99184d",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.11.0/discworld-cowtography-0.11.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.11.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.9.0",
          "published_at": "2026-06-13T20:56:46+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.9.0/discworld-cowtography-0.9.0.mallardx",
          "archive_sha256": "1b59a4f33c999e82e043c933b9e4478b4e0d191deccd98f061c3a8fd89a74a13",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.9.0/discworld-cowtography-0.9.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.9.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.8.0",
          "published_at": "2026-06-13T16:12:46+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.8.0/discworld-cowtography-0.8.0.mallardx",
          "archive_sha256": "b421325219194b5d8ab2e4a5a3fca77d936f31c93cd37f06832d484ff8f2d1c9",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.8.0/discworld-cowtography-0.8.0.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.8.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.7.2",
          "published_at": "2026-06-13T00:51:36+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.7.2/discworld-cowtography-0.7.2.mallardx",
          "archive_sha256": "bad8e3fe40884382bf2e2c8409ed458944f4eaa8707070a18e8108c2881c7137",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.7.2/discworld-cowtography-0.7.2.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.7.2/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.7.1",
          "published_at": "2026-06-11T21:03:49+02:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.7.1/discworld-cowtography-0.7.1.mallardx",
          "archive_sha256": "24b009c22bdf21f4a537c36e281bb9571882bb3b4406c96b2d299425e966493d",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.7.1/discworld-cowtography-0.7.1.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-cowtography/0.7.1/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "room.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.mallard.discworld-grouping",
      "name": "Discworld Grouping",
      "description": "A grouping panel showing group roster with HP/GP/shielding info.",
      "language": "lua",
      "homepage": "https://github.com/wizardquack/mallardx-discworld-grouping",
      "tags": [
        "discworld"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "Wizard Quack"
      ],
      "panels": [
        {
          "id": "group",
          "title": "Group"
        }
      ],
      "latest_readme": "# Discworld Grouping\n\nShows the active group's roster (group name + member list) with\nper-member HP/GP bars in a compact panel.\n\n## What it does\n\n- Auto-tracks group join/leave events (yours and others').\n- Per-member HP/GP bars update from the `gs` (group status brief)\n  output. The user is in control — there's no background polling; the\n  panel's `⟳` button (or typing `gs` yourself) refreshes everyone in\n  one round-trip.\n- Dead members are flagged with a `ghost` badge.\n- The group leader is flagged with a gold `L` badge, read from the\n  leader marker in `group status` output (`(L)` in brief form, the\n  \"current leader of the group\" line in verbose form). The badge also\n  moves the moment the game posts a `... is now the leader of the group.`\n  line — no refresh needed.\n- Empty placeholder when you're not in a group.\n- A five-pill shield row (T C E B M) per member: TPA / CCC / EFF / BUG /\n  MS. v1 wires TPA and EFF — including a per-player TPA glow ladder\n  fed from passive combat output. CCC/BUG/MS are placeholders pending a\n  follow-up. State flows from `discworld-magic` via the cross-plugin\n  `net.mallard.discworld.shield.up/.down` event surface.\n\n# Cross-plugin communication\n\nThis plugin has an optional dependency on the discworld-magic plugin.\nIf you have it, you will get richer information on shielding for each\ngroup member.\n\n## Development\n\n```sh\nluarocks install busted  # one-time\nbusted                   # run unit tests\n```\n\nThe pure-Lua modules (`group`, `shield_store`, `status_maps`) are unit-\ntested under `spec/`. `group.lua` is the roster state machine — its spec\ncovers membership, vitals, ghosting, and leader tracking.\n\n## Credit\n\nMany thanks to Quow, whose work on similar plugins was invaluable in\ndesigning and building this one.\n",
      "versions": [
        {
          "version": "0.4.6",
          "published_at": "2026-07-28T16:14:13-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.6/discworld-grouping.mallardx",
          "archive_sha256": "a0c945ba7afef6eae105c22388e1e3adb1d19ccb073a66874ae712cddc359477",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.6/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.6/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.5",
          "published_at": "2026-07-27T12:43:24-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.5/discworld-grouping.mallardx",
          "archive_sha256": "aa881ca278ca5f08dffc150951fd31e854fd11ae9311c62b5e5e0aea2ae66fe3",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.5/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.5/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.4",
          "published_at": "2026-06-23T11:20:02-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.4/discworld-grouping.mallardx",
          "archive_sha256": "4620187a233d6dd499c218d174449f22609dd8c1770b000dc61f0b7510757671",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.4/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.4/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.3",
          "published_at": "2026-06-18T19:39:48-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.3/discworld-grouping.mallardx",
          "archive_sha256": "f30dff6ed2ef41ab0446bfa672c3a15cedd4bd61e4253db0b4d7859db2f5759e",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.3/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.4.3/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.3.1",
          "published_at": "2026-06-16T07:50:31-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.3.1/discworld-grouping.mallardx",
          "archive_sha256": "1ac7143ac1c477172548eb0d00b3a770896c4d07ae8be81d9b06aed336fe3a79",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.3.1/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.3.1/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.3.0",
          "published_at": "2026-06-15T16:08:10-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.3.0/discworld-grouping.mallardx",
          "archive_sha256": "66ea2d405401c74274240acc3ee87635e876c0184a40fb9d55bbce03b16d6f19",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.3.0/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.3.0/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.1",
          "published_at": "2026-06-12T09:38:24-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.2.1/discworld-grouping.mallardx",
          "archive_sha256": "87559cfa3710bd1b9734417c770b1f7155606e50ebfe5ed8b5b092da80d7f121",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.2.1/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.2.1/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.0",
          "published_at": "2026-06-11T13:24:14-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.2.0/discworld-grouping.mallardx",
          "archive_sha256": "fecfe678f4e956fae9b70a9adb7e8d8f3da3453d5724eed11d2a4eb0c63378d9",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.2.0/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.2.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.3",
          "published_at": "2026-06-05T10:17:53-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.3/discworld-grouping.mallardx",
          "archive_sha256": "5d38205a720db90cb6fda33cec7ef05c1c648a205969523a1a1706dc27dfbdbb",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.3/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.3/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.2",
          "published_at": "2026-06-05T08:50:48-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.2/discworld-grouping.mallardx",
          "archive_sha256": "540688ee5d1e0106aa47f4e243dbdad243e5ab4dfc8d29d97d4130d0284c46d4",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.2/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.2/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.1",
          "published_at": "2026-06-04T07:36:06-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.1/discworld-grouping.mallardx",
          "archive_sha256": "aadc686312aa27be92e7f70df8083bd8610f2f3b3950b18e25a207e49d8344db",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.1/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.1/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.0",
          "published_at": "2026-06-01T10:05:15-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.0/discworld-grouping.mallardx",
          "archive_sha256": "f83addab477abc88cf3d9fb301d67e807a29e5a6b6141bc7c5d65741394e7d76",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.0/discworld-grouping.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-grouping/0.1.0/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.mallard.discworld-magic",
      "name": "Discworld Magic",
      "description": "Magic highlights and inline annotations in game output, as well as some helper commands.",
      "language": "lua",
      "homepage": "https://github.com/wizardquack/mallardx-discworld-magic",
      "tags": [
        "discworld"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "Wizard Quack"
      ],
      "panels": [],
      "latest_readme": "# Discworld Magic\n\nColour highlights and inline annotations for Discworld magic spell output\n(enchantment levels, Klein-bottle energy, Earhammer / PfG damage,\nDelude shadow depth, and other people's offensive casts).\n\nAlso tracks magic states/events and emits relevant events for other\ninterested plugins to consume. Two initial consumers are the\ndiscworld-grouping plugin, and the discworld-vitals plugin, both of\nwhich can display richer magical shielding info if you also have this\nplugin installed and active.\n\n## `/spell` — spell info lookup\n\nA `/spell` slash command for the ~115 Discworld spells.\n\n```\n/spell              list every spell, grouped by type, in columns\n/spell <nick>       full info card — e.g. /spell wgs\n/spell <fragment>   fuzzy match across nick / name / description\n/spell help         usage banner\n```\n\nThe full card shows name, type, GP, casting size, components, tome,\nand the per-stage spellcheck table — each threshold cell colour-coded\nso you can see at a glance which bonus tier you'd land in. Nicks in\nlist views are clickable; they drill straight into the full card.\n\nWith [discworld-vitals](https://github.com/wizardquack/mallardx-discworld-vitals)\ninstalled and a snapshot captured (run its `/skills-refresh`), the\nspellcheck table gains four extra columns per stage: success chance,\nyour current level + bonus in the stage's skill, and a hint at the\nbonus delta needed to reach the next chance tier.\n\n## `/mindspace` — spell-memory budget\n\nWizards and witches can only hold so many spells in their head at once:\neach spell has a *size* (its Mindspace cost), and the sum of your known\nspells' sizes may not exceed your available mindspace — which is your\n`magic.spells.special` bonus + 30.\n\nThis plugin tracks both halves and annotates the `spells` command:\n\n- **Per-spell sizes.** In the `spells` listing, each spell name is tagged\n  with its mindspace cost (e.g. `Wungle's Great Sucking (35)`). The tag is\n  gated to a column boundary — the name must sit at line start or after 2+\n  spaces *and* be followed by 2+ spaces or line end — so it only fires in\n  the columnar listing. Ordinary prose (\"You prepare to cast … on\n  yourself.\") and chat mentions stay untagged (verified against real game\n  logs). Spell names keep their usual by-tier colour everywhere.\n- **Total summary.** After the listing settles, a colour-coded line —\n  `Total spell size: 337 / 415  (78 free)` — reports how much of your\n  mindspace you're using (green under budget, yellow at exactly full,\n  red over).\n- **`/mindspace`** (alias `/mind`) prints an on-demand breakdown: your\n  available capacity, used size, and every known spell sorted\n  largest-first so the mindspace hogs are obvious.\n\nThe known-spell set is seeded from the `spells` listing and kept live by\n`remember` / `forget` lines, then persisted per character — so\n`/mindspace` stays accurate between listings and across relogs. Running\n`spells <category>` re-scopes only that category, leaving the others\nintact.\n\nThe available-mindspace total comes from\n[discworld-vitals](https://github.com/wizardquack/mallardx-discworld-vitals)'\nskill snapshot (run its `/skills-refresh` once). Without it, sizes and the\nused total still work — only the capacity figure is withheld, with a nudge\nto refresh.\n\nOn every change the plugin emits `net.mallard.discworld.mindspace.updated`\n`{ charname, total, used, free, known_count }` (`total`/`free` are `nil`\nuntil a skill snapshot lands) so other plugins can surface the budget.\n\n> Not to be confused with Major Shield (divine \"ms\" protection), which\n> this plugin also tracks separately.\n\n## Cross-plugin events in depth\n\nThis plugin emits `net.mallard.discworld.shield.up` and\n`net.mallard.discworld.shield.down` for both self and other-player\nshield state changes. Payload shape:\n\n```\nsubject  = \"self\" | \"<PlayerName>\"\ntype     = \"tpa\" | \"eff\" | \"ccc\" | \"bug\" | \"ms\"\n# optional, populated by type:\npercent, glow, previous_glow, previous_percent  -- tpa\nitem                                            -- eff\nhits, duration_seconds                          -- tpa (and eff for self)\nsilent                                          -- eff (intentional drops)\n```\n\nv1 implements TPA and EFF for both subjects. CCC/BUG/MS are reserved in\nthe event grammar and will be added in a follow-up plan.\n\nConsumers today:\n- `discworld-vitals` — self-only; filters by `subject == \"self\"` and\n  drives the EFF indicator + TPA stat cells.\n- `discworld-grouping` — self + other; drives the five-pill shield row\n  per group member.\n\n## Credit\n\nMany thanks to Quow and Oki, whose work on similar plugins was\ninvaluable in designing and building this one.\n",
      "versions": [
        {
          "version": "0.11.1",
          "published_at": "2026-08-16T08:56:27-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.11.1/discworld-magic.mallardx",
          "archive_sha256": "4ab94098cb46aa58ff2375d35ed264b53ffc863d09e4b193a650498d340887ec",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.11.1/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.11.1/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.11.0",
          "published_at": "2026-07-31T06:12:30-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.11.0/discworld-magic.mallardx",
          "archive_sha256": "9cdfd16576de8b76f72c5e88ca8b24981db0a240c4699f771319efa382feece8",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.11.0/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.11.0/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.10.1",
          "published_at": "2026-07-28T16:14:13-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.10.1/discworld-magic.mallardx",
          "archive_sha256": "e1866ca47f11b24932b0f2b48bc4239535ffcd3df30346531c033db455ab0cb9",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.10.1/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.10.1/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.10.0",
          "published_at": "2026-07-27T12:43:24-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.10.0/discworld-magic.mallardx",
          "archive_sha256": "a38b29f50b00e78134055708560e6cf652b9d35c5de79a97bc79251150eae685",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.10.0/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.10.0/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.9.0",
          "published_at": "2026-07-13T09:11:23-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.9.0/discworld-magic.mallardx",
          "archive_sha256": "ba61fb0ffd88a7a1249dd5c7bff65c8e40d1e56dbc76882ce008c6df5a87f84d",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.9.0/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.9.0/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.8.0",
          "published_at": "2026-07-08T11:38:29-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.8.0/discworld-magic.mallardx",
          "archive_sha256": "e83d42ad9dd0f9b0a7135de9e0f6d66354d770cc0b1a263ffb36f8418a8e440d",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.8.0/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.8.0/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.7.0",
          "published_at": "2026-06-18T19:39:48-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.7.0/discworld-magic.mallardx",
          "archive_sha256": "f973f85b0a45ed1c1e951f2b38d2e8585c674223b99ad13682cd436e0aa3dfff",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.7.0/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.7.0/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.6.2",
          "published_at": "2026-06-15T16:08:10-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.6.2/discworld-magic.mallardx",
          "archive_sha256": "1404c005484ee2a5d99b808c9565b75b6cfaabfcb36e7dac96ac5be156fdd118",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.6.2/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.6.2/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.6.1",
          "published_at": "2026-06-12T09:37:40-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.6.1/discworld-magic.mallardx",
          "archive_sha256": "e510bacfee4fad317e38bff01c4aa1c6504eeb90299a6fccb69f4bcf4b257bad",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.6.1/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.6.1/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.6.0",
          "published_at": "2026-06-11T13:26:37-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.6.0/discworld-magic.mallardx",
          "archive_sha256": "39a59a23b89e523ee94720163e8a98a31fccd660d3aab252ab69fe6838d705e1",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.6.0/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.6.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.0",
          "published_at": "2026-06-10T13:47:49-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.5.0/discworld-magic.mallardx",
          "archive_sha256": "2925047d350f06cee4dfb48854ad463f9d99d64f80b5d719eb3074e97295dade",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.5.0/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.5.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.2",
          "published_at": "2026-06-05T08:50:18-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.4.2/discworld-magic.mallardx",
          "archive_sha256": "b7310e5f6658a1345e29b50bc58ca6d90b64bd629b5f5f75cb30457f0ea63af1",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.4.2/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.4.2/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.1",
          "published_at": "2026-06-04T07:36:06-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.4.1/discworld-magic.mallardx",
          "archive_sha256": "e56a1966403091f23b9ea3302605f21aa57ebfa39b0145e0505d8c8e4ce441a7",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.4.1/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.4.1/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.0",
          "published_at": "2026-06-01T10:05:19-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.4.0/discworld-magic.mallardx",
          "archive_sha256": "9a29765dfd7b7c4bb37f9d6fc9e65d2e683fe079a0b28b95764b430a3cfb9453",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.4.0/discworld-magic.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-magic/0.4.0/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.mallard.discworld-mapper",
      "name": "Discworld Mapper",
      "description": "A minimal minimap plugin for Discworld.",
      "language": "lua",
      "homepage": "https://github.com/wizardquack/mallardx-discworld-mapper",
      "tags": [
        "discworld"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "Wizard Quack"
      ],
      "panels": [
        {
          "id": "map",
          "title": "Map"
        }
      ],
      "latest_readme": "# Mallard Discworld Mapper\n\nA minimal minimap plugin for Discworld.\n\n## Status\n\nEarly release. Renders the current map tile + player marker via `room.info` GMCP frames. Hover tooltip + zoom controls included.\n\nClick-to-act, speedwalk, bookmarks, hotspots, NPC/item search, and ASCII surround-map are deliberately out of scope for now. It's just minimal read-only functionality to show you where you are.\n\n## Attribution\n\nThis plugin redistributes:\n\n- Map PNG bundle (`ui/maps/*.png`) — Quow\n- Room dictionary (`ui/data/rooms.js`) — derived from Quow's `_quowmap_database.db`, same permission.\n\nSource: https://quow.co.uk/ (`quow_cowbar.zip`). The data is converted at build time by `scripts/build-room-db.mjs`, but original files are redistributed as well per Quow's request.\n\n## Development info: building the room database\n\n```sh\nnpm install\nnpm run build:rooms   # fetches Quow's zip, emits ui/data/rooms.js + ui/maps/*.png\nnpm test              # vitest unit tests\n```\n",
      "versions": [
        {
          "version": "0.1.4",
          "published_at": "2026-06-05T10:18:21-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.4/discworld-mapper.mallardx",
          "archive_sha256": "c3e91a503e5a0d429729c6a7829e2a6cb23720669ef5fd17e7f02a9df697e1f3",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.4/discworld-mapper.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.4/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "room.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": true,
          "withdrawn_reason": "Unmaintained — no longer recommended for new installs."
        },
        {
          "version": "0.1.3",
          "published_at": "2026-06-05T07:20:55-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.3/discworld-mapper.mallardx",
          "archive_sha256": "ca78dcc7d57c5f791d603a539659318f5600faecaba1bcc6af29e115afa34d5f",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.3/discworld-mapper.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.3/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "room.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": true,
          "withdrawn_reason": "Unmaintained — no longer recommended for new installs."
        },
        {
          "version": "0.1.2",
          "published_at": "2026-06-04T07:36:07-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.2/discworld-mapper.mallardx",
          "archive_sha256": "3d6a9b5f074be352ce9d111d569fea4b149ea7b94a721829b13d35142cb48d21",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.2/discworld-mapper.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.2/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "room.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": true,
          "withdrawn_reason": "Unmaintained — no longer recommended for new installs."
        },
        {
          "version": "0.1.1",
          "published_at": "2026-05-26T14:37:46-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.1/discworld-mapper.mallardx",
          "archive_sha256": "dd44f4c3a07ed8c0d00d92da1a7065953f08d83004472d3540fb0c5bbe887f92",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.1/discworld-mapper.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mapper/0.1.1/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "room.info"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": true,
          "withdrawn_reason": "Unmaintained — no longer recommended for new installs."
        }
      ]
    },
    {
      "id": "net.mallard.discworld-mdt",
      "name": "Discworld MDT",
      "description": "Map Door Text — parses Discworld's room.writtenmap GMCP frames into a scored panel of nearby-room contents.",
      "language": "lua",
      "homepage": "https://github.com/wizardquack/mallardx-discworld-mdt",
      "tags": [
        "discworld"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "Wizard Quack"
      ],
      "panels": [
        {
          "id": "mdt",
          "title": "Nearby"
        },
        {
          "id": "grid",
          "title": "Radar"
        }
      ],
      "latest_readme": "# Mallard Discworld MDT\n\nA [Mallard](https://mallard.vnsf.xyz) plugin for [Discworld MUD](https://discworld.starturtle.net/lpc/) that turns the `room.writtenmap` GMCP frame into a scored \"Nearby\" panel.\n\n## What it does\n\nEach time you move, Discworld sends a GMCP `room.writtenmap` payload listing who and what is visible in adjacent rooms (the same data you'd see by typing `map door text`). This plugin parses it and renders a sortable, scored panel:\n\n```\n  N   [5]  Sgt Detritus, 2 watchmen\n  NE  [3]  3 bystanders, beggar\n  2E  [2]  Carrot\n  S   [1]  cat, 2 ravens\n```\n\nRooms are sorted by score; the panel hides rooms below a threshold (configurable).\n\n## Radar panel\n\nA second panel, **Radar**, shows the same rooms as a 5x5 map of the ground\naround you, with your own square in the middle:\n\n```\n  .    .    .    .    .\n  .   2wm  .    .    .\n  .    .    @   3bg  .\n  .    .   6pg  .    .\n  .    .    .    .    .\n```\n\nEach room's direction is summed into a square — \"one north and one east\" and\n\"one northeast\" land on the same cell and merge. Hovering a square shows its\nfull contents; the squares themselves show as much as the panel allows, so\nresizing the panel shows more.\n\nBackgrounds shade by the square's own score, on fixed bands (1, 2-3, 4-6,\n7-10, 11+) running deep blue through violet and magenta to burnt orange, so\nthe same room always looks the same colour as you move. The busiest square in\nview is outlined. The count in the corner ramps green through red, and the\neight rooms one step away sit on a lighter ground than the ring beyond them.\n\nRooms with no compass square — up, down, shipboard directions (fore/aft/port/\nstarboard), and anything more than two rooms out — are listed underneath the\ngrid in the usual scored rows rather than being dropped.\n\nBoth panels are driven by the same pushes, so you can dock either one, or\nboth at once, and place them wherever your layout wants them.\n\n## Commands\n\n| Command | Effect |\n|---|---|\n| `mdt` | Show command list |\n| `mdt help` | Show command list |\n| `mdt list [pattern]` | Show match list, optionally filtered |\n| `mdt add <pattern> [score] [colour]` | Add a match |\n| `mdt remove <pattern>\\|<n>` | Remove by pattern text or 1-based index |\n| `mdt clear` | Wipe match list (this character only) |\n\nPatterns are case-insensitive substrings by default. Wrap a pattern in `/.../` for Lua-pattern matching:\n\n```\nmdt add watchman 3 red\nmdt add /^(sgt|cpt) %a+/ 5 yellow\n```\n\nColours: `red`, `yellow`, `green`, `cyan`, `blue`, `magenta`, `white`, `grey`, plus `bold-` variants.\n\n## Settings\n\n- **Default score per entity** — applied to entities matching no entry (default: 1).\n- **Hide rooms scoring below** — threshold for omitting rooms from the panel (default: 0).\n- **Max rooms shown in panel** — caps the visible rows (default: 20).\n- **Shorten and group names in Radar** — collapse each square's contents into\n  counted groups keyed on the last word of each name, so \"angry hoplite\" and\n  \"sassy hoplite\" read as `2xhoplite`. Words shorten to three letters only in\n  squares too small to hold them, so a wide panel stays readable. Off by\n  default; the full list is always on the square's tooltip.\n- **Radar panel shading** — shade squares by score, use one colour for every\n  occupied room, or no background colour at all.\n- **Radar colour — score 1 / 2-3 / 4-6 / 7-10 / 11+** — one hex colour per\n  band. Left blank, a band follows the current theme: each is a hue off the\n  flame ramp (cold blue → hot orange) tinted into the theme's own background,\n  so it comes through as a saturated dark on a dark theme, a pale tint on a\n  light one, and picks up the background's cast on a tinted theme. A value\n  overrides that band in every theme; anything that isn't a hex colour is\n  treated as blank.\n  The score 1 colour doubles as the fill for the \"one colour for every occupied\n  room\" mode — that mode means \"something is here, never mind how much\", which\n  is what the bottom band already says.\n\n## Storage\n\nMatch lists are stored per-character, keyed by `char.info.name`.\n\n## Development\n\n```sh\nluarocks install busted  # one-time\nbusted                    # run unit tests\n```\n\nSpec lives at `docs/superpowers/specs/2026-06-12-mdt-v0.1-design.md`\n(gitignored — keep your local copy in sync with intent).\n\n## Credit\n\nMany thanks to Quow and Oki, whose work on similar plugins was\ninvaluable in designing and building this one.\n",
      "versions": [
        {
          "version": "0.3.0",
          "published_at": "2026-08-06T15:21:00-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.3.0/discworld-mdt.mallardx",
          "archive_sha256": "58ab9bc57a26bfa7f387a6a7c87c6079057d0551cd72ff7318b5f0b5d48f3454",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.3.0/discworld-mdt.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.3.0/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.writtenmap",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.5",
          "published_at": "2026-07-31T06:12:30-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.5/discworld-mdt.mallardx",
          "archive_sha256": "b8815595bbb8d0656d823582e905bf7e938271b2cbb51e956524708816896fa6",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.5/discworld-mdt.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.5/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.writtenmap",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.4",
          "published_at": "2026-07-28T16:14:13-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.4/discworld-mdt.mallardx",
          "archive_sha256": "d70093024e26f1999992ee482c39dffd05bd2ede2cf9011084fb51be8436ef87",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.4/discworld-mdt.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.4/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.writtenmap",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.3",
          "published_at": "2026-07-08T11:38:29-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.3/discworld-mdt.mallardx",
          "archive_sha256": "9447dfa784e207c1bbc3a6d75e9169aa2cc603f5112baf70deebe1887d52202e",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.3/discworld-mdt.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.3/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.writtenmap",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.2",
          "published_at": "2026-06-29T08:47:10-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.2/discworld-mdt.mallardx",
          "archive_sha256": "2065dec12e84e5a46263f97406c320519643f9db7418bf8950919d813fe5b8eb",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.2/discworld-mdt.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.2/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.writtenmap",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.1",
          "published_at": "2026-06-26T13:27:15-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.1/discworld-mdt.mallardx",
          "archive_sha256": "616df6ebc0d5208d6a0e711fd71ea2fb9065d483e50469d1c462b8df8bfcdb1d",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.1/discworld-mdt.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.1/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.writtenmap",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.2.0",
          "published_at": "2026-06-16T07:50:31-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.0/discworld-mdt.mallardx",
          "archive_sha256": "2a8747a4bcb7e1ab3080f28350fe517edfb6008d3daffa248b8bab477199481c",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.0/discworld-mdt.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.2.0/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.writtenmap",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.1",
          "published_at": "2026-06-15T16:08:10-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.1.1/discworld-mdt.mallardx",
          "archive_sha256": "abda0e81052b3ec6e7190914e4c0c2700828191fab8874cbacf2a76a67e5ae80",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.1.1/discworld-mdt.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mdt/0.1.1/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "room.writtenmap",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.mallard.discworld-misc",
      "name": "Discworld Misc",
      "description": "An opinionated plugin porting some bits of tt_dw's highlighting regex",
      "language": "lua",
      "homepage": "https://github.com/wizardquack/mallardx-discworld-misc",
      "tags": [
        "discworld"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "Wizard Quack"
      ],
      "panels": [],
      "latest_readme": "# Discworld Misc\n\nAn opinionated plugin porting some bits of tt_dw's `scripts/misc/`:\n\n| Module           | Source            | What it does |\n|------------------|-------------------|--------------|\n| `src/mines.lua`  | `mines.tin`       | Hazard highlights for dwarven-mines rockfall + stinkdamp gas. |\n| `src/ratfarm.lua`| `ratfarm.tin`     | Trap highlights for the rat farm — boulder, arrow-slits, trapdoor, tripwire, loot crates. |\n| `src/impemon.lua`| `impemon.tin`     | Colour-codes Sourcery-event imp names by tier (cyan / yellow / bold / red / magenta). |\n| `src/djinn.lua`  | `djinn.tin`       | Recolours captured flame-colour words at the willing well and on flame-weapon invocations; static red/green highlights for invocation success/failure. |\n| `src/gags.lua`   | `gags.tin` (top)  | Gags world-side pet/summon movement spam, sneaking notice, MWLC/UPDD/Hag's-blessing critter spam, and the rtfm-list-all discussion notice. |\n| `src/money.lua`  | `money.tin`       | Inline currency conversion — annotates every Discworld-currency price with its Ankh-Morpork value (`5Gc` → `5Gc (A$0.03)`). Covers Genuan, Lancre, Ephebe, Agatean, Djelian, Klatch; AM dollars + pennies get a static highlight. |\n| `src/high.lua`   | `high.tin`        | General gameplay highlights — combat / death, item handoff, drop / theft mishaps, condition descriptors, finesmithing, charm bracelets, ritual failures, warpaint, blight, Celestial Anchor, Breathe Underwater, moonlit-market full moon, rare mission items, DJB bazaar stall labels. (Magic / portal / octograving blocks of `high.tin` are ported in `discworld-magic` instead.) |\n",
      "versions": [
        {
          "version": "0.8.0",
          "published_at": "2026-07-31T06:12:30-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.8.0/discworld-misc.mallardx",
          "archive_sha256": "fcea734584ed2dee5d889fcd78f00817e240acae040d3a904d3ce8ede48b686a",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.8.0/discworld-misc.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.8.0/plugin.toml",
          "minimum_app_version": "0.8.3",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.7.0",
          "published_at": "2026-07-08T11:38:29-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.7.0/discworld-misc.mallardx",
          "archive_sha256": "36fb3c22ac3b73a361796a8914a1d02d6ca1b209d4a08cba7d01e5a3478da555",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.7.0/discworld-misc.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.7.0/plugin.toml",
          "minimum_app_version": "0.8.3",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.6.0",
          "published_at": "2026-06-29T08:47:10-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.6.0/discworld-misc.mallardx",
          "archive_sha256": "b3c45e01e98859829e9b9fed8165295ddd3c98be6d44d6e78c6d5e20eae26635",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.6.0/discworld-misc.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.6.0/plugin.toml",
          "minimum_app_version": "0.8.3",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.1",
          "published_at": "2026-06-26T13:27:15-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.5.1/discworld-misc.mallardx",
          "archive_sha256": "7c5456a8cdb57b7b38fb3ffd6d317b9281e921f7b5092a28ba4be78078332dcb",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.5.1/discworld-misc.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.5.1/plugin.toml",
          "minimum_app_version": "0.8.3",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.0",
          "published_at": "2026-06-18T19:39:48-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.5.0/discworld-misc.mallardx",
          "archive_sha256": "606f5ade1973bf916ea27125f7fd9b459a25c5685ca07906c126b454ee1515ff",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.5.0/discworld-misc.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.5.0/plugin.toml",
          "minimum_app_version": "0.8.3",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.0",
          "published_at": "2026-06-11T13:27:56-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.4.0/discworld-misc.mallardx",
          "archive_sha256": "508924b2193a5810cd98e73c1954e349cd9114e8795972f28e96580ed3b046b8",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.4.0/discworld-misc.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.4.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.3.3",
          "published_at": "2026-06-05T08:50:04-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.3/discworld-misc.mallardx",
          "archive_sha256": "2c075f5368a8dc945d574705e84fa9f243c6561b78b5737caf3d441c1da92961",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.3/discworld-misc.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.3/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.3.2",
          "published_at": "2026-06-04T07:36:07-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.2/discworld-misc.mallardx",
          "archive_sha256": "39c0f86a6c112049b38310f4581635db43bcf1080efb267f9a6ffe4f58ca4e8f",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.2/discworld-misc.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.2/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.3.1",
          "published_at": "2026-06-02T08:55:26-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.1/discworld-misc.mallardx",
          "archive_sha256": "f0eeddc5f5c3215c3c4a3469685662fe16a539433099d530893a022c1d8c18f8",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.1/discworld-misc.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.1/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.3.0",
          "published_at": "2026-06-01T10:05:24-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.0/discworld-misc.mallardx",
          "archive_sha256": "1bf5299baa18c54d1bd8cad2a2cd572663c819b7a6c05d207677e4a2bcee9f17",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.0/discworld-misc.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-misc/0.3.0/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.mallard.discworld-mission-manager",
      "name": "Discworld Mission Manager",
      "description": "Tracks Discworld jobs & missions — cooldowns, per-mission XP, and XP-per-hour ranking for the AM Job Market, Dead Letter Office, and Sam Slager sausages.",
      "language": "lua",
      "homepage": "https://github.com/wizardquack/mallardx-discworld-mission-manager",
      "tags": [
        "discworld"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "Wizard Quack"
      ],
      "panels": [
        {
          "id": "missions",
          "title": "Missions"
        }
      ],
      "latest_readme": "# Discworld Mission Manager\n\nA [Mallard](https://github.com/wizardquack/mallard) plugin that tracks Discworld's\nrepeatable jobs and missions — **cooldowns**, **per-mission XP**, and an **XP-per-hour\nranking** so you always know the best thing to do next.\n\n## v1 coverage\n\n| Family | Missions | Cooldown |\n|--------|----------|----------|\n| AM Job Market (Mr Werks) | 13 employment writs (Thirst Quencher → Expert Street Maintenance Technician) | 1h from completion |\n| Dead Letter Office (Frank) | 9 letters DLA–DLI | 1h from completion |\n| Sam Slager | sausage delivery (single mission) | 1h from completion |\n\nXP is **observed + seeded**: never-done missions show a seeded estimate; once you\ncomplete a mission the real awarded XP (read from \"You have been awarded N experience\npoints…\") is used thereafter.\n\n## Panel\n\nDock the **Missions** panel (right side by default). It shows your active missions\n(several can run at once — the game allows one active job per family, e.g. a Werks job\nalongside a dead letter delivery) and an\n**On cooldown** list with live countdowns. The **Ready** list (missions available now,\nranked by XP/hour) is off by default — turn on *Show ready missions in panel* to enable it.\nRight-click for \"Reset all cooldowns\".\n\n## Commands\n\nAll commands are also available under the shorter alias `/mm` (e.g. `/mm list`).\n\n| Command | Effect |\n|---------|--------|\n| `/missions` or `/missions help` | Show command help |\n| `/missions list` | Full ranked table of every mission (active runtimes + ready XP/rate + cooldown countdowns). Always shows everything, regardless of the panel display settings. |\n| `/missions status` | Your active missions and how long each has been running |\n| `/missions cancel [job]` | Clear a stuck \"active\" mission (e.g. after a completion the plugin missed). With several missions active, name the one to clear — bare `cancel` lists them. |\n| `/missions reset <job>` | Clear one mission's cooldown (e.g. `/mm reset gofer`) |\n\n`<job>` is any case-insensitive fragment of the label shown in `/missions list` (or an\nexact internal key — the disambiguation output prints those). `/mm cancel lackey`,\n`/mm reset dlc`, and `/mm reset far away` all resolve (no quotes needed — the fragment\nmay contain spaces); an ambiguous fragment lists the candidates instead of guessing.\n| `/missions reset` | Clear ALL cooldowns (run twice within 10s to confirm) |\n\n## Settings\n\n- **Travel time estimate (s)** — added to each mission's measured time in the rate math (default 120).\n- **Desktop notification when ready** — OS notification on expiry (default off; a note always prints).\n- **Ready-alert XP/hr floor** — only alert for missions at/above this rate (default 0).\n- **Show ready missions in panel** — show the panel's Ready section at all (default **off**). Does not affect `/missions list`.\n- **Show never-done missions in panel** — when the Ready section is shown, also include missions you've never completed, using their seeded XP (default on). Does not affect `/missions list`.\n\n## Known v1 limitations\n\n- Sausages are a single mission; plain/spiced and per-critter splits are deferred.\n- A late-delivered difficult letter (no award line) isn't recorded that round.\n- If the plugin loads while a mission is already active, that completion may be missed\n  (start is latched from your outgoing `apply`/`offer` command).\n- No mapper integration — travel time is a flat setting.\n\n## Development\n\nPure-logic modules (`engine`, `xp`, `cooldowns`, `store`, `format`, `commands`, families)\nare unit-tested with the system `lua`:\n\n```sh\nfor f in tests/*_test.lua; do echo \"== $f ==\"; lua \"$f\" || exit 1; done\n```\n",
      "versions": [
        {
          "version": "0.1.1",
          "published_at": "2026-07-28T16:14:13-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mission-manager/0.1.1/discworld-mission-manager.mallardx",
          "archive_sha256": "b7a229e380b8490bca5f34a41d045f979e2c56d12c786cabf36b1d8b0cbd71bb",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mission-manager/0.1.1/discworld-mission-manager.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mission-manager/0.1.1/plugin.toml",
          "minimum_app_version": "0.11.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.1.0",
          "published_at": "2026-07-11T09:08:46-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mission-manager/0.1.0/discworld-mission-manager.mallardx",
          "archive_sha256": "d2fb78a5de9b92b13bdbff89192138ebeed736e76e81e772637c30cb9c9f4dc3",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mission-manager/0.1.0/discworld-mission-manager.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-mission-manager/0.1.0/plugin.toml",
          "minimum_app_version": "0.11.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.info",
              "char.info.*"
            ],
            "notifications": true,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.mallard.discworld-sailing",
      "name": "Discworld Sailing",
      "description": "A Discworld sailing-mission plugin for opinionated highlights and a stage/xp tracking panel",
      "language": "lua",
      "homepage": "https://github.com/wizardquack/mallardx-discworld-sailing",
      "tags": [
        "discworld"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "Wizard Quack"
      ],
      "panels": [
        {
          "id": "sailing",
          "title": "Sailing"
        }
      ],
      "latest_readme": "# Discworld Sailing\n\nA Discworld sailing-mission plugin with two pieces:\n\n1. **Highlights** — ~40 regex highlights for sea serpents, kraken,\n   fires, ice, helming, rope/hull condition strings, and dragon\n   wrangling.\n2. **Smuggling stat panel** — Tracks mission cooldown, per-leg\n   timers + XP, monster fight time + XP, and the running voyage total\n   in a panel.\n\n## Stat panel\n\nA 1-second timer drives every cell:\n\n- **Cooldown** — counts down 2h after each mission starts; persisted across\n  restarts via `storage`.\n- **Stage** — current weather stage name while sailing.\n- **Leg 1..4 / Monster** — `<name> mm:ss (xp)` per stage; XP fills in when\n  the leg-finished message fires.\n- **Voyage** — total elapsed time + summed XP across all legs.\n\n### Voyage keymap\n\nThe plugin ships a built-in **sailing-numpad** keymap layer (8-direction numpad\nsteering: numpad8/2/4/6 → fore/aft/port/starboard, corners for diagonals).\nIt appears in Settings → Keymaps and can be edited freely — rebind the keys or\nchange the commands to taste; your edits persist.\n\nThe layer is activated at voyage start and deactivated at voyage end\nautomatically. This is controlled by the **Use sailing-numpad keymap during\nvoyages** setting (on by default); turn it off to leave your keymap untouched\nduring voyages.\n\n### Debug aliases\n\n| alias            | effect                                              |\n|------------------|-----------------------------------------------------|\n| `!startMission`  | Force-start the mission state machine.              |\n| `!endMission`    | Force-end (use if a stage trigger missed and the panel is stuck). |\n| `!nextStage <X>` | Force a transition to weather stage `X`.            |\n| `!sailData`      | Dump the current trip stages + XP table via `mud.note`. |\n\n## Credit\n\nThank you to Kiki for the wonderful Smuggler's toolbox plugin, which helped immensely in sorting through the regex this plugin's panel.\n",
      "versions": [
        {
          "version": "0.6.0",
          "published_at": "2026-07-08T11:38:29-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.6.0/discworld-sailing.mallardx",
          "archive_sha256": "e806a5b61bb28f9903ace7682d47bcd5186d45c247bbff46663a325c4e0575f9",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.6.0/discworld-sailing.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.6.0/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.9",
          "published_at": "2026-06-23T11:20:02-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.9/discworld-sailing.mallardx",
          "archive_sha256": "0ad37bf50d894a7a9116ea4ca99ad1bbd4add81aa322eb4a03abfd96f1d2538b",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.9/discworld-sailing.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.9/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.8",
          "published_at": "2026-06-18T19:39:48-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.8/discworld-sailing.mallardx",
          "archive_sha256": "3caa52267f5dd007121858baea19b36db3f619434c067bfdda1b57d2e6e0a798",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.8/discworld-sailing.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.8/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.7",
          "published_at": "2026-06-15T16:08:10-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.7/discworld-sailing.mallardx",
          "archive_sha256": "ad343b57ffb05debe424017a3a6e5132bc22e4151bf94223d298ad4a5373ae7f",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.7/discworld-sailing.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.7/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.6",
          "published_at": "2026-06-09T13:20:38-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.6/discworld-sailing.mallardx",
          "archive_sha256": "40584012e5f9a9cdb6cff64544247b7ae42c5ad54d54175b758e6a9008f5004a",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.6/discworld-sailing.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.6/plugin.toml",
          "minimum_app_version": "0.6.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.3",
          "published_at": "2026-06-07T21:48:38-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.3/discworld-sailing.mallardx",
          "archive_sha256": "deefab8c402c4d7b6750d8e55a9a734da3301863ae26f356339d6b360c06e31d",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.3/discworld-sailing.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.3/plugin.toml",
          "minimum_app_version": "0.6.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.2",
          "published_at": "2026-06-05T08:50:36-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.2/discworld-sailing.mallardx",
          "archive_sha256": "9e38a0401490912396d035785d6484629d83b2c4d4c9640a9079da833923a334",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.2/discworld-sailing.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.2/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.1",
          "published_at": "2026-06-04T07:36:07-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.1/discworld-sailing.mallardx",
          "archive_sha256": "2fadfae3f93315693b6e918b1678b80e27c3830536e8f20437615c83bf41e262",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.1/discworld-sailing.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.1/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.0",
          "published_at": "2026-06-01T10:05:28-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.0/discworld-sailing.mallardx",
          "archive_sha256": "51239d807f3da5fd55111c7b85efaba38a5c3e4083b2a42549deba29e6ddae80",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.0/discworld-sailing.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-sailing/0.5.0/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    },
    {
      "id": "net.mallard.discworld-vitals",
      "name": "Discworld Vitals",
      "description": "A vitals panel for Discworld - XP, XP rate, shields, HP, GP, burden - and a `skills raw` parser for sharing skill state with other plugins",
      "language": "lua",
      "homepage": "https://github.com/wizardquack/mallardx-discworld-vitals",
      "tags": [
        "discworld"
      ],
      "worlds_match": [
        "discworld.starturtle.net:*"
      ],
      "license": "MIT",
      "authors": [
        "Wizard Quack"
      ],
      "panels": [
        {
          "id": "vitals",
          "title": "Vitals"
        }
      ],
      "latest_readme": "# Discworld Vitals\n\nVitals panel for Discworld MUD, with:\n\n- HP / GP / burden bars\n- XP, XP/hr, and XP/hr over time chart\n- realtime shielding indicators (EFF / CCC / BUG / MS / TPA)\n\nAdditionally this plugin provides skill-, stat-, and xp-aware goal\ntracking for your characters. Enter /goals to get started, or /skill\n&lt;skill&gt; to inspect a single skill's level, bonus, and the stats that\nfeed it — add an optional number (e.g. /skill ma.sp.of 550) to see what\nlevel a target bonus needs and what bonus a target level gives, with a\none-click \"add goal\" for either.\n\n## A note on cross-plugin events\n\nThis plugin has an optional dependency on\n[discworld-magic](https://github.com/wizardquack/mallardx-discworld-magic)\nfor receiving shielding event data. If you don't have it, no harm\ndone, but if you, Vitals will automatically subscribe to realtime\nshielding events from the Magic plugin.\n\nVitals also **emits** `net.mallard.discworld.gp.full` (payload\n`{ subject = \"self\", gp, maxgp }`) the moment your GP refills to\nmaximum, so peer plugins can react — e.g. resume casting. It fires once\non each refill to full (edge-triggered on the not-full → full\ntransition), the complement of the inbound\n`net.mallard.discworld.gp.zero` event Vitals subscribes to.\n\n## Credit\n\nMany thanks to Quow and Oki, whose work on similar plugins was\ninvaluable in designing and building this one.\n",
      "versions": [
        {
          "version": "0.11.2",
          "published_at": "2026-08-16T08:56:27-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.11.2/discworld-vitals.mallardx",
          "archive_sha256": "498405ac2ef978285dfd656d8053c33834507797288bb5485e85f9f09f8b6385",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.11.2/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.11.2/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.11.1",
          "published_at": "2026-07-28T16:14:13-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.11.1/discworld-vitals.mallardx",
          "archive_sha256": "520a7aea185029618563f60c8d0b6b2b8936d022c4a13a152fbba045b42f1cc3",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.11.1/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.11.1/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.11.0",
          "published_at": "2026-07-08T11:38:29-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.11.0/discworld-vitals.mallardx",
          "archive_sha256": "6d392916c385c3d83c896d59562a23ce0b790bbbce2c3e4771cd5c72506277d4",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.11.0/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.11.0/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.10.0",
          "published_at": "2026-06-23T11:20:02-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.10.0/discworld-vitals.mallardx",
          "archive_sha256": "fc4605465208b5d30f2dee3a1a17bed6d607a3e08939743bd54265d39f3922d5",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.10.0/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.10.0/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.9.0",
          "published_at": "2026-06-21T08:34:51-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.9.0/discworld-vitals.mallardx",
          "archive_sha256": "7e0f7db9352ccf55320c48feece7932a373d5410221d2effc81e319c806f65fd",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.9.0/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.9.0/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.8.0",
          "published_at": "2026-06-18T19:39:48-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.8.0/discworld-vitals.mallardx",
          "archive_sha256": "b53e19d8aacd9e7b2e21eeef2293f9a65f54c73c9eaeadfbf4a62562c56847b6",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.8.0/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.8.0/plugin.toml",
          "minimum_app_version": "0.10.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.7.1",
          "published_at": "2026-06-15T16:08:10-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.7.1/discworld-vitals.mallardx",
          "archive_sha256": "2c8ed9dc3fe871bbaca35b787cd903c325fb3e42925f4997afd973e2c7a3ace5",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.7.1/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.7.1/plugin.toml",
          "minimum_app_version": "0.9.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.6.1",
          "published_at": "2026-06-12T09:37:20-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.6.1/discworld-vitals.mallardx",
          "archive_sha256": "7b6162a987dd1f7a4a14a98cdbe5659cf2d1eafae755b567f107b5f735961b71",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.6.1/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.6.1/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.6.0",
          "published_at": "2026-06-11T13:30:00-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.6.0/discworld-vitals.mallardx",
          "archive_sha256": "f2ccd25746fcdd1eeb7e0ec773d8e0ffa3eb12a5a3215364e3000e9b2017f39a",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.6.0/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.6.0/plugin.toml",
          "minimum_app_version": "0.8.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.5.0",
          "published_at": "2026-06-10T13:46:35-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.5.0/discworld-vitals.mallardx",
          "archive_sha256": "6754456b4bdd518c740eefa81ddd57a849cf6f63011ca021241855be26fcbdc4",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.5.0/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.5.0/plugin.toml",
          "minimum_app_version": "0.6.0",
          "permissions_summary": {
            "sends": true,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.5",
          "published_at": "2026-06-07T21:48:03-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.5/discworld-vitals.mallardx",
          "archive_sha256": "faaefc9aa049ce3dc027756d05feea33682bc9fe741663c8a25cd4072fe0d8c9",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.5/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.5/plugin.toml",
          "minimum_app_version": "0.6.0",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.4",
          "published_at": "2026-06-05T10:17:32-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.4/discworld-vitals.mallardx",
          "archive_sha256": "fd0957e4412eb4601696b75572641b6214b3acb133599b31b8c6ee7841295940",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.4/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.4/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.3",
          "published_at": "2026-06-05T08:49:53-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.3/discworld-vitals.mallardx",
          "archive_sha256": "fb27705bcec67108e0cf3812b9f5dc79e6a7068f92aeb3d6af62ce53f31d5d88",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.3/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.3/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.2",
          "published_at": "2026-06-04T07:36:07-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.2/discworld-vitals.mallardx",
          "archive_sha256": "04f47244e2c1137b0afe10109e45aa35bca94754b1bfc999f45a83c377703734",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.2/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.2/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        },
        {
          "version": "0.4.1",
          "published_at": "2026-06-01T10:05:33-07:00",
          "archive_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.1/discworld-vitals.mallardx",
          "archive_sha256": "de1933f2bc8308fd4500b2049fb587d02aafb3e6177ada4ddf5ec05936496697",
          "signature_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.1/discworld-vitals.mallardx.minisig",
          "manifest_url": "https://mallard-marketplace.vnsf.xyz/archives/net.mallard.discworld-vitals/0.4.1/plugin.toml",
          "minimum_app_version": "0.0.1",
          "permissions_summary": {
            "sends": false,
            "gmcp_access": [
              "char.vitals",
              "char.info",
              "char.info.*"
            ],
            "notifications": false,
            "keychain": false,
            "network": [],
            "filesystem": [],
            "clipboard": "none",
            "external_app": []
          },
          "withdrawn": false,
          "withdrawn_reason": null
        }
      ]
    }
  ]
}
