Bukkit Configuration

Aurora Lahtela edited this page Mar 7, 2026 · 39 revisions

Plan Header

Game Server Configuration

This page is about the Bukkit/Sponge/Nukkit/Fabricconfig.yml file and the various settings it provides.
For Bungee see Bungee Configuration

Page version: 5.7 build 3247

Configuring with environment variables

You can configure Plan using environment variables. This can be useful for those running servers in docker environments.

Examples:

  • Server.ServerName -> PLAN_SERVER_SERVERNAME
  • Database.MySQL.Password -> PLAN_DATABASE_MYSQL_PASSWORD
  • ServerInfoFile.yml is also supported, eg. PLAN_SERVER_ID, PLAN_SERVER_UUID to have specific servers keep their identity if your server destroys all files on shutdown.
  • With string lists variable needs to be format "- One\n- Two" where \n is newline

Settings by Section

Server
SettingDefaultDescription
ServerNamePlanName of the server, displayed on the page and used to access the page of the server on networks.
Plugin.Logging
SettingDefaultDescription
Localedefault2 letter Locale code, see Localization. default for English. write-all to write all locales' files
Create_new_locale_file_on_next_enablefalseWrites a new locale.txt file to the plugin folder on enable.
Log_untranslated_locale_keysfalseLogs keys that have default value in the currently in-use locale to console. This is to help translators update files.
DevfalseEnables development error logging as well as other debug messages, such as request matching
Delete_logs_after_days7Number of days after which log files are removed
Plugin (Other)
SettingDefaultDescription
Update_notifications.Check_for_updatestrueEnables Plan update check
Update_notifications.Notify_about_DEV_releasesfalseShould update notifications include DEV releases
Configuration.Allow_proxy_to_manage_settingstrueShould server config file on Bungee/Velocity apply changes to this server's config.
Database
SettingDefaultDescription
TypeH2'MySQL', 'H2' or 'SQLite'
MySQL.Hostlocalhost
MySQL.Port3306
MySQL.UserrootUser for editing the database
MySQL.PasswordminecraftPassword of MySQL.User
MySQL.DatabasePlanName of the Database to use
MySQL.Launch_options?rewriteBatchedStatements=trueLaunch options to use
MySQL.Max_Lifetime25 MINUTESHow long HikariCP will keep connection in the pool. Reduce this if you are getting connection timeout errors.
Webserver
SettingDefaultDescription
Port8804Port of the Webserver
Alternative_IP.EnabledfalseShould an alternate address be used for the WebServer links
Alternative_IP.Addressyour.domain.here:%port%Address to use as link in inspect and analyze commands if setting above is enabled. %port% will be replaced with the Port automatically. If you have port-forwarded an alternate address to the webserver port, %port% is not required.
Internal_IP0.0.0.0Internal InetAddress to start the WebServer on. 0.0.0.0 manages the Internal IP automatically. No need to change unless running in Docker.
Public_html_directory"public_html"Html Customization feature that allows hosting any files on the Plan webserver.
Cache.Reduced_refresh_barrier15 SECONDSPrevents constant json updates with this threshold
Cache.Invalidate_query_results_on_disk_after7 DAYSHow long to store query page results so that they can be shared
Cache.Invalidate_disk_cache_after2 DAYSHow long to store json for the panel data, note that old panel data is deleted when new one is cached.
Cache.Invalidate_memory_cache_after5 MINUTESHow long to store json for the panel data in memory, same as above applies.
Security.SSL_certificateView the tutorial on setting up a SSL Certificate
Security.Disable_authenticationfalseDisables login if HTTPS is enabled.
Security.Disable_registrationfalseDisables user registration page if HTTPS is enabled.
Security.Access_log.Print_to_consolefalsePrint any incoming request to the console log.
Security.Access_log.Remove_logs_after_days30How long access log is kept in the Plan database.
Security.CORS.Allow_origin'"*"'Allows other sites to fetch JSON from Plan webserver.
Security.Use_X-Forwarded-For_HeaderfalseAllows you to use whitelist with reverse-proxy
Security.Cookies_expire_after2 HOURSDetermine time after login-cookies expire
Security.IP_whitelist.EnabledfalseEnables or disables the IP whitelist for the webserver
Security.IP_whitelist.WhitelistlocahostList of IP addresses to allow accessing the webserver. Supports wildcards, cidr and dynamic dns (see comment above the setting)
Disable_WebserverfalseDisables the WebServer. This is for External WebServer Use
External_Webserver_addresshttps://www.example.addressAddress to give to users when Plan WebServer is disabled.
Data_gathering
SettingDefaultDescription
GeolocationstrueEnable Geolocation gathering
Accept_GeoLite2_EULAfalseAllow downloading GeoLite2 Database (Better for geolocation)
Geolocation_Download_URL"https://geodb.playeranalytics.net/GeoLite2-Country.mmdb"Maxmind Geolite2-Country database download location.
PingtrueEnable ping gathering
Disk_spacetrueEnable free disk space gathering
Commands.Log_unknownfalseLog commands that are not registered, e.g. /bremobmreb (Currenly not in use)
Commands.Log_aliases_as_main_commandtrueCombines command aliases to the main command, e.g. /i to /give (Currenly not in use)
Join_addresses.EnabledtrueEnable/Disable join address gathering
Join_addresses.Preserve_casefalseCase sensitive join address storage
Join_addresses.Preserve_invalidfalseKeep non IP address or DNS domain join addresses
Join_addresses.Filter_out_from_data- play.example.comHide specific addresses from data (e.g. if cloudflare hidden IP is gathered)
Time.Delays
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Ping_server_enable_delay300 (SECONDS)Delay from server start before Ping is started to be gathered.
Ping_player_join_delay30 (SECONDS)Delay from player login before Ping is started to be gathered.
Wait_for_DB_Transactions_on_disable20 (SECONDS)Maximum time to wait until unfinished transactions are executed when database closes.
Time.Thresholds
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
AFK_threshold3 (MINUTES)Idle time before Plan considers a player afk
Activity_index.Playtime_threshold30 (MINUTES)Playtime/Week to be considered Active by Activity Index
Remove_inactive_player_data_after180 (DAYS)How many days player has to not log in to be removed from the database
Remove_time_series_data_after3650 (DAYS)How many days Players online & Performance data is stored
Remove_ping_data_after14 (DAYS)How many days Ping data is stored
Remove_disabled_extension_data_after2 (DAYS)How many days data of disabled Extensions in stored
Time.Periodic_tasks
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Check_DB_for_server_config_files_every1 (MINUTES)How often database is checked for updated config file
Extension_server_data_refresh_every1 (HOURS)How often server data for DataExtensions is updated
Extension_player_data_refresh_every15 (MINUTES)How often player data for DataExtensions is updated
Clean_Database_every1 (HOURS)How often database is cleaned of old data.
Display_options
SettingDefaultDescription
ThemedefaultSee Themes for more details about this setting
Player_head_image_url"https://crafatar.com/avatars/${playerUUID}?size=120&default=MHF_Steve&overlay"Change service for player head images
Sessions.Show_on_page50How many sessions are visible on a page
Sessions.Order_world_pies_by_percentagefalseBy Default WorldPie is ordered alphabetically, colors are still determined alphabetically.
Players_table.Show_on_server_page2500How many players are visible on /server page Players tab
Players_table.Show_on_players_page25000How many players are visible on /players page
Open_player_links_in_new_tabfalseFeature switch for old behavior of player links
Graphs.Show_gaps_in_datafalseDisplays data gaps in line graphs (Might increase page load time)
Graphs.TPS18 & 10Thresholds for TPS graph colors
Graphs.Disk_space500 & 100Thresholds for Disk graph colors
Command_colors&2, &7, &fColor codes to use for command messages
Formatting
SettingDefaultDescription
Decimal_points'#.##'How many decimal points should be displayed
Time_amountTime amounts are formatted by replacing the placeholders of these settings. More below.
DatesDates are formatted with SimpleDateFormat patterns
Dates.TimeZoneserverChange time zone used for the web pages, accepts format 'GMT+2' or 'GMT-04:30', 'server' or 'UTC'
Dates.Show_recent_day_namestrueThe day in dates is replaced by 'Today', 'Yesterday', 'Friday' for the few most recent days.
Formatting.Time_amount Examples

Default:

TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12h 30m 20s
400 days1 year, 1 month, 5d
12 hours 20 sec.12h 20s
0 sec.0s

Extra Zeros

Time_amount:
Year: '1 year, '
Years: '%years% years, '
Month: '1 month, '
Months: '%months% months, '
Day: '1d '
Days: '%days%d '
Hours: '%zero%%hours%:'
Minutes: '%hours%%zero%%minutes%:'
Seconds: '%minutes%%zero%%seconds%'
Zero: '00:00:00'
TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12:30:20
400 days1 year, 1 month, 5d
12 hours 20 sec.12:00:20
30 minutes00:30:00
20 sec.00:00:20
0 sec.00:00:00
World_aliases
  • World_aliases.List List of Worlds and the aliases used in graph generation. You can lump worlds together by setting their alias as the same value.
  • World_aliases.Regex List of regexes "Alias for world:^abc$" that replace any matching world names with the alias on the left side of : You can use https://regex101.com/ for testing regexes. Any matching worlds will not be added to .List again after they're removed.
Export
Plugins
  • If you have third party plugins installed, their analysis settings will be displayed here.
Customized_files

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Bukkit Configuration

