npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mudlet-map-browser-script

v1.3.0

Published

A browser front-end for exploring [Mudlet](https://www.mudlet.org/) maps. It wraps [`mudlet-map-renderer`](https://www.npmjs.com/package/mudlet-map-renderer) and wires it up to a full interactive UI — area navigation, room search, path finding, image expo

Readme

Mudlet Map Browser Script

A browser front-end for exploring Mudlet maps. It wraps mudlet-map-renderer and wires it up to a full interactive UI — area navigation, room search, path finding, image export, multiple visual styles, and more — so a Mudlet map export can be browsed from any web page.

A working deployment is available at https://delwing.github.io/arkadia-mapa/.

Capabilities

  • Area & level navigation — area dropdown (sorted by name), per-level (z-index) buttons, with a dropdown fallback for areas with more than 10 levels.
  • Room inspection — click any room to see its id, name, environment, coordinates, hash, normal and special exits (with cross-area links), custom Mudlet user data, and NPCs present in the room.
  • Search — find rooms by id (single or comma-separated list) or by NPC name with autocomplete; matching rooms are centered and highlighted.
  • Path finding — Dijkstra shortest path between two rooms; multiple paths can be drawn at once, each with its own editable color, and removed individually.
  • Image export — download the current area as PNG or SVG, or copy a PNG straight to the clipboard.
  • Render modes — switch the visual style of the map: normal, pencil (sketchy), parchment, parchment-pencil, isometric (with adjustable rotation), isometric-parchment, blueprint, neon, and gradient.
  • Customizable settings — background/line colors, room size and shape, line width, label rendering, area names, area-exit labels, and more. Settings persist in localStorage and are migrated forward across versions.
  • Minimap preview — a low-res overlay of the current area with a live viewport indicator that tracks zoom and pan.
  • Keyboard shortcutsF1 help, Ctrl+F search, Ctrl+S save image, +/- zoom, and numpad keys (19, *, /) to step through exits from the selected room.
  • Internationalization — built-in Polish/English translation, switchable from the UI and persisted between visits.
  • Theme selector — pick any Bootswatch theme plus a dark-mode toggle, persisted in localStorage.
  • Version switcher — load older map versions from GitHub release tags and view their release notes without leaving the page.
  • Deep links — open the page on a specific room (?loc=), area (?area=), or map version (?version=).

Usage

The script is published to npm and is consumed in the browser as a bundled IIFE (dist/index.min.js) plus a companion stylesheet (dist/index.min.css). The easiest way to include them is via a CDN such as jsDelivr:

<!-- Latest version -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/mudlet-map-browser-script/dist/index.min.css" />
<script src="https://cdn.jsdelivr.net/npm/mudlet-map-browser-script/dist/index.min.js"></script>

<!-- Pinned version -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/index.min.css" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/index.min.js"></script>

Or install it from npm to bundle yourself:

npm install mudlet-map-browser-script
# or
yarn add mudlet-map-browser-script

Map data source

Point the script at a map via window.MAP_CONFIG. There are three ways to supply it, checked in this order:

| Config | Source | | --------------------------- | ------------------------------------------------------------------------------------------------------- | | mapUrl | A Mudlet binary map (.dat) — decoded in-browser via mudlet-map-binary-readeror a combined { mapData, colors } JSON file (extension decides). | | mapDataUrl + colorsUrl | The renderer export served as two JSON arrays (the .json equivalent of the old mapExport.js / colors.js). | | legacy globals | mapData / colors defined on window before the script runs. Deprecated — kept for back-compat; prefer mapUrl. |

Loading a .dat directly is the simplest setup — no export step, and the binary is smaller than the generated JS. Requires mudlet-map-binary-reader ≥ 1.0.1 (bundled into dist/index.min.js).

Required page structure

The script is a self-contained React application that renders the entire UI itself. The host page only needs a mount point (a #root element is used if present, otherwise one is created and appended to <body>) and a configured map source:

<link rel="stylesheet" href="index.min.css" />
<div id="root"></div>
<script>
  window.MAP_CONFIG = { mapUrl: "data/map.dat" }; // a .dat (decoded in-browser) or a .json export
</script>
<script src="index.min.js"></script>

All styling (Bootstrap, the app's own CSS, and the flag sprite) ships in dist/index.min.css — the host needs no other stylesheet. The Polish and English UI translations are bundled too, so no i18n files are required; you can override strings or add languages via MAP_CONFIG (below). The only host-provided asset is the favicon.

Host configuration

The page is configured through a window.MAP_CONFIG global, set before the script runs:

<script>
  window.MAP_CONFIG = {
    // Map data — a .dat (decoded in-browser) or a .json export. See "Map data source" above.
    mapUrl: "data/map.dat",
    // ...or two JSON arrays instead: mapDataUrl: "data/mapExport.json", colorsUrl: "data/colors.json",

    // Optional endpoints — no defaults; omit one and its feature turns off:
    npcUrl: "...",          // makes NPCs searchable; unset → only room-id search
    versionsTagsUrl: "...", // version selector in the Help modal; unset → hidden
    versionsFilesUrl: "...",// fetches a selected version's map (%tag% substituted)

    // Branding — no defaults are baked into the bundle:
    title: { pl: "Mapa Arkadii", en: "Arkadia Map" }, // string, or per-language map
    logo: "images/logo.png",                           // URL/path to a logo image; omit for no logo
    credits: {                                          // Help-modal footer; omit to hide entirely
      author: "Dargoth",
      githubUrl: "https://github.com/Delwing/mudlet-map-reader",
      remark: { pl: "...", en: "..." },                 // string or per-language map; may contain inline HTML
    },

    // Translations — Polish + English are bundled; override or extend here:
    translations: { en: { search: "Find" }, de: { search: "Suchen", settings: "Einstellungen" } },
    languages: [{ code: "pl" }, { code: "en", flag: "gb" }, { code: "de" }], // picker entries + flag sprite
  };
</script>
<script src="index.min.js"></script>

title, logo, and credits carry no defaults — the bundle is brand-neutral, and any of them that you omit simply isn't shown (the header title falls back to the bundled title string). The bundled Polish/English strings work out of the box; translations merges on top of them (tweak a string or add a whole language) and languages controls the picker. See demo/index.html for a complete example.

URL parameters

| Parameter | Effect | | ---------- | --------------------------------------------------- | | ?loc=ID | Open centered on room ID and select it. | | ?area=ID | Open on area ID. | | ?version=TAG | Load the map version published under release TAG. |

Development

yarn install     # install dependencies
yarn dev         # run the demo (Vite dev server) — see below
yarn build       # produce dist/index.min.js (+ source map)
yarn typecheck   # run the TypeScript compiler with --noEmit

yarn dev serves the demo from the demo/ directory (Vite's dev root) — demo/index.html is the minimal host shell (a #root mount point, MAP_CONFIG.mapUrl pointing at a Mudlet .dat, and the app). It decodes the real Arkadia .dat in-browser and loads the favicon from the live deployment, so you can develop against production-like data with no extra setup. It doubles as the reference for how a host page wires the bundle in (the only difference in production is a <script src="index.min.js"> tag instead of the dev module).

The project is written in TypeScript + React and bundled with Vite into a single minified IIFE (see vite.config.ts); React is bundled in, so the host page needs no CDN script. Source modules of note:

  • src/main.tsx — the bundle entry point; mounts the React app into #root.
  • src/MapApp.tsx — top-level component; instantiates the controller and lays out the UI.
  • src/map/MapController.ts — framework-agnostic controller wrapping mudlet-map-renderer (areas, rooms, paths, settings, render modes, image export) and emitting state to React.
  • src/components/ — the UI (header, toolbar, modals, info box, minimap, paths, zoom, toasts).
  • src/i18n/ — translation provider; bundled Polish + English dictionaries, overridable via config.
  • src/preview.ts — the minimap preview overlay (driven imperatively by the controller).
  • src/data/npc.ts — NPC data loading; src/versions.ts — GitHub release tags / map versions.

Bootstrap's modals, dropdowns, and toasts are driven through its data-bs-* data API (Bootstrap's JS is imported for its side effects in src/main.tsx).

Publishing

Pushing a *.*.* tag triggers the Publish to npm GitHub Action, which builds the bundle and runs npm publish --provenance --access public. The published package only ships the dist/ folder.

License

MIT