In multiplayer Minecraft, coordinating between players, finding free areas for building, and tracking activity across large territories often present challenges. Basic tools offer only local paper maps that do not cover the entire world and do not update in real time. The Dynmap utility solves this problem by creating an interactive map of the game world accessible through a regular web browser. It operates on the principle of geographic information services like Google Maps, displaying detailed terrain, player locations, claimed region borders, and in-game chat messages.

Rendering Engine Operation and Tile Saving

At the core of Dynmap's functionality lies its custom rendering pipeline, which converts three-dimensional Minecraft chunk data into a set of two-dimensional graphic files (tiles).

Rendering Types and Projections

The plugin supports three main world display options:

File Saving and Disk Load

All generated map tiles are saved as standard PNG or JPG images in the plugins/dynmap/web/tiles/ folder. With every block change by players (building, destruction, explosions), Dynmap triggers an incremental update process — only the tiles directly within the updated chunk area are redrawn.

The server's disk subsystem experiences significant load (I/O operations) during the initial world rendering. At high resolutions, the tile folder for a large map can reach tens or even hundreds of gigabytes, which requires fast SSD storage and setting a WorldBorder.

Web Server Infrastructure: Jetty vs Nginx

Dynmap offers two deployment schemes for the web interface, depending on the server scale and expected load.

Built-in Jetty Web Server

By default, after installation, the plugin automatically launches an integrated Jetty web server on port 8123. This option requires no additional configuration: the administrator simply needs to open port 8123 on the hosting provider, after which the map becomes accessible at http://Server_IP:8123/.

Integration with an External Server (Nginx or Apache)

For public servers with high player counts, the built-in Jetty creates additional overhead for the Java game process, as every web user consumes traffic directly through the game server. For optimization, it is recommended to configure tile delivery through an independent Nginx or Apache web server.

In this setup, Nginx is configured to work directly with the web/tiles/ folder, bypassing the Minecraft game engine. This has several key advantages:

Configuration Settings and Rendering Management

The plugin's main parameters are edited in the plugins/dynmap/configuration.txt file.

General Rendering and Saving Settings