Aurora Lahtela edited this page Mar 7, 2026 · 39 revisions

Plan Header

Game Server Configuration

This page is about the Bukkit/Sponge/Nukkit/Fabricconfig.yml file and the various settings it provides.
For Bungee see Bungee Configuration

Page version: 5.7 build 3247

Configuring with environment variables

You can configure Plan using environment variables. This can be useful for those running servers in docker environments.

Examples:

  • Server.ServerName -> PLAN_SERVER_SERVERNAME
  • Database.MySQL.Password -> PLAN_DATABASE_MYSQL_PASSWORD
  • ServerInfoFile.yml is also supported, eg. PLAN_SERVER_ID, PLAN_SERVER_UUID to have specific servers keep their identity if your server destroys all files on shutdown.
  • With string lists variable needs to be format "- One\n- Two" where \n is newline

Settings by Section

Server
SettingDefaultDescription
ServerNamePlanName of the server, displayed on the page and used to access the page of the server on networks.
Plugin.Logging
SettingDefaultDescription
Localedefault2 letter Locale code, see Localization. default for English. write-all to write all locales' files
Create_new_locale_file_on_next_enablefalseWrites a new locale.txt file to the plugin folder on enable.
Log_untranslated_locale_keysfalseLogs keys that have default value in the currently in-use locale to console. This is to help translators update files.
DevfalseEnables development error logging as well as other debug messages, such as request matching
Delete_logs_after_days7Number of days after which log files are removed
Plugin (Other)
SettingDefaultDescription
Update_notifications.Check_for_updatestrueEnables Plan update check
Update_notifications.Notify_about_DEV_releasesfalseShould update notifications include DEV releases
Configuration.Allow_proxy_to_manage_settingstrueShould server config file on Bungee/Velocity apply changes to this server's config.
Database
SettingDefaultDescription
TypeH2'MySQL', 'H2' or 'SQLite'
MySQL.Hostlocalhost
MySQL.Port3306
MySQL.UserrootUser for editing the database
MySQL.PasswordminecraftPassword of MySQL.User
MySQL.DatabasePlanName of the Database to use
MySQL.Launch_options?rewriteBatchedStatements=trueLaunch options to use
MySQL.Max_Lifetime25 MINUTESHow long HikariCP will keep connection in the pool. Reduce this if you are getting connection timeout errors.
Webserver
SettingDefaultDescription
Port8804Port of the Webserver
Alternative_IP.EnabledfalseShould an alternate address be used for the WebServer links
Alternative_IP.Addressyour.domain.here:%port%Address to use as link in inspect and analyze commands if setting above is enabled. %port% will be replaced with the Port automatically. If you have port-forwarded an alternate address to the webserver port, %port% is not required.
Internal_IP0.0.0.0Internal InetAddress to start the WebServer on. 0.0.0.0 manages the Internal IP automatically. No need to change unless running in Docker.
Public_html_directory"public_html"Html Customization feature that allows hosting any files on the Plan webserver.
Cache.Reduced_refresh_barrier15 SECONDSPrevents constant json updates with this threshold
Cache.Invalidate_query_results_on_disk_after7 DAYSHow long to store query page results so that they can be shared
Cache.Invalidate_disk_cache_after2 DAYSHow long to store json for the panel data, note that old panel data is deleted when new one is cached.
Cache.Invalidate_memory_cache_after5 MINUTESHow long to store json for the panel data in memory, same as above applies.
Security.SSL_certificateView the tutorial on setting up a SSL Certificate
Security.Disable_authenticationfalseDisables login if HTTPS is enabled.
Security.Disable_registrationfalseDisables user registration page if HTTPS is enabled.
Security.Access_log.Print_to_consolefalsePrint any incoming request to the console log.
Security.Access_log.Remove_logs_after_days30How long access log is kept in the Plan database.
Security.CORS.Allow_origin'"*"'Allows other sites to fetch JSON from Plan webserver.
Security.Use_X-Forwarded-For_HeaderfalseAllows you to use whitelist with reverse-proxy
Security.Cookies_expire_after2 HOURSDetermine time after login-cookies expire
Security.IP_whitelist.EnabledfalseEnables or disables the IP whitelist for the webserver
Security.IP_whitelist.WhitelistlocahostList of IP addresses to allow accessing the webserver. Supports wildcards, cidr and dynamic dns (see comment above the setting)
Disable_WebserverfalseDisables the WebServer. This is for External WebServer Use
External_Webserver_addresshttps://www.example.addressAddress to give to users when Plan WebServer is disabled.
Data_gathering
SettingDefaultDescription
GeolocationstrueEnable Geolocation gathering
Accept_GeoLite2_EULAfalseAllow downloading GeoLite2 Database (Better for geolocation)
Geolocation_Download_URL"https://geodb.playeranalytics.net/GeoLite2-Country.mmdb"Maxmind Geolite2-Country database download location.
PingtrueEnable ping gathering
Disk_spacetrueEnable free disk space gathering
Commands.Log_unknownfalseLog commands that are not registered, e.g. /bremobmreb (Currenly not in use)
Commands.Log_aliases_as_main_commandtrueCombines command aliases to the main command, e.g. /i to /give (Currenly not in use)
Join_addresses.EnabledtrueEnable/Disable join address gathering
Join_addresses.Preserve_casefalseCase sensitive join address storage
Join_addresses.Preserve_invalidfalseKeep non IP address or DNS domain join addresses
Join_addresses.Filter_out_from_data- play.example.comHide specific addresses from data (e.g. if cloudflare hidden IP is gathered)
Time.Delays
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Ping_server_enable_delay300 (SECONDS)Delay from server start before Ping is started to be gathered.
Ping_player_join_delay30 (SECONDS)Delay from player login before Ping is started to be gathered.
Wait_for_DB_Transactions_on_disable20 (SECONDS)Maximum time to wait until unfinished transactions are executed when database closes.
Time.Thresholds
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
AFK_threshold3 (MINUTES)Idle time before Plan considers a player afk
Activity_index.Playtime_threshold30 (MINUTES)Playtime/Week to be considered Active by Activity Index
Remove_inactive_player_data_after180 (DAYS)How many days player has to not log in to be removed from the database
Remove_time_series_data_after3650 (DAYS)How many days Players online & Performance data is stored
Remove_ping_data_after14 (DAYS)How many days Ping data is stored
Remove_disabled_extension_data_after2 (DAYS)How many days data of disabled Extensions in stored
Time.Periodic_tasks
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Check_DB_for_server_config_files_every1 (MINUTES)How often database is checked for updated config file
Extension_server_data_refresh_every1 (HOURS)How often server data for DataExtensions is updated
Extension_player_data_refresh_every15 (MINUTES)How often player data for DataExtensions is updated
Clean_Database_every1 (HOURS)How often database is cleaned of old data.
Display_options
SettingDefaultDescription
ThemedefaultSee Themes for more details about this setting
Player_head_image_url"https://crafatar.com/avatars/${playerUUID}?size=120&default=MHF_Steve&overlay"Change service for player head images
Sessions.Show_on_page50How many sessions are visible on a page
Sessions.Order_world_pies_by_percentagefalseBy Default WorldPie is ordered alphabetically, colors are still determined alphabetically.
Players_table.Show_on_server_page2500How many players are visible on /server page Players tab
Players_table.Show_on_players_page25000How many players are visible on /players page
Open_player_links_in_new_tabfalseFeature switch for old behavior of player links
Graphs.Show_gaps_in_datafalseDisplays data gaps in line graphs (Might increase page load time)
Graphs.TPS18 & 10Thresholds for TPS graph colors
Graphs.Disk_space500 & 100Thresholds for Disk graph colors
Command_colors&2, &7, &fColor codes to use for command messages
Formatting
SettingDefaultDescription
Decimal_points'#.##'How many decimal points should be displayed
Time_amountTime amounts are formatted by replacing the placeholders of these settings. More below.
DatesDates are formatted with SimpleDateFormat patterns
Dates.TimeZoneserverChange time zone used for the web pages, accepts format 'GMT+2' or 'GMT-04:30', 'server' or 'UTC'
Dates.Show_recent_day_namestrueThe day in dates is replaced by 'Today', 'Yesterday', 'Friday' for the few most recent days.
Formatting.Time_amount Examples

Default:

TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12h 30m 20s
400 days1 year, 1 month, 5d
12 hours 20 sec.12h 20s
0 sec.0s

Extra Zeros

Time_amount:
Year: '1 year, '
Years: '%years% years, '
Month: '1 month, '
Months: '%months% months, '
Day: '1d '
Days: '%days%d '
Hours: '%zero%%hours%:'
Minutes: '%hours%%zero%%minutes%:'
Seconds: '%minutes%%zero%%seconds%'
Zero: '00:00:00'
TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12:30:20
400 days1 year, 1 month, 5d
12 hours 20 sec.12:00:20
30 minutes00:30:00
20 sec.00:00:20
0 sec.00:00:00
World_aliases
  • World_aliases.List List of Worlds and the aliases used in graph generation. You can lump worlds together by setting their alias as the same value.
  • World_aliases.Regex List of regexes "Alias for world:^abc$" that replace any matching world names with the alias on the left side of : You can use https://regex101.com/ for testing regexes. Any matching worlds will not be added to .List again after they're removed.
Export
Plugins
  • If you have third party plugins installed, their analysis settings will be displayed here.
Customized_files

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Bukkit Configuration

