{"id":379564,"date":"2026-10-05T08:53:18","date_gmt":"2026-10-05T08:53:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/toytown-map\/"},"modified":"2026-10-05T08:53:05","modified_gmt":"2026-10-05T08:53:05","slug":"toytown-map","status":"publish","type":"plugin","link":"https:\/\/hr.wordpress.org\/plugins\/toytown-map\/","author":23578253,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"7.1.3","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Toytown Map","header_author":"Brian Power","header_description":"Show any village or town as a cartoony 3D toy town, built from OpenStreetMap. A block and a [toytown] shortcode, with 20 skins.","assets_banners_color":"","last_updated":"2026-10-05 08:53:05","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/bpowerie25\/Toytown","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":177,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"imperialresources","date":"2026-10-05 08:53:05","revision":3728447}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":{"toytown\/map":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"toytown\/map","version":"0.1.0","title":"Toytown Map","category":"embed","icon":"location-alt","description":"Any village or town as a cartoony 3D toy town, built from OpenStreetMap.","keywords":["map","3d","town","openstreetmap","toy"],"textdomain":"toytown-map","attributes":{"lat":{"type":"number"},"lng":{"type":"number"},"place":{"type":"string","default":""},"size":{"type":"number","default":1.5},"skin":{"type":"string","default":"default"},"height":{"type":"number","default":480},"zoom":{"type":"number","default":16.2},"pitch":{"type":"number","default":55},"bearing":{"type":"number","default":0},"data":{"type":"string","default":""}},"supports":{"align":["wide","full"],"html":false},"editorScript":"file:.\/edit.js"}},"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The same street in all 20 skins.","2":"The block in the editor: place search, area size and skin."}},"plugin_section":[],"plugin_tags":[783,2909,204827,16164,11955],"plugin_category":[49],"plugin_contributors":[284435],"plugin_business_model":[],"class_list":["post-379564","plugin","type-plugin","status-publish","hentry","plugin_tags-3d","plugin_tags-map","plugin_tags-maplibre","plugin_tags-openstreetmap","plugin_tags-town","plugin_category-maps-and-location","plugin_contributors-imperialresources","plugin_committers-imperialresources"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/toytown-map.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Toytown Map turns OpenStreetMap into a friendly 3D toy town: every building becomes a little toy with a roof and windows, landmarks like churches, pubs and schools get their own low-poly models, and parks, pitches and racecourses are drawn too.<\/p>\n\n<ul>\n<li><strong>Any place in the world.<\/strong> Search for a village or town, pick how big an area to show, and the map is built from OpenStreetMap in the visitor\u2019s browser. No data files, no API keys.<\/li>\n<li><strong>20 skins<\/strong>: Day, Night, Sitcom, Pastel, Toybox, Voxel, Chunky, Retro handheld, Neon, Vintage, Ink sketch, Hand-drawn, Comic, Blueprint, Golden hour, Autumn, Winter, Christmas, Halloween and Shamrock.<\/li>\n<li><strong>A block and a shortcode.<\/strong> The block has a live preview; the shortcode works in any editor.<\/li>\n<li><strong>Light on your pages.<\/strong> Maps load only when they scroll into view, and page scrolling is never trapped: visitors use Ctrl\/\u2318 + scroll (or two fingers) to move the map.<\/li>\n<\/ul>\n\n<p>It\u2019s built on <a href=\"https:\/\/github.com\/bpowerie25\/Toytown\">toytown-gl<\/a>, an open-source MapLibre plugin, and its CC0 model kit.<\/p>\n\n<h4>Shortcode<\/h4>\n\n<pre><code>[toytown lat=\"52.1655\" lng=\"-8.8265\" size=\"1.5\" skin=\"sitcom\" height=\"480\"]\n<\/code><\/pre>\n\n<ul>\n<li><code>lat<\/code>, <code>lng<\/code>: the centre (required).<\/li>\n<li><code>size<\/code>: the area shown, in km across (0.3 to 3.4; default 1.5).<\/li>\n<li><code>skin<\/code>: one of <code>default<\/code>, <code>night<\/code>, <code>sitcom<\/code>, <code>pastel<\/code>, <code>toybox<\/code>, <code>voxel<\/code>, <code>chunky<\/code>, <code>retro<\/code>, <code>neon<\/code>, <code>vintage<\/code>, <code>sketch<\/code>, <code>handdrawn<\/code>, <code>comic<\/code>, <code>blueprint<\/code>, <code>golden<\/code>, <code>autumn<\/code>, <code>winter<\/code>, <code>christmas<\/code>, <code>halloween<\/code>, <code>shamrock<\/code>.<\/li>\n<li><code>height<\/code> (px), <code>zoom<\/code> (13 to 19), <code>pitch<\/code> (tilt, 0 to 70), <code>bearing<\/code> (rotation).<\/li>\n<li><code>data<\/code>: optional URL of a data file made with <code>npx @toytown\/cli build-data<\/code>, for towns bigger than the browser builds.<\/li>\n<\/ul>\n\n<h4>Map data<\/h4>\n\n<p>Map data \u00a9 OpenStreetMap contributors, available under the Open Database Licence. The attribution is shown on every map.<\/p>\n\n<h3>External services<\/h3>\n\n<p>The maps are drawn in your visitors\u2019 browsers, which contact these services directly:<\/p>\n\n<ul>\n<li><strong>OpenFreeMap<\/strong> (https:\/\/openfreemap.org), for the base map tiles. Sent: the map tiles in view. <a href=\"https:\/\/openfreemap.org\/tos\/\">Terms<\/a>.<\/li>\n<li><strong>VersaTiles<\/strong> (https:\/\/versatiles.org), for the map label fonts. Sent: font ranges for the labels in view.<\/li>\n<li><strong>Overpass API<\/strong> (https:\/\/overpass-api.de), for the buildings and places in the chosen area, from OpenStreetMap. Sent: the area\u2019s coordinates. Responses are cached in the visitor\u2019s browser for a week. Not used when a map has a data file. <a href=\"https:\/\/wiki.openstreetmap.org\/wiki\/Overpass_API\">Overpass API<\/a>.<\/li>\n<li><strong>Nominatim<\/strong> (https:\/\/nominatim.openstreetmap.org), in the block editor only, when an editor searches for a place. Sent: the search text. <a href=\"https:\/\/operations.osmfoundation.org\/policies\/nominatim\/\">Usage policy<\/a>, <a href=\"https:\/\/osmfoundation.org\/wiki\/Privacy_Policy\">OSMF privacy policy<\/a>.<\/li>\n<\/ul>\n\n<p>Like any web request, these services see the visitor\u2019s IP address. No cookies are set and nothing is sent to the plugin author.<\/p>\n\n<h3>Source code<\/h3>\n\n<p>The plugin's own PHP, JavaScript and CSS are not minified. The bundled libraries in <code>public\/vendor\/<\/code> are minified builds; their source is:<\/p>\n\n<ul>\n<li><code>toytown-gl.umd.js<\/code>: toytown-gl, https:\/\/github.com\/bpowerie25\/Toytown (<code>packages\/core<\/code>). Rebuild it, and this whole plugin, with <code>pnpm install &amp;&amp; pnpm --filter toytown-gl build &amp;&amp; pnpm --filter @toytown\/wordpress zip<\/code> (see <code>packages\/wordpress\/README.md<\/code>).<\/li>\n<li><code>maplibre-gl*.mjs<\/code>, <code>maplibre-gl.css<\/code>: MapLibre GL JS 6, https:\/\/github.com\/maplibre\/maplibre-gl-js (the unmodified <code>dist\/<\/code> files from the <code>maplibre-gl<\/code> npm package).<\/li>\n<\/ul>\n\n<p>The 3D models in <code>public\/models\/<\/code> are generated by <code>assets\/generator\/generate_models.py<\/code> in the same repository.<\/p>\n\n<h3>Licences<\/h3>\n\n<p>The plugin\u2019s code is MIT. Bundled libraries: toytown-gl (MIT), three.js (MIT), MapLibre GL JS (BSD-3-Clause). The 3D models are CC0.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Add the <strong>Toytown Map<\/strong> block to a page, search for a place and choose a skin. Or use the <code>[toytown]<\/code> shortcode.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20show%20a%20whole%20city%3F\"><h3>Can I show a whole city?<\/h3><\/dt>\n<dd><p>The browser builds areas up to about 12 km\u00b2 (3.4 km across), which covers a village or a town centre. For bigger areas, build a data file with <code>npx @toytown\/cli build-data --bbox west,south,east,north --out town.geojson<\/code>, upload it, and set it as the block\u2019s data file (or <code>data<\/code> in the shortcode).<\/p><\/dd>\n<dt id=\"a%20building%20looks%20wrong%20or%20is%20missing.\"><h3>A building looks wrong or is missing.<\/h3><\/dt>\n<dd><p>Everything comes from OpenStreetMap, so the fix is to improve the map there: https:\/\/www.openstreetmap.org. Changes appear within a day or so (the browser keeps a copy of an area for up to a week).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release: block with place search and live preview, <code>[toytown]<\/code> shortcode, 20 skins, areas built in the browser from OpenStreetMap.<\/li>\n<\/ul>","raw_excerpt":"Show any village or town as a cartoony 3D toy town, built from OpenStreetMap. 20 skins, no API keys.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/379564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=379564"}],"author":[{"embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/imperialresources"}],"wp:attachment":[{"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=379564"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=379564"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=379564"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=379564"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=379564"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=379564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}