Want your server to do something no plugin quite covers — a custom join message, a little command, a small mechanic — without learning Java and compiling a plugin? That's exactly what Skript is for. It's a plugin that lets you write behavior in .sk files using syntax that reads almost like English. This guide gets your first script running and teaches the handful of stable basics to build on.
| At a glance | |
|---|---|
| You need | A plugin-capable server (Purpur, PaperSpigot, or similar) |
| Plan | Any |
| Time | Fifteen minutes |
Install Skript and find the scripts folder
Install Skript from the Plugins page and restart. On first load it creates its folders. Your scripts live in:
/plugins/Skript/scripts/
Any file ending in .sk in that folder is a script. One useful rule to know now: a file whose name starts with a hyphen (like -disabled.sk) is switched off — Skript ignores it. That's how you disable a script without deleting it.
Your first script
In the File Manager, open /plugins/Skript/scripts/ and create a file called welcome.sk. Paste this:
on join:
send "&aWelcome to the server, %player%!" to player
command /heal:
trigger:
heal the player
send "&aYou've been healed!" to the player
Two things happen here:
on join:is an event — the indented lines under it run whenever a player joins.%player%is filled in with their name.command /heal:defines a command. Everything a command does goes under atrigger:section.
Save the file.
⚠️ Heads up: Skript is indentation-sensitive, just like YAML — the lines under
on join:and undertrigger:must be indented, and every line at the same level must use the same indentation. Pick spaces or tabs and stay consistent within a file; don't mix them. If a script won't load, misaligned indentation is the first thing to check. The YAML config guide covers the same reading-the-error habit.
Load it: the reload command
Skript doesn't need a full server restart to pick up changes. Run this in the console (or in-game as an operator):
/sk reload welcome
That reloads just welcome.sk. To reload everything, use /sk reload all. After a reload, Skript prints the result to the console — either that the script loaded, or the line number and reason for each error it found. Read those the same way you'd read a config error: go to the named line in the File Manager and fix that spot.
💡 Tip: Reload after every edit and read the console. Skript's error messages are specific — they name the line and usually tell you what it expected. Fix one error, reload, repeat.
Verify it works
Join the server (or rejoin) — you should see your welcome message. Run /heal in-game and you should be healed with the confirmation message. If both work, your first script is live.
The stable core to build on
These basics have worked across Skript versions and are safe to learn first:
| Piece | Example | Does |
|---|---|---|
| Event | on join: / on death: / on break: |
Runs when something happens |
| Command | command /kit: then trigger: |
Defines a slash command |
| Message | send "text" to player |
Sends chat text |
| Player | player, %player% |
The player involved in the event |
| Condition | if player is op: |
Runs the indented block only if true |
| Broadcast | broadcast "text" |
Sends to everyone |
Build up slowly: add one event or command, reload, confirm it works, then add the next — the same one-change-at-a-time habit that keeps plugins sane.
Honest limits
- Skript is great for small things, not everything. Custom messages, simple commands, small mechanics — perfect. A complex minigame or economy written entirely in Skript gets slow and hard to maintain; at that point a purpose-built plugin is the better tool.
- Advanced features often need add-ons. A lot of the fancy syntax you'll see online comes from Skript add-on plugins (extra jars), not base Skript. If an example uses syntax your Skript doesn't recognise, it probably needs an add-on — start with base Skript only.
- Syntax evolves between versions. Examples from old tutorials may not parse on current Skript. Stick to the stable basics above, and check the current Skript documentation for anything beyond them: the official Skript docs.
Troubleshooting
- Script won't load after reload — read the console: it names the line and the problem. The usual culprit is inconsistent indentation (mixed tabs and spaces) or a missing
:at the end of an event ortrigger:line. See YAML without tears for the same error-reading habit. /healsays unknown command — the script didn't load (check the console for its errors), or you didn't reload after saving. Run/sk reload all.- Syntax from a tutorial errors out — it may need an add-on, or it's for a different Skript version. Rewrite it with the stable basics or check the current docs.
- Colour codes show as
&a— some contexts need the code formatted differently by version; keep to simple messages first and consult the docs for formatting.