Aurora Lahtela edited this page Mar 7, 2026 · 39 revisions

Plan Header

Game Server Configuration

This page is about the Bukkit/Sponge/Nukkit/Fabricconfig.yml file and the various settings it provides.
For Bungee see Bungee Configuration

Page version: 5.7 build 3247

Configuring with environment variables

You can configure Plan using environment variables. This can be useful for those running servers in docker environments.

Examples:

  • Server.ServerName -> PLAN_SERVER_SERVERNAME
  • Database.MySQL.Password -> PLAN_DATABASE_MYSQL_PASSWORD
  • ServerInfoFile.yml is also supported, eg. PLAN_SERVER_ID, PLAN_SERVER_UUID to have specific servers keep their identity if your server destroys all files on shutdown.
  • With string lists variable needs to be format "- One\n- Two" where \n is newline

Settings by Section

Server
SettingDefaultDescription
ServerNamePlanName of the server, displayed on the page and used to access the page of the server on networks.
Plugin.Logging
SettingDefaultDescription
Localedefault2 letter Locale code, see Localization. default for English. write-all to write all locales' files
Create_new_locale_file_on_next_enablefalseWrites a new locale.txt file to the plugin folder on enable.
Log_untranslated_locale_keysfalseLogs keys that have default value in the currently in-use locale to console. This is to help translators update files.
DevfalseEnables development error logging as well as other debug messages, such as request matching
Delete_logs_after_days7Number of days after which log files are removed
Plugin (Other)
SettingDefaultDescription
Update_notifications.Check_for_updatestrueEnables Plan update check
Update_notifications.Notify_about_DEV_releasesfalseShould update notifications include DEV releases
Configuration.Allow_proxy_to_manage_settingstrueShould server config file on Bungee/Velocity apply changes to this server's config.
Database
SettingDefaultDescription
TypeH2'MySQL', 'H2' or 'SQLite'
MySQL.Hostlocalhost
MySQL.Port3306
MySQL.UserrootUser for editing the database
MySQL.PasswordminecraftPassword of MySQL.User
MySQL.DatabasePlanName of the Database to use
MySQL.Launch_options?rewriteBatchedStatements=trueLaunch options to use
MySQL.Max_Lifetime25 MINUTESHow long HikariCP will keep connection in the pool. Reduce this if you are getting connection timeout errors.
Webserver
SettingDefaultDescription
Port8804Port of the Webserver
Alternative_IP.EnabledfalseShould an alternate address be used for the WebServer links
Alternative_IP.Addressyour.domain.here:%port%Address to use as link in inspect and analyze commands if setting above is enabled. %port% will be replaced with the Port automatically. If you have port-forwarded an alternate address to the webserver port, %port% is not required.
Internal_IP0.0.0.0Internal InetAddress to start the WebServer on. 0.0.0.0 manages the Internal IP automatically. No need to change unless running in Docker.
Public_html_directory"public_html"Html Customization feature that allows hosting any files on the Plan webserver.
Cache.Reduced_refresh_barrier15 SECONDSPrevents constant json updates with this threshold
Cache.Invalidate_query_results_on_disk_after7 DAYSHow long to store query page results so that they can be shared
Cache.Invalidate_disk_cache_after2 DAYSHow long to store json for the panel data, note that old panel data is deleted when new one is cached.
Cache.Invalidate_memory_cache_after5 MINUTESHow long to store json for the panel data in memory, same as above applies.
Security.SSL_certificateView the tutorial on setting up a SSL Certificate
Security.Disable_authenticationfalseDisables login if HTTPS is enabled.
Security.Disable_registrationfalseDisables user registration page if HTTPS is enabled.
Security.Access_log.Print_to_consolefalsePrint any incoming request to the console log.
Security.Access_log.Remove_logs_after_days30How long access log is kept in the Plan database.
Security.CORS.Allow_origin'"*"'Allows other sites to fetch JSON from Plan webserver.
Security.Use_X-Forwarded-For_HeaderfalseAllows you to use whitelist with reverse-proxy
Security.Cookies_expire_after2 HOURSDetermine time after login-cookies expire
Security.IP_whitelist.EnabledfalseEnables or disables the IP whitelist for the webserver
Security.IP_whitelist.WhitelistlocahostList of IP addresses to allow accessing the webserver. Supports wildcards, cidr and dynamic dns (see comment above the setting)
Disable_WebserverfalseDisables the WebServer. This is for External WebServer Use
External_Webserver_addresshttps://www.example.addressAddress to give to users when Plan WebServer is disabled.
Data_gathering
SettingDefaultDescription
GeolocationstrueEnable Geolocation gathering
Accept_GeoLite2_EULAfalseAllow downloading GeoLite2 Database (Better for geolocation)
Geolocation_Download_URL"https://geodb.playeranalytics.net/GeoLite2-Country.mmdb"Maxmind Geolite2-Country database download location.
PingtrueEnable ping gathering
Disk_spacetrueEnable free disk space gathering
Commands.Log_unknownfalseLog commands that are not registered, e.g. /bremobmreb (Currenly not in use)
Commands.Log_aliases_as_main_commandtrueCombines command aliases to the main command, e.g. /i to /give (Currenly not in use)
Join_addresses.EnabledtrueEnable/Disable join address gathering
Join_addresses.Preserve_casefalseCase sensitive join address storage
Join_addresses.Preserve_invalidfalseKeep non IP address or DNS domain join addresses
Join_addresses.Filter_out_from_data- play.example.comHide specific addresses from data (e.g. if cloudflare hidden IP is gathered)
Time.Delays
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Ping_server_enable_delay300 (SECONDS)Delay from server start before Ping is started to be gathered.
Ping_player_join_delay30 (SECONDS)Delay from player login before Ping is started to be gathered.
Wait_for_DB_Transactions_on_disable20 (SECONDS)Maximum time to wait until unfinished transactions are executed when database closes.
Time.Thresholds
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
AFK_threshold3 (MINUTES)Idle time before Plan considers a player afk
Activity_index.Playtime_threshold30 (MINUTES)Playtime/Week to be considered Active by Activity Index
Remove_inactive_player_data_after180 (DAYS)How many days player has to not log in to be removed from the database
Remove_time_series_data_after3650 (DAYS)How many days Players online & Performance data is stored
Remove_ping_data_after14 (DAYS)How many days Ping data is stored
Remove_disabled_extension_data_after2 (DAYS)How many days data of disabled Extensions in stored
Time.Periodic_tasks
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Check_DB_for_server_config_files_every1 (MINUTES)How often database is checked for updated config file
Extension_server_data_refresh_every1 (HOURS)How often server data for DataExtensions is updated
Extension_player_data_refresh_every15 (MINUTES)How often player data for DataExtensions is updated
Clean_Database_every1 (HOURS)How often database is cleaned of old data.
Display_options
SettingDefaultDescription
ThemedefaultSee Themes for more details about this setting
Player_head_image_url"https://crafatar.com/avatars/${playerUUID}?size=120&default=MHF_Steve&overlay"Change service for player head images
Sessions.Show_on_page50How many sessions are visible on a page
Sessions.Order_world_pies_by_percentagefalseBy Default WorldPie is ordered alphabetically, colors are still determined alphabetically.
Players_table.Show_on_server_page2500How many players are visible on /server page Players tab
Players_table.Show_on_players_page25000How many players are visible on /players page
Open_player_links_in_new_tabfalseFeature switch for old behavior of player links
Graphs.Show_gaps_in_datafalseDisplays data gaps in line graphs (Might increase page load time)
Graphs.TPS18 & 10Thresholds for TPS graph colors
Graphs.Disk_space500 & 100Thresholds for Disk graph colors
Command_colors&2, &7, &fColor codes to use for command messages
Formatting
SettingDefaultDescription
Decimal_points'#.##'How many decimal points should be displayed
Time_amountTime amounts are formatted by replacing the placeholders of these settings. More below.
DatesDates are formatted with SimpleDateFormat patterns
Dates.TimeZoneserverChange time zone used for the web pages, accepts format 'GMT+2' or 'GMT-04:30', 'server' or 'UTC'
Dates.Show_recent_day_namestrueThe day in dates is replaced by 'Today', 'Yesterday', 'Friday' for the few most recent days.
Formatting.Time_amount Examples

Default:

TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12h 30m 20s
400 days1 year, 1 month, 5d
12 hours 20 sec.12h 20s
0 sec.0s

Extra Zeros

Time_amount:
Year: '1 year, '
Years: '%years% years, '
Month: '1 month, '
Months: '%months% months, '
Day: '1d '
Days: '%days%d '
Hours: '%zero%%hours%:'
Minutes: '%hours%%zero%%minutes%:'
Seconds: '%minutes%%zero%%seconds%'
Zero: '00:00:00'
TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12:30:20
400 days1 year, 1 month, 5d
12 hours 20 sec.12:00:20
30 minutes00:30:00
20 sec.00:00:20
0 sec.00:00:00
World_aliases
  • World_aliases.List List of Worlds and the aliases used in graph generation. You can lump worlds together by setting their alias as the same value.
  • World_aliases.Regex List of regexes "Alias for world:^abc$" that replace any matching world names with the alias on the left side of : You can use https://regex101.com/ for testing regexes. Any matching worlds will not be added to .List again after they're removed.
Export
Plugins
  • If you have third party plugins installed, their analysis settings will be displayed here.
Customized_files

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Bukkit Configuration

Aurora Lahtela edited this page Mar 7, 2026 · 39 revisions

