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.
Features.jar files for easy distribution on CurseForge/Modrinth.lkt plugins work without modification
InstallationLuaCord-0.2.6-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!
Quick StartA 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.
Configurationconfig.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
Commands/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
Plugin API-- 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()
-- Storage (YAML or JSON files)
local config = plugin.getStorageObject("config.yml")
config:getValue("path")
config:setValue("path", value)
config:save()
-- Logging
logger.info("message")
logger.warn("message")
logger.severe("message")
logger.debug("message")
For guides and examples, see the LuaCord Wiki. For the full API reference, the Lukkit Docs still apply (LuaCord is backwards compatible).
JAR DistributionBefore 0.2.0, LuaCord plugins were .lkt files - great for development but:
Canβt be uploaded to CurseForge/Modrinth (only accept .jar)
Donβt show up in /plugins command on Paper (due to bypass mode requirement)
Look unprofessional/unfamiliar to usersNow with JAR support in 0.2.0:
Upload to CurseForge, Modrinth, SpigotMC
Shows in /plugins command!
Professional distribution
Still 100% Lua under the hood!.lkt file.lkt and fill in metadata.jarThe JAR generator is 100% client-side - your files never leave your browser.
Known IssuesWhen using bypass-plugin-registration: true (Paper mode):
/plugins
Note: .lkt files still donβt show in /plugins due to bypass mode. Use JAR plugins for better compatibility.
ChangelogPackaging Fix
Bug Fixes:
Fixed the jar bundling unrelated Maven build libraries (Plexus Utils and the Maven compiler plugin's dependencies), which caused 0.2.5 to be rejected by CurseForge moderationChanges:
Removed unused dependencies (reflections, ebean)
Jar size reduced from about 12 MB to about 4 MB
No changes to the Lua API or plugin behavior - existing .lkt and .jar plugins work as beforeStability & Rebrand Update
Bug Fixes:
Fixed a bug where one .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 independently
Fixed a double-enable race where a JAR-wrapped plugin could have its Lua half enabled twice (double-registering all its event listeners) if it enabled before LuaCord's own onEnable() ran
Fixed the JAR generator producing malformed plugin.yml (and therefore a JAR that silently fails to load) if the description field contained a colon, #, quote, or line breakChanges:
Renamed the /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 explicitly
Connector template now declares softdepend: [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 files
Web-based JAR generator at luacordmc.github.io/generator.html
Public LuaCordAPI for JAR wrappers to load Lua plugins
JAR plugins now show up in /plugins command!
87% Kotlin rewrite - modern, maintainable codebase
Improved error messages with download linksTechnical:
[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):
Paper server compatibility fix
Bypass mode for Paperβs plugin restrictions
Configurable loading modes
Debug mode for troubleshooting
Rewritten in Kotlin
Clean console logging
Full Paper compatibility
Package renamed to io.thegamingmahi.luacord
Improved error handling
Roadmap/luacord commands (for the LuaCord core plugin itself)
LicenseLuaCord 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.
CreditsSpecial thanks to the Lukkit community for keeping the project alive!
Original Lukkit repository: https://github.com/jammehcow/Lukkit (archived)
Links
SupportFound a bug? Open an issue on GitHub Issues
Need help? Check the LuaCord Wiki (the Lukkit Docs also apply, since LuaCord is backwards compatible)
Important NotesWrite plugins. Ship faster. LuaCord makes it easy. 