Plugins / WebLink
WebLink
Link Minecraft accounts to your website with one code typed in game. PHP backend included.
Get WebLink
$7.99 on BuiltByBit, list price on 16 October 2026. BuiltByBit sales can lower it, the listing shows the current price.
Also in Complete Collection: Every Plugin.
Try it live
WebLink runs on a public demo server, set up so you can use it yourself. Join, try it, then decide.
Address: try.zeropvp.xyz:25570 (Java Edition 1.21.11)
In Minecraft: Multiplayer, Add Server, paste the address, Join. Type /demo go weblink to land at its booth, or right-click the compass and pick it. The world resets every night.
Overview
WebLink
Know which website account belongs to which Minecraft player, with one code typed in game
A player registers on your website, presses "Get a link code", and types /weblink ABC123 in game. Done: the website now knows which Minecraft account belongs to them, and can show last seen, playtime and anything else you build on top.
You get both halves: the plugin, and a small PHP backend (registration, sign-in, sessions, link codes, the plugin endpoints) that runs on any PHP host, including cheap shared hosting. No email, no OAuth, no third-party service.
The in-game link screen: paste the code from your account page on the website.
- Latest version
- 1.2.0
- Server
- Paper or Purpur, Java 21
- BuiltByBit
- WebLink on BuiltByBit
What changed in 1.2.0
- New: link rewards. List console commands under link-rewards.commands in config.yml (a rank, coins, a crate key) and they run when a player links. Each Minecraft account gets them once: linking again, or to another website account, gives nothing more. Placeholders {player}, {uuid} and {account}. Who has had them is kept in plugins/WebLink/link-rewards.txt.
- New: /weblink status shows which website account you are linked to. /weblink status <player> shows it for somebody else, from the console too, with the new permission weblink.lookup (default op). /weblink info works the same.
- New: PlaceholderAPI placeholders (PlaceholderAPI is optional): %weblink_linked% (true or false), %weblink_linked_text% (Linked or Not linked, from messages placeholder-linked and placeholder-not-linked) and %weblink_account% (the website username, empty when not linked).
- When a player joins, the plugin now asks your website whether the account is linked (one GET request to api.php?a=player, which needs no token and works with the api.php you already have). The new setting check-on-join: false switches this off; the placeholders then show not linked.
- The linking screen (/weblink) now says which website account you are linked to already.
- Tab completion for /weblink status and /weblink reload.
- An existing config.yml does not need the new keys: without them the defaults are used (no link rewards, check-on-join on). Add them only to change a value or a text. No change to api.php is needed.
Features
Why server owners pick it
- You get both halves: the plugin and a ready PHP backend
- Runs on any PHP host, cheap shared hosting included
- No email, no OAuth, no third-party service
- Players link in seconds: get a code on the site, type it in game
- Build on it: last seen, playtime and whatever your site needs
What makes it different
- Both halves in one purchase: the plugin and a ready PHP backend, not an API you still have to build against
- No email, no OAuth, no third-party service: accounts live in a SQLite file on your own web host
- The code is typed into a dialog field instead of chat, so nobody watching the screen or the chat log can read it
Works with
- Paper or Purpur 1.21.11 (or newer 1.21.x), Java 21+
- Any web host with PHP 8.1+ and pdo_sqlite (Debian/Ubuntu: apt install php-sqlite3)
- HTTPS on the website is strongly recommended, the session cookie is marked Secure when it is on
- No DRM, no licence key and no licence server; the code is not obfuscated
What you get
- New in v1.3.0: Link rewards: console commands that run once per Minecraft account when a player links (a rank, coins, a crate key)
- New in v1.3.0: /weblink status: shows which website account a player is linked to, for staff from the console too
- New in v1.3.0: PlaceholderAPI (optional): %weblink_linked%, %weblink_linked_text% and %weblink_account%
- In-game linking with a short, expiring code: no email verification, no password typed in chat
- Complete backend in one file (api.php): register, sign in, sign out, change password, get code, unlink, plus the plugin endpoints
- Example page (index.html) with the whole flow, styled plainly so it drops into any site or you copy the fetch() calls into yours
- Join and quit reporting so your site can show "online now", "last seen" and total playtime (switchable)
- Read endpoints for your own pages: GET ?a=player&name=Notch returns known, last seen, minutes played, linked account
- SQLite storage, no database server to set up; the file is yours to query
- Secure by default: bcrypt passwords, rate-limited sign-in, HttpOnly session cookie, shared token between plugin and site, data folder outside the web root supported
- Async HTTP from the plugin, the main thread never waits on your website
- MiniMessage messages, all editable
Chat confirms which website account the Minecraft account now belongs to.
The linking screen
Already linked: the screen shows the website account, and a new code moves the link.
- /weblink on its own opens a real Minecraft dialog window with a field for the code and one button
- A code typed into chat can be read by anybody watching the screen or the chat log; a field cannot
- The screen can name your site, so players know where the code comes from
menu: falseputs the plain usage line back
FAQ
Which servers does it run on?
Paper or Purpur 1.21.11 or a newer 1.21.x, with Java 21.
Do I need other plugins?
No other plugins. The included PHP backend runs on your web host.
Is there DRM or a licence key?
No. There is nothing to activate and no licence server to reach, and the code is not obfuscated.
How long does setup take?
Drop the jar into /plugins and restart. The setup guide above has 5 short steps.
Can I try it before I buy?
Yes. This page has a test server with the plugin installed.
Where do I get help?
In the active support Discord, in the discussion tab on this page, or in the documentation.
Can I reward players for linking?
Yes. List console commands under link-rewards in config.yml. Each Minecraft account gets them once.
Updates
Released on September 15, 2026 and updated 6 times since. The latest version is v1.3.0 (October 16, 2026). Every update is free, new Minecraft versions included.
Also by Frostyh
- TierTags: tier lists and tags in tab and above heads
- Alias: nicknames with the matching skin
- HotbarDialogs: hotbar items that open native dialog menus
- Complete Collection: all my published plugins in one purchase, 40% off
If this plugin helps your server, a short review on this page would mean a lot. Thank you!
Installation
Requirements
- Server software
- Paper, or a Paper fork such as Purpur. Spigot and CraftBukkit are not supported: the plugin uses Paper-only APIs.
- Minecraft version
- plugin.yml api-version 1.21; built against Paper API 1.21.11
- Java
- 21 or newer
- Required plugins
- none
- Optional plugins
PlaceholderAPI
Steps
- Download
WebLink.jarfrom BuiltByBit. There is no licence key to enter. - Stop the server and put the jar into the
pluginsfolder. - Start the server. The plugin creates
plugins/WebLink/config.ymlwith the defaults shown under Configuration. - Edit
config.ymlto suit your server. - Apply the changes with
/weblink reload(Reload the config), or restart the server.
Setup guide
- Upload the web/ folder to your site, for example https://yoursite.com/weblink/
- Open https://yoursite.com/weblink/api.php?a=me once in a browser. The backend creates data/weblink.sqlite and data/token.
- Protect the data folder: on Apache the .htaccess is written for you; on nginx add location ^~ /weblink/data/ { deny all; }. Or move DATA_DIR (top of api.php) outside the web root.
- Copy the token into config.yml (api.token) and set api.url. /weblink reload.
- Players register on index.html (or your own page), get a code, type /weblink CODE in game.
What to build with it
- SMP: a members page with everyone's skin, last seen and hours played; a "claim your forum account" flow; whitelist applications that know the real Minecraft account
- Duel / PvP servers: stat pages and leaderboards keyed by the linked account, profile pages players can customise on the site
- Networks: one website account across every server, a store that knows who is logged in, staff panels that show the player behind an account
Your site talks to the same SQLite file (tables users, players, sessions) or to api.php, whichever is easier for you.
Commands
From plugin.yml. "Not set" in the permission column means plugin.yml attaches no permission to the command itself; the nodes the plugin checks are listed under Permissions.
| Command | Aliases | Usage | Description | Permission |
|---|---|---|---|---|
/weblink | /linkweb, /sitelink | /weblink <code> | /weblink status [player] | /weblink reload (admin: reads api.url and api.token again) | Link this Minecraft account to your website account. | not set |
Subcommands in detail
/weblink <code> Link this Minecraft account to the website account that made the code.
/weblink reload (admin) Reload the config.
/weblink status [player] Which website account you (or a player) are linked to.
Permissions
From plugin.yml.
| Node | Default | Description | Children |
|---|---|---|---|
weblink.admin | operators | Reload the config. | none |
weblink.lookup | operators | See which website account another player is linked to, with /weblink status <player>. | none |
Linking itself needs no permission.
Placeholders
Registered with PlaceholderAPI under the identifier weblink (WebLinkPlaceholders.java). PlaceholderAPI must be installed for these to work.
| Placeholder | Returns |
|---|---|
%weblink_...% | for PlaceholderAPI. Only loaded when PlaceholderAPI is installed. |
%weblink_linked% | |
%weblink_linked_text% | |
%weblink_account% |
Configuration reference
The default files as they ship in the jar, with their comments. The plugin writes them to plugins/WebLink/ on first start.
config.yml
Top-level keys:
| Key | Default | Comment above it |
|---|---|---|
menu | true | Bare /weblink opens a screen with a field for the code instead of printing the usage line. |
website | "" (empty) | Shown on that screen so players know where their code comes from. Empty hides the line. |
api | section, 2 keys | none |
report-sessions | true | Also report joins and quits, so the site can show "last seen" and time played. Off if you only want the linking. |
floodgate-prefix | "." | Bedrock players joining through Geyser and Floodgate get a prefix in front of their name (Floodgate's username-prefix, "." by default). The website only accepts plain Minecraft names, so this prefix is taken off the name before it is sent. Set it to... |
check-on-join | true | When a player joins, ask the website whether their account is linked (one small request to api.php?a=player, which needs no token). /weblink status, the linking screen and the PlaceholderAPI placeholders use the answer: %weblink_linked% (true or false),... |
link-rewards | section, 1 key | Console commands run when a player links, for a rank, coins or a crate key. They run once per Minecraft account: linking again, or to another website account, gives nothing more. Who has had them is kept in plugins/WebLink/link-rewards.txt. Placeholders:... |
theme | section, 11 keys | Every message below is written against these names, not against hex codes: <accent>Open</accent> rather than <#23d3c1>Open</#23d3c1>. Change a colour here and it changes on every screen at once. Ordinary MiniMessage still works, so <gradient:#a:#b> and... |
messages | section, 26 keys | none |
review-reminder | true | One thank-you line with the BuiltByBit review link: once in the console after install and once in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off. |
# WebLink - link Minecraft accounts to accounts on your website with a code typed in game.
#
# How it works: your website (see the web/ folder shipped with this plugin) gives a signed-in user
# a short code. They type /weblink CODE here. This plugin posts the code, their uuid and name to
# your site with the shared token, and the site attaches the Minecraft account. No email involved.
# Bare /weblink opens a screen with a field for the code instead of printing the usage line.
menu: true
# Shown on that screen so players know where their code comes from. Empty hides the line.
website: ""
api:
# The endpoint from the web/ folder, wherever you host it.
url: "https://example.com/weblink/api.php"
# The token is made by your website, not by this plugin. api.php writes a random 64-character
# hex token to data/token in its own data folder (next to api.php, or wherever DATA_DIR points)
# the first time a request opens its database: open api.php?a=player&name=Notch once to make
# that happen. Paste the contents of that file here and run /weblink reload. The plugin keeps the
# token only here, and sends it as "Authorization: Bearer <token>" on every request that changes something.
# To change it: delete data/token on the website, open that address again, paste the new one.
# Keep it secret: whoever holds it can link any Minecraft account to any website account.
token: ""
# Also report joins and quits, so the site can show "last seen" and time played. Off if you only
# want the linking.
report-sessions: true
# Bedrock players joining through Geyser and Floodgate get a prefix in front of their name (Floodgate's
# username-prefix, "." by default). The website only accepts plain Minecraft names, so this prefix is
# taken off the name before it is sent. Set it to whatever username-prefix says in Floodgate's
# config.yml, or "" if you do not use Floodgate.
floodgate-prefix: "."
# When a player joins, ask the website whether their account is linked (one small request to
# api.php?a=player, which needs no token). /weblink status, the linking screen and the
# PlaceholderAPI placeholders use the answer: %weblink_linked% (true or false),
# %weblink_linked_text% (messages placeholder-linked / placeholder-not-linked) and
# %weblink_account% (the website username, empty when not linked). false skips the request.
check-on-join: true
# Console commands run when a player links, for a rank, coins or a crate key. They run once per
# Minecraft account: linking again, or to another website account, gives nothing more. Who has had
# them is kept in plugins/WebLink/link-rewards.txt. Placeholders: {player}, {uuid}, {account}.
# Example: ["lp user {player} parent add linked", "crates key give {player} vote 1"]
link-rewards:
commands: []
# ------------------------------------------------------------------------------------------------
# THEME
# ------------------------------------------------------------------------------------------------
# Every message below is written against these names, not against hex codes: <accent>Open</accent>
# rather than <#23d3c1>Open</#23d3c1>. Change a colour here and it changes on every screen at
# once. Ordinary MiniMessage still works, so <gradient:#a:#b> and <#ff0000> are fine anywhere.
theme:
accent: "#23d3c1" # your colour: headings and anything the player is meant to click
accent2: "#86e7dd" # a lighter accent, for a second level of emphasis
title: "#f4f7ff" # screen titles
text: "#c2ccdd" # ordinary prose
muted: "#6b7a94" # hints, separators, anything the eye should skip
value: "#ffffff" # the numbers and names the player opened the screen to read
good: "#57e08a"
warn: "#ffc857"
bad: "#ff6b6b"
small-caps: false # ᴇхᴀᴍᴘʟᴇ - a garnish; whole menus in it read badly
# Real Minecraft item pictures beside the buttons and in the chest screens. Drawn from the
# client's own textures, so there is nothing to install and no resource pack: it needs a
# 1.21.9 or newer client, and older ones simply see the buttons as words.
item-icons: true
messages:
prefix: "<accent2><bold>Link</bold></accent2> <muted>»</muted> "
usage: "<text>Usage: </text><value>/weblink <code></value><text>. Get a code from your account page on the website.</text>"
checking: "<text>Checking your code...</text>"
linked: "<good><bold>Linked!</bold></good> <text>This Minecraft account now belongs to </text><value>{account}</value><text> on the website.</text>"
invalid-code: "<bad>That code is not valid or has expired.</bad> <text>Ask for a new one on your account page.</text>"
failed: "<bad>The website could not be reached. Try again in a moment.</bad>"
# The website answered but refused this server's api.token (HTTP 401 or 403). The console says more.
token-rejected: "<bad>The website refused this server's link settings.</bad> <text>Please tell an admin.</text>"
not-configured: "<bad>Website linking is not set up on this server.</bad>"
reloaded: "<value>Config reloaded.</value>"
no-permission: "<bad>You cannot do that.</bad>"
# /weblink status [player]
status-usage: "<text>Usage: </text><value>/weblink status <player></value>"
status-linked: "<text>This Minecraft account is linked to </text><value>{account}</value><text> on the website.</text>"
status-not-linked: "<text>This Minecraft account is not linked yet. Get a code on the website and type </text><value>/weblink <code></value><text>.</text>"
status-other-linked: "<value>{player}</value><text> is linked to </text><value>{account}</value><text> on the website.</text>"
status-other-not-linked: "<value>{player}</value><text> is not linked to a website account.</text>"
status-unknown: "<text>The website has never seen </text><value>{player}</value><text> on this server.</text>"
# PlaceholderAPI: %weblink_linked_text%
placeholder-linked: "<good>Linked</good>"
placeholder-not-linked: "<muted>Not linked</muted>"
# The linking screen.
menu-title: "<value>Link your account</value>"
menu-intro: "<text>Type the code from your account page on the website.</text>"
menu-site: "<text>Get a code at </text><value>{site}</value>"
# Shown when this account is linked already; a new code moves it to the website account that made it.
menu-linked: "<good>Linked to {account}.</good> <text>A new code moves the link.</text>"
menu-field-code: "<text>Code</text>"
menu-link: "<white><icon:link></white><good>Link my account</good>"
menu-link-tip: "<text>Send the code to the website.</text>"
menu-close: "<white><icon:close></white><text>Close</text>"
# One thank-you line with the BuiltByBit review link: once in the console after install and once
# in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off.
review-reminder: trueConfig guide
The annotated summary from the store page. Where it and the default file above differ, the file is what the plugin ships.
api:
url: "https://yoursite.com/weblink/api.php" where you uploaded the backend
token: "" contents of data/token, created by the backend
report-sessions: true send joins and quits for last seen / playtime
Differences between this summary and the shipped files (an example in the summary may use values of its own):
api.url: the summary showshttps://yoursite.com/weblink/api.php, the default file hashttps://example.com/weblink/api.php.
FAQ
Which servers and versions does it run on?
It needs Paper or a Paper fork such as Purpur, because it uses Paper-only APIs (the dialog API for its menus, Adventure text components). Spigot and CraftBukkit are not supported. plugin.yml declares api-version 1.21, the jar is built against Paper API 1.21.11, and it needs Java 21 or newer.
Does it need other plugins?
No other plugin is required (plugin.yml has no hard dependencies). Optional: PlaceholderAPI (plugin.yml softdepend), used when present.
How do I apply config changes?
Edit plugins/WebLink/config.yml and run /weblink reload (reload the config). A restart works too.
Does it run on Folia, or for Bedrock players?
Not tested on Folia, and plugin.yml does not declare folia-supported. Bedrock players (through Geyser) have not been tested either.
What licence do I get?
The licence terms are the BuiltByBit EULA shown on the listing. There is no licence key to enter, and the plugin never contacts a licence server.
Links
- BuiltByBit: WebLink
- Support Discord: discord.gg/KG4ubAZEuw
- All plugins on BuiltByBit: the collection
- More plugins: all plugins
- Custom work: commissions
Support
Questions, bugs or ideas: the active support Discord or the discussion tab on this page. When something breaks, include your server version and the error from the console.
Full setup guide, commands, permissions and config reference: documentation.