Plan Header

Game Server Configuration

This page is about the Bukkit/Sponge/Nukkit/Fabricconfig.yml file and the various settings it provides.
For Bungee see Bungee Configuration

Page version: 5.7 build 3247

Configuring with environment variables

You can configure Plan using environment variables. This can be useful for those running servers in docker environments.

Examples:

  • Server.ServerName -> PLAN_SERVER_SERVERNAME
  • Database.MySQL.Password -> PLAN_DATABASE_MYSQL_PASSWORD
  • ServerInfoFile.yml is also supported, eg. PLAN_SERVER_ID, PLAN_SERVER_UUID to have specific servers keep their identity if your server destroys all files on shutdown.
  • With string lists variable needs to be format "- One\n- Two" where \n is newline

Settings by Section

Server
SettingDefaultDescription
ServerNamePlanName of the server, displayed on the page and used to access the page of the server on networks.
Plugin.Logging
SettingDefaultDescription
Localedefault2 letter Locale code, see Localization. default for English. write-all to write all locales' files
Create_new_locale_file_on_next_enablefalseWrites a new locale.txt file to the plugin folder on enable.
Log_untranslated_locale_keysfalseLogs keys that have default value in the currently in-use locale to console. This is to help translators update files.
DevfalseEnables development error logging as well as other debug messages, such as request matching
Delete_logs_after_days7Number of days after which log files are removed
Plugin (Other)
SettingDefaultDescription
Update_notifications.Check_for_updatestrueEnables Plan update check
Update_notifications.Notify_about_DEV_releasesfalseShould update notifications include DEV releases
Configuration.Allow_proxy_to_manage_settingstrueShould server config file on Bungee/Velocity apply changes to this server's config.
Database
SettingDefaultDescription
TypeH2'MySQL', 'H2' or 'SQLite'
MySQL.Hostlocalhost
MySQL.Port3306
MySQL.UserrootUser for editing the database
MySQL.PasswordminecraftPassword of MySQL.User
MySQL.DatabasePlanName of the Database to use
MySQL.Launch_options?rewriteBatchedStatements=trueLaunch options to use
MySQL.Max_Lifetime25 MINUTESHow long HikariCP will keep connection in the pool. Reduce this if you are getting connection timeout errors.
Webserver
SettingDefaultDescription
Port8804Port of the Webserver
Alternative_IP.EnabledfalseShould an alternate address be used for the WebServer links
Alternative_IP.Addressyour.domain.here:%port%Address to use as link in inspect and analyze commands if setting above is enabled. %port% will be replaced with the Port automatically. If you have port-forwarded an alternate address to the webserver port, %port% is not required.
Internal_IP0.0.0.0Internal InetAddress to start the WebServer on. 0.0.0.0 manages the Internal IP automatically. No need to change unless running in Docker.
Public_html_directory"public_html"Html Customization feature that allows hosting any files on the Plan webserver.
Cache.Reduced_refresh_barrier15 SECONDSPrevents constant json updates with this threshold
Cache.Invalidate_query_results_on_disk_after7 DAYSHow long to store query page results so that they can be shared
Cache.Invalidate_disk_cache_after2 DAYSHow long to store json for the panel data, note that old panel data is deleted when new one is cached.
Cache.Invalidate_memory_cache_after5 MINUTESHow long to store json for the panel data in memory, same as above applies.
Security.SSL_certificateView the tutorial on setting up a SSL Certificate
Security.Disable_authenticationfalseDisables login if HTTPS is enabled.
Security.Disable_registrationfalseDisables user registration page if HTTPS is enabled.
Security.Access_log.Print_to_consolefalsePrint any incoming request to the console log.
Security.Access_log.Remove_logs_after_days30How long access log is kept in the Plan database.
Security.CORS.Allow_origin'"*"'Allows other sites to fetch JSON from Plan webserver.
Security.Use_X-Forwarded-For_HeaderfalseAllows you to use whitelist with reverse-proxy
Security.Cookies_expire_after2 HOURSDetermine time after login-cookies expire
Security.IP_whitelist.EnabledfalseEnables or disables the IP whitelist for the webserver
Security.IP_whitelist.WhitelistlocahostList of IP addresses to allow accessing the webserver. Supports wildcards, cidr and dynamic dns (see comment above the setting)
Disable_WebserverfalseDisables the WebServer. This is for External WebServer Use
External_Webserver_addresshttps://www.example.addressAddress to give to users when Plan WebServer is disabled.
Data_gathering
SettingDefaultDescription
GeolocationstrueEnable Geolocation gathering
Accept_GeoLite2_EULAfalseAllow downloading GeoLite2 Database (Better for geolocation)
Geolocation_Download_URL"https://geodb.playeranalytics.net/GeoLite2-Country.mmdb"Maxmind Geolite2-Country database download location.
PingtrueEnable ping gathering
Disk_spacetrueEnable free disk space gathering
Commands.Log_unknownfalseLog commands that are not registered, e.g. /bremobmreb (Currenly not in use)
Commands.Log_aliases_as_main_commandtrueCombines command aliases to the main command, e.g. /i to /give (Currenly not in use)
Join_addresses.EnabledtrueEnable/Disable join address gathering
Join_addresses.Preserve_casefalseCase sensitive join address storage
Join_addresses.Preserve_invalidfalseKeep non IP address or DNS domain join addresses
Join_addresses.Filter_out_from_data- play.example.comHide specific addresses from data (e.g. if cloudflare hidden IP is gathered)
Time.Delays
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Ping_server_enable_delay300 (SECONDS)Delay from server start before Ping is started to be gathered.
Ping_player_join_delay30 (SECONDS)Delay from player login before Ping is started to be gathered.
Wait_for_DB_Transactions_on_disable20 (SECONDS)Maximum time to wait until unfinished transactions are executed when database closes.
Time.Thresholds
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
AFK_threshold3 (MINUTES)Idle time before Plan considers a player afk
Activity_index.Playtime_threshold30 (MINUTES)Playtime/Week to be considered Active by Activity Index
Remove_inactive_player_data_after180 (DAYS)How many days player has to not log in to be removed from the database
Remove_time_series_data_after3650 (DAYS)How many days Players online & Performance data is stored
Remove_ping_data_after14 (DAYS)How many days Ping data is stored
Remove_disabled_extension_data_after2 (DAYS)How many days data of disabled Extensions in stored
Time.Periodic_tasks
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Check_DB_for_server_config_files_every1 (MINUTES)How often database is checked for updated config file
Extension_server_data_refresh_every1 (HOURS)How often server data for DataExtensions is updated
Extension_player_data_refresh_every15 (MINUTES)How often player data for DataExtensions is updated
Clean_Database_every1 (HOURS)How often database is cleaned of old data.
Display_options
SettingDefaultDescription
ThemedefaultSee Themes for more details about this setting
Player_head_image_url"https://crafatar.com/avatars/${playerUUID}?size=120&default=MHF_Steve&overlay"Change service for player head images
Sessions.Show_on_page50How many sessions are visible on a page
Sessions.Order_world_pies_by_percentagefalseBy Default WorldPie is ordered alphabetically, colors are still determined alphabetically.
Players_table.Show_on_server_page2500How many players are visible on /server page Players tab
Players_table.Show_on_players_page25000How many players are visible on /players page
Open_player_links_in_new_tabfalseFeature switch for old behavior of player links
Graphs.Show_gaps_in_datafalseDisplays data gaps in line graphs (Might increase page load time)
Graphs.TPS18 & 10Thresholds for TPS graph colors
Graphs.Disk_space500 & 100Thresholds for Disk graph colors
Command_colors&2, &7, &fColor codes to use for command messages
Formatting
SettingDefaultDescription
Decimal_points'#.##'How many decimal points should be displayed
Time_amountTime amounts are formatted by replacing the placeholders of these settings. More below.
DatesDates are formatted with SimpleDateFormat patterns
Dates.TimeZoneserverChange time zone used for the web pages, accepts format 'GMT+2' or 'GMT-04:30', 'server' or 'UTC'
Dates.Show_recent_day_namestrueThe day in dates is replaced by 'Today', 'Yesterday', 'Friday' for the few most recent days.
Formatting.Time_amount Examples

Default:

TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12h 30m 20s
400 days1 year, 1 month, 5d
12 hours 20 sec.12h 20s
0 sec.0s

Extra Zeros

Time_amount:
Year: '1 year, '
Years: '%years% years, '
Month: '1 month, '
Months: '%months% months, '
Day: '1d '
Days: '%days%d '
Hours: '%zero%%hours%:'
Minutes: '%hours%%zero%%minutes%:'
Seconds: '%minutes%%zero%%seconds%'
Zero: '00:00:00'
TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12:30:20
400 days1 year, 1 month, 5d
12 hours 20 sec.12:00:20
30 minutes00:30:00
20 sec.00:00:20
0 sec.00:00:00
World_aliases
  • World_aliases.List List of Worlds and the aliases used in graph generation. You can lump worlds together by setting their alias as the same value.
  • World_aliases.Regex List of regexes "Alias for world:^abc$" that replace any matching world names with the alias on the left side of : You can use https://regex101.com/ for testing regexes. Any matching worlds will not be added to .List again after they're removed.
Export
Plugins
  • If you have third party plugins installed, their analysis settings will be displayed here.
Customized_files

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Bukkit Configuration

Aurora Lahtela edited this page Mar 7, 2026 · 39 revisions