ParameterDefault ValueDescription
deftemplatesuffixhiresDefines the default rendering template quality (vlowres — 2 ppb, lowres — 4 ppb, hires — 16 ppb). High resolution significantly increases initial rendering time and file size.
storage.typefiletreeStorage choice for map tiles. Available options: filetree (disk file structure), sqlite (SQLite database), mysql / mariadb / postgres (relational databases), aws_s3 (AWS S3 cloud storage).
renderinterval1Interval (in seconds) for checking and rendering tiles from the update queue.
renderacceleratethreshold60The number of tiles in the update queue after which the rendering interval is accelerated.
renderaccelerateinterval0.2Accelerated rendering interval (in seconds) when the queue exceeds the threshold.
tiles-rendered-at-once2Number of tiles rendered simultaneously (recommended to set to half the number of CPU cores).
usenormalthreadprioritytruePriority for rendering threads. If true, standard priority threads are used (prevents resource starvation on Windows OS).
saverestorependingtrueSaves the queue of pending rendering tasks upon server shutdown or restart.
tileupdatedelay30Delay (in seconds) before rendering modified blocks. Prevents constant tile redrawing due to automated systems (redstone, pistons, etc.).
enabletilehashtrueEnables tile hashing. If a tile image hasn't changed after rendering, the file on disk is not overwritten, saving storage lifecycle.
smooth-lightingtrueCalculates smooth lighting (like in-game) during map generation.
image-formatjpg-q90Format and quality of tile images (default is JPG at 90% quality). Can be changed to png or webp.
use-generated-texturestrueUses game-generated textures (matching the client's texture pack) instead of static ones.
ctm-supporttrueSupport for Connected Texture Mod from resource packs.
custom-colors-supporttrueSupport for custom biome and leaf colors from resource packs.
render-triggers[blockplaced, ...]A list of in-game events (block placement/breaking, tree growth, explosions) that trigger the tile rendering queue.

Web Infrastructure and File Paths

ParameterDefault ValueDescription
tilespathweb/tilesPath within the plugin directory where graphic files (map tiles) will be saved.
webpathwebPath to the static map web files (HTML, JS, CSS).
update-webpath-filestrueAutomatic updating of static files when the plugin starts (set to false when using custom web interfaces).
webserver-port8123The TCP port where the built-in Jetty web server will operate.
disable-webserverfalseDisables the built-in web server (useful when configuring tile delivery via an external Nginx or Apache web server).
max-sessions30Maximum number of concurrent sessions on the built-in web server to conserve resources.
allow-symlinkstrueAllows the web server to follow symbolic links.
login-enabledfalseEnables the user authentication system for viewing the map or communicating in chat.
login-requiredfalseRequires mandatory account login to view the web map.
trusted-proxies[127.0.0.1, ...]A list of trusted proxy servers to correctly determine players' real IP addresses via the X-Forwarded-For header.

Configuring Web Interface Components (Web Chat, Markers, Players)

Parameter / ClassDefault ValueDescription
org.dynmap.InternalClientUpdateComponentComponent classResponsible for transmitting data about player status, chat, and map updates. Note: When using an external web server (Nginx), this class must be changed to org.dynmap.JsonFileClientUpdateComponent.
sendhealthtrueDisplays player health indicators on the map.
sendpositiontrueDisplays the exact location of players on the map.
allowwebchattrueAllows sending messages from the web interface to the in-game Minecraft chat.
webchat-interval5Delay (in seconds) between web chat messages (spam protection).
hideifsneakingfalseHides players from the map if they are sneaking (crouching).
hideifspectatorfalseHides players from the map if they are in spectator mode.
hide-if-invisiblity-potiontrueHides players from the map if they are under the invisibility potion effect.
org.dynmap.MarkersComponentComponent classManages marker layers on the map. Allows displaying spawn (showspawn), player beds (showspawnbeds), and vanilla world borders (showworldborder).
showplayerfacestrueDisplays player faces (skins) on map markers.
showplayerhealthtrueDisplays a health bar directly above the player's icon on the map.

Optimization and CPU Performance Limits (TPS/MSPT)

ParameterDefault ValueDescription
timesliceinterval0.0Interval (in seconds) for pauses during full rendering (fullrender). Increasing this value reduces CPU load spikes.
maxchunkspertick200Maximum number of chunks Dynmap can load into memory in one game tick (1/20 of a second). Decreasing this parameter reduces server lag.
per-tick-time-limit50Target time limit per tick for the rendering thread (in milliseconds).
update-min-tps18.0If the server's TPS drops below this value, Dynmap automatically pauses rendering of regular tile updates.
fullrender-min-tps18.0If the server's TPS drops below this value, Dynmap pauses full world rendering (fullrender / radiusrender).
zoomout-min-tps18.0The minimum TPS at which calculating zoomed-out map levels is permitted.
snapshotcachesize500Number of chunks in the landscape snapshot cache.
soft-ref-cachetrueUsage of Soft References for the chunk cache. Allows the JVM to clear the map cache if there is a threat of an OutOfMemory error.

Optimization Parameters in configuration.txt

To preserve server performance, pay attention to the following configuration file variables:

Render Management Commands

Map generation is controlled through the server console by a level 4 operator:

Conclusion

The Dynmap plugin is a powerful tool for world visualization and improving player interaction on large Minecraft servers. Thanks to isometric 3D rendering and web interface integration, it transforms the map into a full-fledged information portal for the project.

Compared to alternatives like BlueMap (which uses heavy WebGL for full 3D viewing) or Squaremap (which offers an exclusively fast 2D map without volumetric models), Dynmap provides an optimal balance of functionality. However, high disk space requirements and constant I/O load demand careful attention from administrators regarding world limits and the correct choice of resolution. The plugin is an excellent choice for large survival servers, anarchy, or RP worlds.