Write real Minecraft plugins in Lua.
LuaCord is a modern fork of Lukkit, rewritten in Kotlin (87%) with full Paper compatibility and extended API support. Create powerful Minecraft plugins using Lua scripting with access to the complete Spigot/Paper API.
.jar files for easy distribution on CurseForge/Modrinth.lkt plugins work without modificationLuaCord-0.2.5-BETA.jar/plugins/ folder.lkt or .jar plugin files in the same /plugins/ folderRequirements:
Check out the JAR Generator to convert your .lkt plugins to .jar files for distribution!
A LuaCord plugin can be either:
Option 1: .lkt file (ZIP archive containing):
MyPlugin.lkt/
βββ main.lua # Your plugin code
βββ plugin.yml # Plugin metadata
βββ config.yml # Optional default config
Option 2: .jar file (For distribution on CurseForge/Modrinth):
.lkt as a .jar/plugins command β
Option 3: Folder (For development):
/plugins/MyPlugin.lkt/ # Folder name ending with .lkt
βββ main.lua
βββ plugin.yml
βββ config.yml
main.lua:
plugin:onEnable(function()
logger:info("My plugin is enabled!")
end)
plugin:addCommand({
name = "hello",
description = "Say hello!",
usage = "/hello"
}, function(event)
local sender = event:getSender()
sender:sendMessage("Hello from Lua!")
end)
plugin:registerEvent("PlayerJoinEvent", function(event)
local player = event:getPlayer()
player:sendMessage("Welcome to the server!")
end)
plugin.yml:
name: MyPlugin
version: 1.0
main: main.lua
author: YourName
description: My first LuaCord plugin
For .lkt: ZIP these files and rename to MyPlugin.lkt
For .jar: Use the JAR Generator
For folder: Just place the folder in /plugins/
Thatβs it! Restart your server and your plugin is live.
config.yml options:
# Enable debug mode for verbose logging
debug-mode: false
# Paper compatibility mode (recommended for Paper servers)
bypass-plugin-registration: true
# Enable Lua debug globals
lua-debug: false
# Check for updates on startup
update-checker: false
# Allow /luacord run command
can-run-code: true
For Paper servers: Keep bypass-plugin-registration: true
For Spigot servers: You can set it to false
/luacord - Show help message/luacord plugins - List all loaded LuaCord plugins/luacord dev - Show developer commands/luacord dev reload <plugin> - Hot reload a dev plugin (folder-based plugins only)/luacord dev errors - View error stack for debugging/luacord dev pack <plugin> - Package a dev plugin folder into .lkt/luacord dev unpack <plugin> - Unpack a .lkt into a folder for development-- Lifecycle hooks
plugin:onLoad(function() end)
plugin:onEnable(function() end)
plugin:onDisable(function() end)
-- Commands
plugin:addCommand({ name = "cmd", ... }, function(event) end)
-- Events
plugin:registerEvent("EventName", function(event) end)
-- Server access
local server = plugin:getServer()
-- Config
config:getValue("path")
config:set("path", value)
config:save()
-- Logging
logger:info("message")
logger:warn("message")
logger:severe("message")
For full API documentation, see the Lukkit Wiki (LuaCord is backwards compatible).
Before 0.2.0, LuaCord plugins were .lkt files - great for development but:
.jar)/plugins command on Paper (due to bypass mode requirement)Now with JAR support in 0.2.0:
/plugins command!.lkt file.lkt and fill in metadata.jarThe JAR generator is 100% client-side - your files never leave your browser.
When using bypass-plugin-registration: true (Paper mode):
/pluginsNote: .lkt files still donβt show in /plugins due to bypass mode. Use JAR plugins for better compatibility.
Stability & Rebrand Update
Bug Fixes:
.lkt plugin failing to load (e.g. a bad main: path) could silently prevent every plugin listed after it in the plugins folder from loading at all β each plugin now loads independentlyonEnable() ranplugin.yml (and therefore a JAR that silently fails to load) if the description field contained a colon, #, quote, or line breakChanges:
/lukkit command to /luacord (and permissions lukkit.command/lukkit.run to luacord.command/luacord.run) to match the project's actual name β you'll need to re-grant these permissions if you assigned them explicitlysoftdepend: [LuaCord] so it reliably enables after LuaCord instead of relying on undefined plugin load orderJAR Support Release - The Distribution Update
New Features:
.jar plugin wrapper support alongside .lkt filesLuaCordAPI for JAR wrappers to load Lua plugins/plugins command!Technical:
[nz.co.jammehcow.lukkit...] spam)io.thegamingmahi.luacordCompatibility:
Initial LuaCord release - forked from Lukkit 2.2.0
Inherited from Lukkit 2.2.0 (by TheGamingMahi):
io.thegamingmahi.luacord/luacord commands (for the LuaCord core plugin itself)LuaCord Core: GPL v3 - This ensures the framework remains open source.
Plugin Wrapper Template (LuaCord-Connector): MIT - Maximum freedom for plugin developers.
See LICENSE for details.
Special thanks to the Lukkit community for keeping the project alive!
Original Lukkit repository: https://github.com/jammehcow/Lukkit (archived)
Found a bug? Open an issue on GitHub Issues
Need help? Check the Lukkit Wiki (LuaCord is backwards compatible)
Write plugins. Ship faster. LuaCord makes it easy. π