Plan Header

Game Server Configuration

This page is about the Bukkit/Sponge/Nukkit/Fabricconfig.yml file and the various settings it provides.
For Bungee see Bungee Configuration

Page version: 5.7 build 3247

Configuring with environment variables

You can configure Plan using environment variables. This can be useful for those running servers in docker environments.

Examples:

  • Server.ServerName -> PLAN_SERVER_SERVERNAME
  • Database.MySQL.Password -> PLAN_DATABASE_MYSQL_PASSWORD
  • ServerInfoFile.yml is also supported, eg. PLAN_SERVER_ID, PLAN_SERVER_UUID to have specific servers keep their identity if your server destroys all files on shutdown.
  • With string lists variable needs to be format "- One\n- Two" where \n is newline

Settings by Section

Server
SettingDefaultDescription
ServerNamePlanName of the server, displayed on the page and used to access the page of the server on networks.
Plugin.Logging
SettingDefaultDescription
Localedefault2 letter Locale code, see Localization. default for English. write-all to write all locales' files
Create_new_locale_file_on_next_enablefalseWrites a new locale.txt file to the plugin folder on enable.
Log_untranslated_locale_keysfalseLogs keys that have default value in the currently in-use locale to console. This is to help translators update files.
DevfalseEnables development error logging as well as other debug messages, such as request matching
Delete_logs_after_days7Number of days after which log files are removed
Plugin (Other)
SettingDefaultDescription
Update_notifications.Check_for_updatestrueEnables Plan update check
Update_notifications.Notify_about_DEV_releasesfalseShould update notifications include DEV releases
Configuration.Allow_proxy_to_manage_settingstrueShould server config file on Bungee/Velocity apply changes to this server's config.
Database
SettingDefaultDescription
TypeH2'MySQL', 'H2' or 'SQLite'
MySQL.Hostlocalhost
MySQL.Port3306
MySQL.UserrootUser for editing the database
MySQL.PasswordminecraftPassword of MySQL.User
MySQL.DatabasePlanName of the Database to use
MySQL.Launch_options?rewriteBatchedStatements=trueLaunch options to use
MySQL.Max_Lifetime25 MINUTESHow long HikariCP will keep connection in the pool. Reduce this if you are getting connection timeout errors.
Webserver
SettingDefaultDescription
Port8804Port of the Webserver
Alternative_IP.EnabledfalseShould an alternate address be used for the WebServer links
Alternative_IP.Addressyour.domain.here:%port%Address to use as link in inspect and analyze commands if setting above is enabled. %port% will be replaced with the Port automatically. If you have port-forwarded an alternate address to the webserver port, %port% is not required.
Internal_IP0.0.0.0Internal InetAddress to start the WebServer on. 0.0.0.0 manages the Internal IP automatically. No need to change unless running in Docker.
Public_html_directory"public_html"Html Customization feature that allows hosting any files on the Plan webserver.
Cache.Reduced_refresh_barrier15 SECONDSPrevents constant json updates with this threshold
Cache.Invalidate_query_results_on_disk_after7 DAYSHow long to store query page results so that they can be shared
Cache.Invalidate_disk_cache_after2 DAYSHow long to store json for the panel data, note that old panel data is deleted when new one is cached.
Cache.Invalidate_memory_cache_after5 MINUTESHow long to store json for the panel data in memory, same as above applies.
Security.SSL_certificateView the tutorial on setting up a SSL Certificate
Security.Disable_authenticationfalseDisables login if HTTPS is enabled.
Security.Disable_registrationfalseDisables user registration page if HTTPS is enabled.
Security.Access_log.Print_to_consolefalsePrint any incoming request to the console log.
Security.Access_log.Remove_logs_after_days30How long access log is kept in the Plan database.
Security.CORS.Allow_origin'"*"'Allows other sites to fetch JSON from Plan webserver.
Security.Use_X-Forwarded-For_HeaderfalseAllows you to use whitelist with reverse-proxy
Security.Cookies_expire_after2 HOURSDetermine time after login-cookies expire
Security.IP_whitelist.EnabledfalseEnables or disables the IP whitelist for the webserver
Security.IP_whitelist.WhitelistlocahostList of IP addresses to allow accessing the webserver. Supports wildcards, cidr and dynamic dns (see comment above the setting)
Disable_WebserverfalseDisables the WebServer. This is for External WebServer Use
External_Webserver_addresshttps://www.example.addressAddress to give to users when Plan WebServer is disabled.
Data_gathering
SettingDefaultDescription
GeolocationstrueEnable Geolocation gathering
Accept_GeoLite2_EULAfalseAllow downloading GeoLite2 Database (Better for geolocation)
Geolocation_Download_URL"https://geodb.playeranalytics.net/GeoLite2-Country.mmdb"Maxmind Geolite2-Country database download location.
PingtrueEnable ping gathering
Disk_spacetrueEnable free disk space gathering
Commands.Log_unknownfalseLog commands that are not registered, e.g. /bremobmreb (Currenly not in use)
Commands.Log_aliases_as_main_commandtrueCombines command aliases to the main command, e.g. /i to /give (Currenly not in use)
Join_addresses.EnabledtrueEnable/Disable join address gathering
Join_addresses.Preserve_casefalseCase sensitive join address storage
Join_addresses.Preserve_invalidfalseKeep non IP address or DNS domain join addresses
Join_addresses.Filter_out_from_data- play.example.comHide specific addresses from data (e.g. if cloudflare hidden IP is gathered)
Time.Delays
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Ping_server_enable_delay300 (SECONDS)Delay from server start before Ping is started to be gathered.
Ping_player_join_delay30 (SECONDS)Delay from player login before Ping is started to be gathered.
Wait_for_DB_Transactions_on_disable20 (SECONDS)Maximum time to wait until unfinished transactions are executed when database closes.
Time.Thresholds
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
AFK_threshold3 (MINUTES)Idle time before Plan considers a player afk
Activity_index.Playtime_threshold30 (MINUTES)Playtime/Week to be considered Active by Activity Index
Remove_inactive_player_data_after180 (DAYS)How many days player has to not log in to be removed from the database
Remove_time_series_data_after3650 (DAYS)How many days Players online & Performance data is stored
Remove_ping_data_after14 (DAYS)How many days Ping data is stored
Remove_disabled_extension_data_after2 (DAYS)How many days data of disabled Extensions in stored
Time.Periodic_tasks
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Check_DB_for_server_config_files_every1 (MINUTES)How often database is checked for updated config file
Extension_server_data_refresh_every1 (HOURS)How often server data for DataExtensions is updated
Extension_player_data_refresh_every15 (MINUTES)How often player data for DataExtensions is updated
Clean_Database_every1 (HOURS)How often database is cleaned of old data.
Display_options
SettingDefaultDescription
ThemedefaultSee Themes for more details about this setting
Player_head_image_url"https://crafatar.com/avatars/${playerUUID}?size=120&default=MHF_Steve&overlay"Change service for player head images
Sessions.Show_on_page50How many sessions are visible on a page
Sessions.Order_world_pies_by_percentagefalseBy Default WorldPie is ordered alphabetically, colors are still determined alphabetically.
Players_table.Show_on_server_page2500How many players are visible on /server page Players tab
Players_table.Show_on_players_page25000How many players are visible on /players page
Open_player_links_in_new_tabfalseFeature switch for old behavior of player links
Graphs.Show_gaps_in_datafalseDisplays data gaps in line graphs (Might increase page load time)
Graphs.TPS18 & 10Thresholds for TPS graph colors
Graphs.Disk_space500 & 100Thresholds for Disk graph colors
Command_colors&2, &7, &fColor codes to use for command messages
Formatting
SettingDefaultDescription
Decimal_points'#.##'How many decimal points should be displayed
Time_amountTime amounts are formatted by replacing the placeholders of these settings. More below.
DatesDates are formatted with SimpleDateFormat patterns
Dates.TimeZoneserverChange time zone used for the web pages, accepts format 'GMT+2' or 'GMT-04:30', 'server' or 'UTC'
Dates.Show_recent_day_namestrueThe day in dates is replaced by 'Today', 'Yesterday', 'Friday' for the few most recent days.
Formatting.Time_amount Examples

Default:

TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12h 30m 20s
400 days1 year, 1 month, 5d
12 hours 20 sec.12h 20s
0 sec.0s

Extra Zeros

Time_amount:
Year: '1 year, '
Years: '%years% years, '
Month: '1 month, '
Months: '%months% months, '
Day: '1d '
Days: '%days%d '
Hours: '%zero%%hours%:'
Minutes: '%hours%%zero%%minutes%:'
Seconds: '%minutes%%zero%%seconds%'
Zero: '00:00:00'
TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12:30:20
400 days1 year, 1 month, 5d
12 hours 20 sec.12:00:20
30 minutes00:30:00
20 sec.00:00:20
0 sec.00:00:00
World_aliases
  • World_aliases.List List of Worlds and the aliases used in graph generation. You can lump worlds together by setting their alias as the same value.
  • World_aliases.Regex List of regexes "Alias for world:^abc$" that replace any matching world names with the alias on the left side of : You can use https://regex101.com/ for testing regexes. Any matching worlds will not be added to .List again after they're removed.
Export
Plugins
  • If you have third party plugins installed, their analysis settings will be displayed here.
Customized_files

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Bukkit Configuration

Aurora Lahtela edited this page Mar 7, 2026 · 39 revisions

Plan Header

Game Server Configuration

