The official Luanti website, living at www.luanti.org.
- Uses the Bulma CSS framework.
 - Uses modern Web design techniques: 
remunits,hslcolors. - Responsive site and favicon.
 - Translation support using i18next.
 
This site uses the Eleventy static site generator.
- Ensure you have Node 24 or later installed.
- We recommend using 
nvm. First install nvm, and then runnvm usewhenever you open the project. 
 - We recommend using 
 - Run 
npm install. - Run 
npm startto serve the website locally. 
When working on new features, keep in mind this website only supports evergreen browsers:
- Chrome (two most recent versions)
 - Edge (two most recent versions)
 - Firefox (two most recent versions + latest ESR version)
 - Opera (two most recent versions)
 - Safari (two most recent versions)
 
Internet Explorer isn't supported.
Unfortunately, Weblate is not yet available. In the meantime, you can translate by GitHub Pull Request.
- 
Clone the Git repo
 - 
Find out your language code https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes
 - 
Copy locales/en/translation.json file to your language. For example, locales/fr/translation.json for French.
 - 
Update the values of the JSON file, leaving the keys in English. So it should be of the form
"English": "Translated"so:{ "Hello {{name}}": "Bonjour {{name}}" }You can use a desktop application like PoEdit to easily edit this JSON file.
In case you need to know, this is the i18next JSON format.
 - 
(Optional) If you've 100% completed your translation, you can enable it like so:
- Copy 
content/frtocontent/LANG_CODEwhere LANG_CODE is your language code. - Rename 
content/LANG_CODE/fr.jsontocontent/LANG_CODE/LANG_CODE.json. - Edit 
content/LANG_CODE/LANG_CODE.jsonto have"lang": "LANG_CODE". 
 - Copy 
 - 
Create a PR for your updates. Alternatively, send the translation.json to rubenwardy.
 
Luanti.org uses i18next for translations. This is exposed to liquid templates by a custom i18n filter:
{{ "Hello world" | i18n }}As double curly braces are used by liquid, use double square braces instead:
{{ "Hello [[name]]" | i18n: "name", "Bob" }}When Eleventy builds the website, it'll update the locales/en/translation.json
file with any new strings it finds. It'll replace [[name]] with {{name}} to
match i18next's interpolation syntax:
{
	"Hello {{name}}": "Bonjour {{name}}"
}- Stop the site if it is running locally.
 - Edit 
locales/en/translation.jsonto{}and save. - Run 
npm start. - Commit changes to 
locales/en/translation.json. 
Copyright © 2015-2025 Hugo Locurcio, rubenwardy, and contributors
Unless otherwise specified, code is licensed under the MIT license. Media (except gallery) and content are licensed under CC BY-SA 3.0 Unported.
Gallery screenshots are by various authors and are credited on the webpage.