{
  "version": 1,
  "generated_at": "2026-07-13T09:11:23-07:00",
  "plugins": [
    {
      "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 or whitespace: `skp, taa, score`\n- Use a pipe to list synonyms for one entry: `skp|skillpoints`\n- Only letters, digits, `_`, `-`, and `|` are allowed inside an entry\n- If you re-declare a built-in command (e.g. `skills`), your entry replaces it\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.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": "03122c63437f31c79b0b256467fc2cb55b0caa754358ab575a4e46684bfacf99",
          "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": "0ae09b157564122c82ef1dec55d4e91009d59c43360b9882fa768fff33ce1fc8",
          "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": "62f8484b042ce9ec6092b7265cb0e24bc86d5b2156a2cf387a032104c99d6eb8",
          "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": "8c87080af4b685dad64f07231e52fc697d02bce2f19a2934573aee1fcd8a6968",
          "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": "585934218610a17d1875bd4497aca48e85db39da9cc19a4bc77cedc8e06d687d",
          "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": "a1bbf40fa34c0e5afa2c681900076a67bb9a27d54db32f25e4f49b37fbb8b9ee",
          "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": "4aa08c57c866d8b858fa8a2bf89ec3c008bc474a16e5bfea2bbd2a456ac1a1cf",
          "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": "aeed35c44c70765bb970ee1eedddc3aa5dcf95092b6971d8e2396f6b02f53dbe",
          "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": "74dfd9fec71ede6eb6adedaf397d049d743963a39817d09f24c1505809fb31b1",
          "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- 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.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": "86602d3c841884dcec938554758c8c9690df76278e974553834a2afaaa0efde6",
          "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": "2217802fcb65377c122da4b5b6fe7783331917fb4e66eac7a92d3f3b1a23f389",
          "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": "b4e234365544a0fca4229f026da080ea836e334324d257b75ace95843fffcf53",
          "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": "16abc174192c03291cd239fd0a511812b0dfdab633c6a59c4a5db904998fca71",
          "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": "e8cdff73e42c781757bf4ae8280588bea15be5d71446bce9a973d9bcb2b54a2a",
          "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": "079d38e44a9d599f5866b7fe505d166f187779ed6d35421af9b28b3d71412a94",
          "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": "f472c7aac6f353c2654b9dfb9bc89ff795e9fb82a7a4dca4d97c2be5469bad69",
          "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": "bfc298c4b296e57dfc5b219753ff04c692bb0ee572c5ac03476c943c1a1d083e",
          "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": "005ca865b53690066f70c61aa1461ae246c335d8646490c18fc5d9ed71e3d9d5",
          "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": "3c80650da999867c69ca2b33e247db5f64b7357de161eea98d7e9c51f1c3767b",
          "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---\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 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   # Lua tables only; no 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",
      "versions": [
        {
          "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": "45874798a609ea9b059b0b638897acc0d074e900c95248c98865472aac6a92c8",
          "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": "1e023c04974423f953be86b2381a78e50c749b39790a820e579451ae64397c30",
          "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": "37f069243eebc1bfd53705af288a43b5b963dd80146fbd8b0b0873d981d9142e",
          "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": "3664a2fb706b449234b97204f34af030eb2c5bfe5a03fdf7fb7113b0015aab8d",
          "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": "c640599b4747f524bd5a9cf445cfea91d54a111b2753ab60dc14ef190a193829",
          "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": "e7b9bc75cd7f3c3e81b162ba7242b3c11cae37cbd872eb8af02be748bf52317f",
          "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": "94830962586ba84a4be2f2bcdcee9593cff2198fa7147b0328bfcfc95b8211ba",
          "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": "8f4189a23b486d71b85076e7b91fdb9f51c134493a6c4062fcefcae7dcf1a3f7",
          "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": "f2176f002e507de47c7f53691b42e7636aafaa69ddac255fa17b77777af6a049",
          "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": "000ba45d6b85b41e2a39e422a65a0392e5516c153d7553a8def1f62b147d641f",
          "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": "55e9e4d2a403de53a285c9a440456e32ebdc58bad30151f719218c4e27d8ff11",
          "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": "638cfb8b7f91b26774ccd57360c665f212334dc6c476d90d06f6dd69b5b911e0",
          "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": "80e2882f7fbb555f13baf5be5c517a1c9aacd0f96bb29dd1dede5332fa3f857a",
          "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": "8a456b432c82f432ad2fe14d9464468d8b4d79b6de46533d2e2b31f47c5c3cba",
          "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": "7b2dcdbdf96fd05611ad3e7f9b4023a95c428bdfa6a8cebcab022d5ead1ac6b7",
          "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": "09c9692850844b4bdd06df53ca882ad05856f6d8a4fb14c869eff36512f65334",
          "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": "961b71510b0a15bf63f03c56b900ac45732ad466ce5daa56be9187c53913e1bd",
          "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": "5f69331a48c5e8da655f1153b6f34482244c672b5f02a3b00d875d2c9efc585c",
          "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": "f85e4c21be4351d6eb420f5fe63663e4b45326f5fc1611e1066d3a8d7952bdf2",
          "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": "2e7699ad7ded756117fa86ce0680c9cd25d795fd94828048f6e2024c93ac7473",
          "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": "8483be130cc07cc57f3e8c73bae11b3d94e18cc9731441991e398378437cc50b",
          "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": "c7a568a20236caafb1bbb60bfb3dd77c2d30edce4e54fba5437aa7cb2187ea24",
          "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": "c5236ee09d0139772f52002589a7b606850da28441a2adf4e0cf7472ca33797b",
          "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": "9dfd8c7f87dfb68af032cdb663083e097eaad5e59e1f25e358dcf756d53994df",
          "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": "9693dfad5634705b747e1b91a64af7c4c0c8170604c74dc9150f4c951e523525",
          "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.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": "717cf4bacf463f14603ddbf9bc406a04c774980816672413db1efa65d5cc8a16",
          "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": "d6b5eaee2e8bd5d466e3cfe92bd25607c21ce53254c4db18552adebc5598ef0d",
          "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": "a03fb0247ccbb68258301296c0f6a26ea96b9196e9be212b38a0e09bcd51e486",
          "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": "32d7488c13f30ac6a2c9e91a66d523fd7d539e5bfe9b6fbe53ff1de93e851b4f",
          "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": "e89a6eabf9de0a8fa349423b400ed86057a643e7ecf5017fe6843cae3a80df65",
          "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": "e2ad4a57f012dbd173d2b53b9eb94acf31c8b4126c33b778c64a8fb37ed99cb1",
          "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": "5e565c254f2ff6f54985d51a4db9b49af1e29fbeb27e859b8b031b9d3db23eec",
          "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": "de32b5c4c0779149e92fd8a31d6b7f6c8f3d1a047be233a7564c113b595f5711",
          "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": "d2e3597f6d29642c41703bdd91d99ff7cd1c77f5f7adacac01edd967d479dcb1",
          "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": "bc1c24874cd3cc3c9b9a3b25b4db642b98657fe0a68f18e1428aa19a9befb3da",
          "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## 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.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": "adee5f0fa418bc5aee6fb5911e06a72600038676fa1debf5be2d74f1a144408f",
          "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": "736ad28e5604ad21300f2ffc41812dda9ac07e115a7bd9a2b4d239d9f870533d",
          "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": "ae4adbd47ca3716cf03a3b59e4d19b54d11795bdf277e534ec59d75bfd7aa053",
          "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": "e54b3d3c1f90ecb935b17d31e657d72650764f0a2cf81e61e789ced97d261916",
          "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": "fcdfff2d2348812ab53cebe398fca9571b2a63d42a40f0cf704b02ac52c0658b",
          "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": "40c56a41417781f31c554687745e43ab555a1fcbe354cf4072ea3e461e83971c",
          "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": "04b45637943c78d9c083098a1b6fe0f27c6459e17917c51e40e8f66b59281a66",
          "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": "17944ef41ef365fe5f9fa4688993751da2fbd78487fc2135d578a1e2dcfa82fb",
          "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": "a11160ff88ecf7360fbd7c044005ff0e537dfbece411ece43ad5666085f165a0",
          "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": "5e27c003fe61064132f8767197781cfcb7dd846c42104c2f05fcd557665f475c",
          "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": "45ae7f25bb7f71dc26b2037395a99b7b5057105af08dca83a95fb5d403578990",
          "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": "d449eab1196450ba3eacdc95c11d4f6827735045190b0acd8683c7e39d48964d",
          "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": "cc51a70c7bfb019836199140124d48f45217ca9748a303124572899e0a414206",
          "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": "b0f04030797d433f1a35a28b2f7cad217d49d4638725d438acf789812679a3ac",
          "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"
        }
      ],
      "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## 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\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.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": "7299db4cf125a102c10d8b205028b1a38bee1b4debb26af6bae876d261d59723",
          "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": "9d4f4ee4e05bee1038df3fa86c599f710fa48c60c2cb03c1bde64393f4cd43a8",
          "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": "d35dc2879cabb8d2e51293c1e23844d5863e126156c271068b201a5cc1acd30b",
          "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": "06b34467370463e4f4dd35b65f285d0f2584433036ce78f9ab9ef99fcca9c281",
          "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": "fa3d27ecdf2d3c07940230e6dd8f048a993f49db0e86e2be1a2b77cc6588edbc",
          "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.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": "c3a5f02886f327db34f57789216ebe74f8598d23ac07f4651a26589357971894",
          "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": "54155e945bd86a813637873a469a7c56ad81089f6335cb797d4c858261cbb10b",
          "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": "0002e0d25c2b96571fd7b7d1853c3a02f7e9c30990346a6bb6df27d2a0ca8a4b",
          "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": "5c80aeb0a8c65e8a44e1f7be3d4d4a0b3742dc2a7b43701d0edc7b1265339321",
          "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": "a89d0874716abc3ca8499670f0a0fca0da4d1b57f05ca86a8e0b074ba0dc8cb6",
          "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": "19f9d708d3bbafa4d7d9644ad399e1994f7988f53adc98aa516def046835197d",
          "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": "7b5d332f2cbe81e7d7f7498d288c42f68c79236357b242bb42ff2f0943f8b7fa",
          "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": "24e947ca3583cc37aa99da917ef0bc87474d93add7257e5fb10a347fc189c29a",
          "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": "9b7c6e8105953e8de659f7d5910f6072b261dae8ee0642503bd82d25d396c019",
          "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.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": "75a1f81b61968f6d0f963aa0800b2eab29511f62db195fa108e8da1e5221e317",
          "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": "fd1e111438228b171be42fbd35f9dc240d70404c2f373fbb3caf3607506ec8ef",
          "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": "e9b59076fc3e7309163f46fb045fdf9d0f658316d9767c55844a599694c0d544",
          "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": "58f6cf229a412f5b394eda20f24dc81629006b39deaac9f856d8a5e2c0e0a3fc",
          "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": "23830d70d1e089ee59286b16c61f1df0bb4c0ea788cadc825400eef9fd781a57",
          "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": "a88e7b8f3848e7b86ac85f7a41399cab96281a5a5403f20e703effd2d1c00eef",
          "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": "02a7f184457e1296b85890f2f3b721f6628cc4ac04463109d5f598510a63c68e",
          "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": "7c54520afaaf97310748683a2b6d215263e91558d992f79d488fc3fd117efa3a",
          "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": "bb2917d38cdfdf0e09432e5be73c72228c0f71521dfbc57f301381916d527d2b",
          "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": "0c43675daea8d23a86a5481d14471b9bf4d4632757eadd570bab9be5c5a9f4ba",
          "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.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": "a31b5c81f693b28a1dceed2b0de99373e7810a07e37aeb857de3ac9de64355d1",
          "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": "fece0e8fea0780a49ce402dbce61de2e127f6c1d08f28643e67da015b95ac4cf",
          "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": "93c2084eeb890726775975034ffa3935bf484975ded263f765176949534321be",
          "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": "05e3c673236c51abbf1df0613367b83e2adb5d7b56ea25edc72a72d6c1073f3c",
          "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": "7f45ac01f95c9406b263d199e94fabff878546e4dc4ed2eb965ee868fbb9108a",
          "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": "0a6936e0c6b1b9b8e28466d8030587711ddb04be36aeb478014a373d15a4bce9",
          "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": "bd73e0f9158ca2896a0957fb5ac5dad3a3e062544be4dd33d0f43c8669545d1b",
          "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": "0596dcd99fc31bf70b2959ea87ba5809d7da2c7479321494153d2ade8f68729a",
          "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": "cff87fbcf4a0dc6e0cc48389bb19ea9ea6d57c1b10f7b1873b22846cec72caa9",
          "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": "42d2ac7d32d33ab6d7778c59696566bb3b74cd3622f2c03bc50bf6533d59fb36",
          "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": "b0cc3a6992b10e058fc31f1e7b03b3ded83953eb6dc5af47d840fefde985eda8",
          "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": "0540dc62df68c881a80cd13903f9fb1578505c4860b02e5a12a16f9de2af16fb",
          "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": "a45cef26311936d76185d2389b2f9c55920b4f7b5b0083bdec20188f204972ab",
          "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
        }
      ]
    }
  ]
}