This page is about the Bukkit/Sponge/Nukkit/Fabricconfig.yml file and the various settings it provides.
For Bungee see Bungee Configuration

Page version: 5.7 build 3247

Configuring with environment variables

You can configure Plan using environment variables. This can be useful for those running servers in docker environments.

Examples:

  • Server.ServerName -> PLAN_SERVER_SERVERNAME
  • Database.MySQL.Password -> PLAN_DATABASE_MYSQL_PASSWORD
  • ServerInfoFile.yml is also supported, eg. PLAN_SERVER_ID, PLAN_SERVER_UUID to have specific servers keep their identity if your server destroys all files on shutdown.
  • With string lists variable needs to be format "- One\n- Two" where \n is newline

Settings by Section

Server
SettingDefaultDescription
ServerNamePlanName of the server, displayed on the page and used to access the page of the server on networks.
Plugin.Logging
SettingDefaultDescription
Localedefault2 letter Locale code, see Localization. default for English. write-all to write all locales' files
Create_new_locale_file_on_next_enablefalseWrites a new locale.txt file to the plugin folder on enable.
Log_untranslated_locale_keysfalseLogs keys that have default value in the currently in-use locale to console. This is to help translators update files.
DevfalseEnables development error logging as well as other debug messages, such as request matching
Delete_logs_after_days7Number of days after which log files are removed
Plugin (Other)
SettingDefaultDescription
Update_notifications.Check_for_updatestrueEnables Plan update check
Update_notifications.Notify_about_DEV_releasesfalseShould update notifications include DEV releases
Configuration.Allow_proxy_to_manage_settingstrueShould server config file on Bungee/Velocity apply changes to this server's config.
Database
SettingDefaultDescription
TypeH2'MySQL', 'H2' or 'SQLite'
MySQL.Hostlocalhost
MySQL.Port3306
MySQL.UserrootUser for editing the database
MySQL.PasswordminecraftPassword of MySQL.User
MySQL.DatabasePlanName of the Database to use
MySQL.Launch_options?rewriteBatchedStatements=trueLaunch options to use
MySQL.Max_Lifetime25 MINUTESHow long HikariCP will keep connection in the pool. Reduce this if you are getting connection timeout errors.
Webserver
SettingDefaultDescription
Port8804Port of the Webserver
Alternative_IP.EnabledfalseShould an alternate address be used for the WebServer links
Alternative_IP.Addressyour.domain.here:%port%Address to use as link in inspect and analyze commands if setting above is enabled. %port% will be replaced with the Port automatically. If you have port-forwarded an alternate address to the webserver port, %port% is not required.
Internal_IP0.0.0.0Internal InetAddress to start the WebServer on. 0.0.0.0 manages the Internal IP automatically. No need to change unless running in Docker.
Public_html_directory"public_html"Html Customization feature that allows hosting any files on the Plan webserver.
Cache.Reduced_refresh_barrier15 SECONDSPrevents constant json updates with this threshold
Cache.Invalidate_query_results_on_disk_after7 DAYSHow long to store query page results so that they can be shared
Cache.Invalidate_disk_cache_after2 DAYSHow long to store json for the panel data, note that old panel data is deleted when new one is cached.
Cache.Invalidate_memory_cache_after5 MINUTESHow long to store json for the panel data in memory, same as above applies.
Security.SSL_certificateView the tutorial on setting up a SSL Certificate
Security.Disable_authenticationfalseDisables login if HTTPS is enabled.
Security.Disable_registrationfalseDisables user registration page if HTTPS is enabled.
Security.Access_log.Print_to_consolefalsePrint any incoming request to the console log.
Security.Access_log.Remove_logs_after_days30How long access log is kept in the Plan database.
Security.CORS.Allow_origin'"*"'Allows other sites to fetch JSON from Plan webserver.
Security.Use_X-Forwarded-For_HeaderfalseAllows you to use whitelist with reverse-proxy
Security.Cookies_expire_after2 HOURSDetermine time after login-cookies expire
Security.IP_whitelist.EnabledfalseEnables or disables the IP whitelist for the webserver
Security.IP_whitelist.WhitelistlocahostList of IP addresses to allow accessing the webserver. Supports wildcards, cidr and dynamic dns (see comment above the setting)
Disable_WebserverfalseDisables the WebServer. This is for External WebServer Use
External_Webserver_addresshttps://www.example.addressAddress to give to users when Plan WebServer is disabled.
Data_gathering
SettingDefaultDescription
GeolocationstrueEnable Geolocation gathering
Accept_GeoLite2_EULAfalseAllow downloading GeoLite2 Database (Better for geolocation)
Geolocation_Download_URL"https://geodb.playeranalytics.net/GeoLite2-Country.mmdb"Maxmind Geolite2-Country database download location.
PingtrueEnable ping gathering
Disk_spacetrueEnable free disk space gathering
Commands.Log_unknownfalseLog commands that are not registered, e.g. /bremobmreb (Currenly not in use)
Commands.Log_aliases_as_main_commandtrueCombines command aliases to the main command, e.g. /i to /give (Currenly not in use)
Join_addresses.EnabledtrueEnable/Disable join address gathering
Join_addresses.Preserve_casefalseCase sensitive join address storage
Join_addresses.Preserve_invalidfalseKeep non IP address or DNS domain join addresses
Join_addresses.Filter_out_from_data- play.example.comHide specific addresses from data (e.g. if cloudflare hidden IP is gathered)
Time.Delays
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Ping_server_enable_delay300 (SECONDS)Delay from server start before Ping is started to be gathered.
Ping_player_join_delay30 (SECONDS)Delay from player login before Ping is started to be gathered.
Wait_for_DB_Transactions_on_disable20 (SECONDS)Maximum time to wait until unfinished transactions are executed when database closes.
Time.Thresholds
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
AFK_threshold3 (MINUTES)Idle time before Plan considers a player afk
Activity_index.Playtime_threshold30 (MINUTES)Playtime/Week to be considered Active by Activity Index
Remove_inactive_player_data_after180 (DAYS)How many days player has to not log in to be removed from the database
Remove_time_series_data_after3650 (DAYS)How many days Players online & Performance data is stored
Remove_ping_data_after14 (DAYS)How many days Ping data is stored
Remove_disabled_extension_data_after2 (DAYS)How many days data of disabled Extensions in stored
Time.Periodic_tasks
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Check_DB_for_server_config_files_every1 (MINUTES)How often database is checked for updated config file
Extension_server_data_refresh_every1 (HOURS)How often server data for DataExtensions is updated
Extension_player_data_refresh_every15 (MINUTES)How often player data for DataExtensions is updated
Clean_Database_every1 (HOURS)How often database is cleaned of old data.
Display_options
SettingDefaultDescription
ThemedefaultSee Themes for more details about this setting
Player_head_image_url"https://crafatar.com/avatars/${playerUUID}?size=120&default=MHF_Steve&overlay"Change service for player head images
Sessions.Show_on_page50How many sessions are visible on a page
Sessions.Order_world_pies_by_percentagefalseBy Default WorldPie is ordered alphabetically, colors are still determined alphabetically.
Players_table.Show_on_server_page2500How many players are visible on /server page Players tab
Players_table.Show_on_players_page25000How many players are visible on /players page
Open_player_links_in_new_tabfalseFeature switch for old behavior of player links
Graphs.Show_gaps_in_datafalseDisplays data gaps in line graphs (Might increase page load time)
Graphs.TPS18 & 10Thresholds for TPS graph colors
Graphs.Disk_space500 & 100Thresholds for Disk graph colors
Command_colors&2, &7, &fColor codes to use for command messages
Formatting
SettingDefaultDescription
Decimal_points'#.##'How many decimal points should be displayed
Time_amountTime amounts are formatted by replacing the placeholders of these settings. More below.
DatesDates are formatted with SimpleDateFormat patterns
Dates.TimeZoneserverChange time zone used for the web pages, accepts format 'GMT+2' or 'GMT-04:30', 'server' or 'UTC'
Dates.Show_recent_day_namestrueThe day in dates is replaced by 'Today', 'Yesterday', 'Friday' for the few most recent days.
Formatting.Time_amount Examples

Default:

TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12h 30m 20s
400 days1 year, 1 month, 5d
12 hours 20 sec.12h 20s
0 sec.0s

Extra Zeros

Time_amount:
Year: '1 year, '
Years: '%years% years, '
Month: '1 month, '
Months: '%months% months, '
Day: '1d '
Days: '%days%d '
Hours: '%zero%%hours%:'
Minutes: '%hours%%zero%%minutes%:'
Seconds: '%minutes%%zero%%seconds%'
Zero: '00:00:00'
TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12:30:20
400 days1 year, 1 month, 5d
12 hours 20 sec.12:00:20
30 minutes00:30:00
20 sec.00:00:20
0 sec.00:00:00
World_aliases
  • World_aliases.List List of Worlds and the aliases used in graph generation. You can lump worlds together by setting their alias as the same value.
  • World_aliases.Regex List of regexes "Alias for world:^abc$" that replace any matching world names with the alias on the left side of : You can use https://regex101.com/ for testing regexes. Any matching worlds will not be added to .List again after they're removed.
Export
Plugins
  • If you have third party plugins installed, their analysis settings will be displayed here.
Customized_files

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Bukkit Configuration

Aurora Lahtela edited this page Mar 7, 2026 · 39 revisions

Plan Header

Game Server Configuration

This page is about the Bukkit/Sponge/Nukkit/Fabricconfig.yml file and the various settings it provides.
For Bungee see Bungee Configuration

Page version: 5.7 build 3247

Configuring with environment variables

You can configure Plan using environment variables. This can be useful for those running servers in docker environments.

Examples:

  • Server.ServerName -> PLAN_SERVER_SERVERNAME
  • Database.MySQL.Password -> PLAN_DATABASE_MYSQL_PASSWORD
  • ServerInfoFile.yml is also supported, eg. PLAN_SERVER_ID, PLAN_SERVER_UUID to have specific servers keep their identity if your server destroys all files on shutdown.
  • With string lists variable needs to be format "- One\n- Two" where \n is newline

Settings by Section

Server
SettingDefaultDescription
ServerNamePlanName of the server, displayed on the page and used to access the page of the server on networks.
Plugin.Logging
SettingDefaultDescription
Localedefault2 letter Locale code, see Localization. default for English. write-all to write all locales' files
Create_new_locale_file_on_next_enablefalseWrites a new locale.txt file to the plugin folder on enable.
Log_untranslated_locale_keysfalseLogs keys that have default value in the currently in-use locale to console. This is to help translators update files.
DevfalseEnables development error logging as well as other debug messages, such as request matching
Delete_logs_after_days7Number of days after which log files are removed
Plugin (Other)
SettingDefaultDescription
Update_notifications.Check_for_updatestrueEnables Plan update check
Update_notifications.Notify_about_DEV_releasesfalseShould update notifications include DEV releases
Configuration.Allow_proxy_to_manage_settingstrueShould server config file on Bungee/Velocity apply changes to this server's config.
Database
SettingDefaultDescription
TypeH2'MySQL', 'H2' or 'SQLite'
MySQL.Hostlocalhost
MySQL.Port3306
MySQL.UserrootUser for editing the database
MySQL.PasswordminecraftPassword of MySQL.User
MySQL.DatabasePlanName of the Database to use
MySQL.Launch_options?rewriteBatchedStatements=trueLaunch options to use
MySQL.Max_Lifetime25 MINUTESHow long HikariCP will keep connection in the pool. Reduce this if you are getting connection timeout errors.
Webserver
SettingDefaultDescription
Port8804Port of the Webserver
Alternative_IP.EnabledfalseShould an alternate address be used for the WebServer links
Alternative_IP.Addressyour.domain.here:%port%Address to use as link in inspect and analyze commands if setting above is enabled. %port% will be replaced with the Port automatically. If you have port-forwarded an alternate address to the webserver port, %port% is not required.
Internal_IP0.0.0.0Internal InetAddress to start the WebServer on. 0.0.0.0 manages the Internal IP automatically. No need to change unless running in Docker.
Public_html_directory"public_html"Html Customization feature that allows hosting any files on the Plan webserver.
Cache.Reduced_refresh_barrier15 SECONDSPrevents constant json updates with this threshold
Cache.Invalidate_query_results_on_disk_after7 DAYSHow long to store query page results so that they can be shared
Cache.Invalidate_disk_cache_after2 DAYSHow long to store json for the panel data, note that old panel data is deleted when new one is cached.
Cache.Invalidate_memory_cache_after5 MINUTESHow long to store json for the panel data in memory, same as above applies.
Security.SSL_certificateView the tutorial on setting up a SSL Certificate
Security.Disable_authenticationfalseDisables login if HTTPS is enabled.
Security.Disable_registrationfalseDisables user registration page if HTTPS is enabled.
Security.Access_log.Print_to_consolefalsePrint any incoming request to the console log.
Security.Access_log.Remove_logs_after_days30How long access log is kept in the Plan database.
Security.CORS.Allow_origin'"*"'Allows other sites to fetch JSON from Plan webserver.
Security.Use_X-Forwarded-For_HeaderfalseAllows you to use whitelist with reverse-proxy
Security.Cookies_expire_after2 HOURSDetermine time after login-cookies expire
Security.IP_whitelist.EnabledfalseEnables or disables the IP whitelist for the webserver
Security.IP_whitelist.WhitelistlocahostList of IP addresses to allow accessing the webserver. Supports wildcards, cidr and dynamic dns (see comment above the setting)
Disable_WebserverfalseDisables the WebServer. This is for External WebServer Use
External_Webserver_addresshttps://www.example.addressAddress to give to users when Plan WebServer is disabled.
Data_gathering
SettingDefaultDescription
GeolocationstrueEnable Geolocation gathering
Accept_GeoLite2_EULAfalseAllow downloading GeoLite2 Database (Better for geolocation)
Geolocation_Download_URL"https://geodb.playeranalytics.net/GeoLite2-Country.mmdb"Maxmind Geolite2-Country database download location.
PingtrueEnable ping gathering
Disk_spacetrueEnable free disk space gathering
Commands.Log_unknownfalseLog commands that are not registered, e.g. /bremobmreb (Currenly not in use)
Commands.Log_aliases_as_main_commandtrueCombines command aliases to the main command, e.g. /i to /give (Currenly not in use)
Join_addresses.EnabledtrueEnable/Disable join address gathering
Join_addresses.Preserve_casefalseCase sensitive join address storage
Join_addresses.Preserve_invalidfalseKeep non IP address or DNS domain join addresses
Join_addresses.Filter_out_from_data- play.example.comHide specific addresses from data (e.g. if cloudflare hidden IP is gathered)
Time.Delays
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Ping_server_enable_delay300 (SECONDS)Delay from server start before Ping is started to be gathered.
Ping_player_join_delay30 (SECONDS)Delay from player login before Ping is started to be gathered.
Wait_for_DB_Transactions_on_disable20 (SECONDS)Maximum time to wait until unfinished transactions are executed when database closes.
Time.Thresholds
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
AFK_threshold3 (MINUTES)Idle time before Plan considers a player afk
Activity_index.Playtime_threshold30 (MINUTES)Playtime/Week to be considered Active by Activity Index
Remove_inactive_player_data_after180 (DAYS)How many days player has to not log in to be removed from the database
Remove_time_series_data_after3650 (DAYS)How many days Players online & Performance data is stored
Remove_ping_data_after14 (DAYS)How many days Ping data is stored
Remove_disabled_extension_data_after2 (DAYS)How many days data of disabled Extensions in stored
Time.Periodic_tasks
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Check_DB_for_server_config_files_every1 (MINUTES)How often database is checked for updated config file
Extension_server_data_refresh_every1 (HOURS)How often server data for DataExtensions is updated
Extension_player_data_refresh_every15 (MINUTES)How often player data for DataExtensions is updated
Clean_Database_every1 (HOURS)How often database is cleaned of old data.
Display_options
SettingDefaultDescription
ThemedefaultSee Themes for more details about this setting
Player_head_image_url"https://crafatar.com/avatars/${playerUUID}?size=120&default=MHF_Steve&overlay"Change service for player head images
Sessions.Show_on_page50How many sessions are visible on a page
Sessions.Order_world_pies_by_percentagefalseBy Default WorldPie is ordered alphabetically, colors are still determined alphabetically.
Players_table.Show_on_server_page2500How many players are visible on /server page Players tab
Players_table.Show_on_players_page25000How many players are visible on /players page
Open_player_links_in_new_tabfalseFeature switch for old behavior of player links
Graphs.Show_gaps_in_datafalseDisplays data gaps in line graphs (Might increase page load time)
Graphs.TPS18 & 10Thresholds for TPS graph colors
Graphs.Disk_space500 & 100Thresholds for Disk graph colors
Command_colors&2, &7, &fColor codes to use for command messages
Formatting
SettingDefaultDescription
Decimal_points'#.##'How many decimal points should be displayed
Time_amountTime amounts are formatted by replacing the placeholders of these settings. More below.
DatesDates are formatted with SimpleDateFormat patterns
Dates.TimeZoneserverChange time zone used for the web pages, accepts format 'GMT+2' or 'GMT-04:30', 'server' or 'UTC'
Dates.Show_recent_day_namestrueThe day in dates is replaced by 'Today', 'Yesterday', 'Friday' for the few most recent days.
Formatting.Time_amount Examples

Default:

TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12h 30m 20s
400 days1 year, 1 month, 5d
12 hours 20 sec.12h 20s
0 sec.0s

Extra Zeros

Time_amount:
Year: '1 year, '
Years: '%years% years, '
Month: '1 month, '
Months: '%months% months, '
Day: '1d '
Days: '%days%d '
Hours: '%zero%%hours%:'
Minutes: '%hours%%zero%%minutes%:'
Seconds: '%minutes%%zero%%seconds%'
Zero: '00:00:00'
TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12:30:20
400 days1 year, 1 month, 5d
12 hours 20 sec.12:00:20
30 minutes00:30:00
20 sec.00:00:20
0 sec.00:00:00
World_aliases
  • World_aliases.List List of Worlds and the aliases used in graph generation. You can lump worlds together by setting their alias as the same value.
  • World_aliases.Regex List of regexes "Alias for world:^abc$" that replace any matching world names with the alias on the left side of : You can use https://regex101.com/ for testing regexes. Any matching worlds will not be added to .List again after they're removed.
Export
Plugins
  • If you have third party plugins installed, their analysis settings will be displayed here.
Customized_files

Clone this wiki locally

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Bukkit Configuration

Aurora Lahtela edited this page Mar 7, 2026 · 39 revisions

Plan Header

Game Server Configuration

This page is about the Bukkit/Sponge/Nukkit/Fabricconfig.yml file and the various settings it provides.
For Bungee see Bungee Configuration

Page version: 5.7 build 3247

Configuring with environment variables

You can configure Plan using environment variables. This can be useful for those running servers in docker environments.

Examples:

  • Server.ServerName -> PLAN_SERVER_SERVERNAME
  • Database.MySQL.Password -> PLAN_DATABASE_MYSQL_PASSWORD
  • ServerInfoFile.yml is also supported, eg. PLAN_SERVER_ID, PLAN_SERVER_UUID to have specific servers keep their identity if your server destroys all files on shutdown.
  • With string lists variable needs to be format "- One\n- Two" where \n is newline

Settings by Section

Server
SettingDefaultDescription
ServerNamePlanName of the server, displayed on the page and used to access the page of the server on networks.
Plugin.Logging
SettingDefaultDescription
Localedefault2 letter Locale code, see Localization. default for English. write-all to write all locales' files
Create_new_locale_file_on_next_enablefalseWrites a new locale.txt file to the plugin folder on enable.
Log_untranslated_locale_keysfalseLogs keys that have default value in the currently in-use locale to console. This is to help translators update files.
DevfalseEnables development error logging as well as other debug messages, such as request matching
Delete_logs_after_days7Number of days after which log files are removed
Plugin (Other)
SettingDefaultDescription
Update_notifications.Check_for_updatestrueEnables Plan update check
Update_notifications.Notify_about_DEV_releasesfalseShould update notifications include DEV releases
Configuration.Allow_proxy_to_manage_settingstrueShould server config file on Bungee/Velocity apply changes to this server's config.
Database
SettingDefaultDescription
TypeH2'MySQL', 'H2' or 'SQLite'
MySQL.Hostlocalhost
MySQL.Port3306
MySQL.UserrootUser for editing the database
MySQL.PasswordminecraftPassword of MySQL.User
MySQL.DatabasePlanName of the Database to use
MySQL.Launch_options?rewriteBatchedStatements=trueLaunch options to use
MySQL.Max_Lifetime25 MINUTESHow long HikariCP will keep connection in the pool. Reduce this if you are getting connection timeout errors.
Webserver
SettingDefaultDescription
Port8804Port of the Webserver
Alternative_IP.EnabledfalseShould an alternate address be used for the WebServer links
Alternative_IP.Addressyour.domain.here:%port%Address to use as link in inspect and analyze commands if setting above is enabled. %port% will be replaced with the Port automatically. If you have port-forwarded an alternate address to the webserver port, %port% is not required.
Internal_IP0.0.0.0Internal InetAddress to start the WebServer on. 0.0.0.0 manages the Internal IP automatically. No need to change unless running in Docker.
Public_html_directory"public_html"Html Customization feature that allows hosting any files on the Plan webserver.
Cache.Reduced_refresh_barrier15 SECONDSPrevents constant json updates with this threshold
Cache.Invalidate_query_results_on_disk_after7 DAYSHow long to store query page results so that they can be shared
Cache.Invalidate_disk_cache_after2 DAYSHow long to store json for the panel data, note that old panel data is deleted when new one is cached.
Cache.Invalidate_memory_cache_after5 MINUTESHow long to store json for the panel data in memory, same as above applies.
Security.SSL_certificateView the tutorial on setting up a SSL Certificate
Security.Disable_authenticationfalseDisables login if HTTPS is enabled.
Security.Disable_registrationfalseDisables user registration page if HTTPS is enabled.
Security.Access_log.Print_to_consolefalsePrint any incoming request to the console log.
Security.Access_log.Remove_logs_after_days30How long access log is kept in the Plan database.
Security.CORS.Allow_origin'"*"'Allows other sites to fetch JSON from Plan webserver.
Security.Use_X-Forwarded-For_HeaderfalseAllows you to use whitelist with reverse-proxy
Security.Cookies_expire_after2 HOURSDetermine time after login-cookies expire
Security.IP_whitelist.EnabledfalseEnables or disables the IP whitelist for the webserver
Security.IP_whitelist.WhitelistlocahostList of IP addresses to allow accessing the webserver. Supports wildcards, cidr and dynamic dns (see comment above the setting)
Disable_WebserverfalseDisables the WebServer. This is for External WebServer Use
External_Webserver_addresshttps://www.example.addressAddress to give to users when Plan WebServer is disabled.
Data_gathering
SettingDefaultDescription
GeolocationstrueEnable Geolocation gathering
Accept_GeoLite2_EULAfalseAllow downloading GeoLite2 Database (Better for geolocation)
Geolocation_Download_URL"https://geodb.playeranalytics.net/GeoLite2-Country.mmdb"Maxmind Geolite2-Country database download location.
PingtrueEnable ping gathering
Disk_spacetrueEnable free disk space gathering
Commands.Log_unknownfalseLog commands that are not registered, e.g. /bremobmreb (Currenly not in use)
Commands.Log_aliases_as_main_commandtrueCombines command aliases to the main command, e.g. /i to /give (Currenly not in use)
Join_addresses.EnabledtrueEnable/Disable join address gathering
Join_addresses.Preserve_casefalseCase sensitive join address storage
Join_addresses.Preserve_invalidfalseKeep non IP address or DNS domain join addresses
Join_addresses.Filter_out_from_data- play.example.comHide specific addresses from data (e.g. if cloudflare hidden IP is gathered)
Time.Delays
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Ping_server_enable_delay300 (SECONDS)Delay from server start before Ping is started to be gathered.
Ping_player_join_delay30 (SECONDS)Delay from player login before Ping is started to be gathered.
Wait_for_DB_Transactions_on_disable20 (SECONDS)Maximum time to wait until unfinished transactions are executed when database closes.
Time.Thresholds
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
AFK_threshold3 (MINUTES)Idle time before Plan considers a player afk
Activity_index.Playtime_threshold30 (MINUTES)Playtime/Week to be considered Active by Activity Index
Remove_inactive_player_data_after180 (DAYS)How many days player has to not log in to be removed from the database
Remove_time_series_data_after3650 (DAYS)How many days Players online & Performance data is stored
Remove_ping_data_after14 (DAYS)How many days Ping data is stored
Remove_disabled_extension_data_after2 (DAYS)How many days data of disabled Extensions in stored
Time.Periodic_tasks
  • Unit supports values MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS
SettingDefault (Unit)Description
Check_DB_for_server_config_files_every1 (MINUTES)How often database is checked for updated config file
Extension_server_data_refresh_every1 (HOURS)How often server data for DataExtensions is updated
Extension_player_data_refresh_every15 (MINUTES)How often player data for DataExtensions is updated
Clean_Database_every1 (HOURS)How often database is cleaned of old data.
Display_options
SettingDefaultDescription
ThemedefaultSee Themes for more details about this setting
Player_head_image_url"https://crafatar.com/avatars/${playerUUID}?size=120&default=MHF_Steve&overlay"Change service for player head images
Sessions.Show_on_page50How many sessions are visible on a page
Sessions.Order_world_pies_by_percentagefalseBy Default WorldPie is ordered alphabetically, colors are still determined alphabetically.
Players_table.Show_on_server_page2500How many players are visible on /server page Players tab
Players_table.Show_on_players_page25000How many players are visible on /players page
Open_player_links_in_new_tabfalseFeature switch for old behavior of player links
Graphs.Show_gaps_in_datafalseDisplays data gaps in line graphs (Might increase page load time)
Graphs.TPS18 & 10Thresholds for TPS graph colors
Graphs.Disk_space500 & 100Thresholds for Disk graph colors
Command_colors&2, &7, &fColor codes to use for command messages
Formatting
SettingDefaultDescription
Decimal_points'#.##'How many decimal points should be displayed
Time_amountTime amounts are formatted by replacing the placeholders of these settings. More below.
DatesDates are formatted with SimpleDateFormat patterns
Dates.TimeZoneserverChange time zone used for the web pages, accepts format 'GMT+2' or 'GMT-04:30', 'server' or 'UTC'
Dates.Show_recent_day_namestrueThe day in dates is replaced by 'Today', 'Yesterday', 'Friday' for the few most recent days.
Formatting.Time_amount Examples

Default:

TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12h 30m 20s
400 days1 year, 1 month, 5d
12 hours 20 sec.12h 20s
0 sec.0s

Extra Zeros

Time_amount:
Year: '1 year, '
Years: '%years% years, '
Month: '1 month, '
Months: '%months% months, '
Day: '1d '
Days: '%days%d '
Hours: '%zero%%hours%:'
Minutes: '%hours%%zero%%minutes%:'
Seconds: '%minutes%%zero%%seconds%'
Zero: '00:00:00'
TimeFormatted
400 days, 12 hours, 30 minutes and 20 seconds1 year, 1 month, 5d 12:30:20
400 days1 year, 1 month, 5d
12 hours 20 sec.12:00:20
30 minutes00:30:00
20 sec.00:00:20
0 sec.00:00:00
World_aliases
  • World_aliases.List List of Worlds and the aliases used in graph generation. You can lump worlds together by setting their alias as the same value.
  • World_aliases.Regex List of regexes "Alias for world:^abc$" that replace any matching world names with the alias on the left side of : You can use https://regex101.com/ for testing regexes. Any matching worlds will not be added to .List again after they're removed.
Export
Plugins
  • If you have third party plugins installed, their analysis settings will be displayed here.
Customized_files

Clone this wiki locally