Skip to content

Complete Configuration Reference

Every option in config.yml explained with examples and defaults.

plugins/InviteMe/config.yml

After editing, reload with: /im reload


Key: storage.type | Type: string | Default: sqlite

Storage backend for invite data.

Options:

  • json - Text files (legacy, small servers only)
  • sqlite - Local database file (recommended)
  • mysql - MySQL/MariaDB remote
  • postgresql - PostgreSQL remote
storage:
type: sqlite

Use only if storage.type is mysql or postgresql.

Key: storage.remote.host | Type: string | Default: localhost

Database server hostname.

storage:
remote:
host: "db.example.com"

Key: storage.remote.port | Type: integer | Default: 3306 (MySQL) or 5432 (PostgreSQL)

Database server port.

storage:
remote:
port: 3306

Key: storage.remote.database | Type: string | Default: inviteme

Database name.

storage:
remote:
database: "inviteme"

Key: storage.remote.username | Type: string | Default: root

Database user.

storage:
remote:
username: "inviteme_user"

Key: storage.remote.password | Type: string | Default: password

Database password. Keep secret!

storage:
remote:
password: "SecurePassword123"

Key: storage.remote.pool-size | Type: integer | Default: 10

Max simultaneous connections. Recommendation:

  • Small servers (1-5 players): 5-10
  • Medium (5-50 players): 10-20
  • Large (50+ players): 20-50
storage:
remote:
pool-size: 15

Type: string | Default: en

Plugin message language.

Options: en (English), es (Spanish), de (German)

language: "en"

Key: console.ansi-colors | Type: boolean | Default: true

Enable ANSI colors in console (✓, ✗, ⚠). Set false on Windows or log collectors without ANSI support.

console:
ansi-colors: true

Key: version-checker.enabled | Type: boolean | Default: false

Check for updates on Modrinth.

version-checker:
enabled: false

Key: version-checker.interval-hours | Type: integer | Default: 24

How often to check (0 = startup only).

version-checker:
interval-hours: 24

Key: version-checker.notify-admins | Type: boolean | Default: true

Notify OPs and invite.admin in-game about new versions.

version-checker:
notify-admins: true

Key: version-checker.notify-for | Type: list | Default: [release]

Version types to notify about: release, beta, alpha.

version-checker:
notify-for:
- release

Type: integer | Default: 5

Default invitations per player. Overrideable by:

  • LuckPerms permission invite.number.X
  • LuckPerms group limits
  • plugin-xp-slots progression (if enabled)

Note: Console and admins have no limit.

max-invites: 5

Type: integer | Default: 30

Seconds between /invite uses per player. 0 = disabled.

Note: Players with invite.admin bypass this.

invite-cooldown: 30

Key: luckperms.enabled | Type: boolean | Default: false

Enable LuckPerms group-based invite limits.

luckperms:
enabled: false

Key: luckperms.default-group | Type: string | Default: default

Group assigned to new invited players (must exist in LuckPerms).

luckperms:
default-group: "member"

Key: luckperms.group-limits | Type: map<string, integer> | Default: {}

Per-group invite limits. Priority: invite.number.X permission > group-limits > max-invites.

luckperms:
enabled: true
group-limits:
member: 3
vip: 10
moderator: 20

Key: whitelist-sync.enabled | Type: boolean | Default: true

Keep vanilla whitelist in sync with InviteMe data.

whitelist-sync:
enabled: true

Key: whitelist-sync.auto-register-console | Type: boolean | Default: true

Auto-register players added via console to InviteMe.

whitelist-sync:
auto-register-console: true

Key: whitelist-sync.sync-interval-minutes | Type: integer | Default: 60

How often to run background sync (in minutes).

whitelist-sync:
sync-interval-minutes: 60

Key: whitelist-sync.cleanup-removed | Type: boolean | Default: false

Remove all players from whitelist when syncing. WARNING: Dangerous!

whitelist-sync:
cleanup-removed: false

Key: whitelist-sync.notify-on-sync | Type: boolean | Default: false

Notify admins on each sync completion.

whitelist-sync:
notify-on-sync: false

Type: string | Default: native

How players are checked for access on join.

Options:

  • native - Vanilla whitelist controls access (recommended)
  • plugin - InviteMe controls access. Requires white-list=false in server.properties. Bypass: OP or invite.admin
access-control-mode: native

Key: temp-invites.check-interval-minutes | Type: integer | Default: 60

How often to check for and revoke expired temporary invites (in minutes).

temp-invites:
check-interval-minutes: 60

Key: action-log.max-entries | Type: integer | Default: 0

Max action log entries to keep. 0 = unlimited.

action-log:
max-entries: 0

Key: action-log.profile-history-limit | Type: integer | Default: 5

Recent action entries shown per player in /im log list.

action-log:
profile-history-limit: 5

Controls how deep the invite chain can go. When enabled, players who were invited by another player (not directly by an admin or console) can be restricted from inviting others.

How it works: every invite record stores a depth value.

  • Console or admins (op / invite.admin) invite someone → that player gets depth 0
  • A depth-0 player invites someone → that player gets depth 1
  • A depth-1 player invites someone → depth 2, and so on

The max-depth value sets the highest depth that can still send invites. Players at or above that depth are blocked.

Example with max-depth: 1:

Who invitesInvited player depthCan they invite?
Admin / Console0✅ Yes
Depth-0 player1❌ No (1 >= max-depth)

Key: chain-break.enabled | Type: boolean | Default: false

Enable invite chain restriction. When false, all players can freely invite up to their max-invites limit as normal.

chain-break:
enabled: false

Key: chain-break.max-depth | Type: integer | Default: 1

Maximum invite depth that can still invite others. Players whose depth equals or exceeds this value are blocked.

ValueEffect
0Only admins/console can invite (no player can invite)
1Only players directly invited by admin/console can invite
2Two generations can invite; the third cannot
chain-break:
max-depth: 1

Key: join-notifications.welcome-message.enabled | Type: boolean | Default: true

Send welcome message to new players on first join (shows inviter).

join-notifications:
welcome-message:
enabled: true

Key: join-notifications.inviter-notification.enabled | Type: boolean | Default: true

Notify inviter when their invitee joins for the first time.

join-notifications:
inviter-notification:
enabled: true

XP boost for players directly linked by an invite (inviter ↔ invitee). Activates when both online, same world, within radius.

Key: mutual-invite-boost.enabled | Type: boolean | Default: true

Enable the boost system.

mutual-invite-boost:
enabled: true

Key: mutual-invite-boost.radius | Type: map<string, integer> | Default: {overworld: 50, nether: 75, end: 100}

Activation radius (blocks) per world.

mutual-invite-boost:
radius:
overworld: 50
nether: 75
end: 100
# Custom worlds (optional):
# mining_world: 60

Key: mutual-invite-boost.xp-multiplier | Type: decimal | Default: 1.5

XP gain multiplier. 1.0 = normal, 1.5 = +50%, 2.0 = +100%.

mutual-invite-boost:
xp-multiplier: 1.5

Key: mutual-invite-boost.check-interval | Type: integer | Default: 5

Proximity check interval (seconds). Recommended: 5-10.

mutual-invite-boost:
check-interval: 5

Key: mutual-invite-boost.show-actionbar | Type: boolean | Default: true

Show actionbar message when boost starts/stops.

mutual-invite-boost:
show-actionbar: true

Key: mutual-invite-boost.particle-effects | Type: boolean | Default: true

Particle effects on boost transitions (happy villager = start, red dust = end).

mutual-invite-boost:
particle-effects: true

Key: mutual-invite-boost.cooldown-seconds | Type: integer | Default: 30

Cooldown after boost ends (shown in actionbar).

mutual-invite-boost:
cooldown-seconds: 30

Key: mutual-invite-boost.max-boost-partners | Type: integer | Default: 3 (Range: 1-10)

Max simultaneous boost partners per player.

mutual-invite-boost:
max-boost-partners: 3

Key: mutual-invite-boost.max-multiplier | Type: decimal | Default: 2.5

Cap on total multiplier (prevents stacking abuse).

mutual-invite-boost:
max-multiplier: 2.5

Key: mutual-invite-boost.min-xp-for-boost | Type: integer | Default: 1

Minimum XP gain to trigger boost.

mutual-invite-boost:
min-xp-for-boost: 1

Key: mutual-invite-boost.max-xp-per-event | Type: integer | Default: 1000

Max XP per single event (prevents exploit).

mutual-invite-boost:
max-xp-per-event: 1000

Key: mutual-invite-boost.streak-window-seconds | Type: integer | Default: 10 (Range: 2-60)

Seconds without XP before streak resets (“Combo broken!“).

mutual-invite-boost:
streak-window-seconds: 10

Key: mutual-invite-boost.xp-sharing.enabled | Type: boolean | Default: true

Share XP with boost partners.

mutual-invite-boost:
xp-sharing:
enabled: true

Key: mutual-invite-boost.xp-sharing.share-percentage | Type: decimal | Default: 0.25

Percentage of earned XP given to each partner. 0.25 = 25%.

mutual-invite-boost:
xp-sharing:
share-percentage: 0.25

Key: mutual-invite-boost.stats-flush-interval | Type: integer | Default: 30

Seconds between database flushes. 0 = write immediately (not recommended).

mutual-invite-boost:
stats-flush-interval: 30

Unlock extra invite slots via Plugin XP from boost gameplay.

Key: plugin-xp-slots.enabled | Type: boolean | Default: false

Enable Plugin XP progression. Set false to use classic limits (max-invites / perms / groups).

plugin-xp-slots:
enabled: false

Key: plugin-xp-slots.invites-per-level | Type: integer | Default: 1

Extra invite slots unlocked per Plugin XP level.

plugin-xp-slots:
invites-per-level: 1

Key: plugin-xp-slots.levels | Type: map<integer, integer> | Default: {1: 100, 2: 300, 3: 700, 4: 1500, 5: 3000}

XP thresholds per level. Level 0 = base limit (no XP required).

plugin-xp-slots:
levels:
1: 100
2: 300
3: 700
4: 1500
5: 3000

Key: plugin-xp-slots.levelup-sound | Type: string | Default: ENTITY_PLAYER_LEVELUP

Bukkit Sound enum name played on level-up.

plugin-xp-slots:
levelup-sound: ENTITY_PLAYER_LEVELUP

Auto-revoke invites to players who never join.

Key: inactivity-slot-return.enabled | Type: boolean | Default: false

Enable auto-revoke.

inactivity-slot-return:
enabled: false

Key: inactivity-slot-return.days | Type: integer | Default: 30

Days before revoking if never joined. Once a player joins even once, check stops permanently.

inactivity-slot-return:
days: 30

Prevent rapid re-invites of removed players.

Key: re-invite-restrictions.enabled | Type: boolean | Default: false

Enable restrictions.

re-invite-restrictions:
enabled: false

Key: re-invite-restrictions.max-removals | Type: integer | Default: 3

Removals before blocking (0 = disabled).

re-invite-restrictions:
max-removals: 3

Key: re-invite-restrictions.cooldown-days | Type: integer | Default: 7

Days before they can be re-invited after removal (0 = disabled).

re-invite-restrictions:
cooldown-days: 7

Send HTTP POST requests to external URLs on invite events.

Key: webhooks.enabled | Type: boolean | Default: false

Enable webhooks.

webhooks:
enabled: false

Key: webhooks.timeout-ms | Type: integer | Default: 3000

Request timeout in milliseconds.

webhooks:
timeout-ms: 3000

Key: webhooks.events | Type: map<string, string> | Default: all empty

Event URLs (empty = disabled for that event). Available events: invite, uninvite, expired, inactive_removed.

webhooks:
events:
invite: "https://example.com/webhook/invite"
uninvite: "https://example.com/webhook/uninvite"
expired: ""
inactive_removed: ""

Configuration for the /im report command, which generates a diagnostic snapshot and uploads it to a paste service, returning a clickable URL.

Key: report.backend | Type: string | Default: pastefox

Upload backend to use.

ValueDescription
pastefoxpastefox.com — supports expiry, visibility, and password protection
mcloggsmclo.gs — anonymous, no configuration needed, Minecraft-specific log highlighting
report:
backend: pastefox
FeaturePasteFoxmclo.gs
Log highlightingGeneric (log language)✅ Minecraft-specific
Expiry control✅ Configurable❌ No control
Visibility✅ PUBLIC / UNLISTED / PRIVATE❌ Always public
Password protection✅ Optional❌ Not supported
API keyOptional (anonymous supported)Not needed
Anonymous limitPUBLIC only, max 7 days

Key: report.pastefox.api-key | Type: string | Default: "" (empty)

Optional API key for PasteFox. Get one at pastefox.com/dashboard/api-keys.

Without a key: reports are forced to PUBLIC and expire after at most 7 days (enforced by PasteFox).

report:
pastefox:
api-key: "pk_your_api_key_here"

Key: report.pastefox.visibility | Type: string | Default: UNLISTED

Visibility of uploaded reports. Requires an api-key for UNLISTED and PRIVATE.

OptionDescription
PUBLICAnyone can find it via search
UNLISTEDOnly accessible with the direct URL (recommended)
PRIVATERequires API key to view
report:
pastefox:
visibility: UNLISTED

Key: report.pastefox.expires-hours | Type: integer | Default: 24

How long the report stays available, in hours. 0 = never expires.

  • Without api-key: maximum 168 hours (7 days), enforced by PasteFox
  • With api-key: no upper limit
report:
pastefox:
expires-hours: 24

Key: report.pastefox.password | Type: string | Default: "" (empty)

Optional password to protect the report (4–100 characters). Leave empty to disable.

report:
pastefox:
password: ""

storage:
type: sqlite
language: "en"
access-control-mode: native
max-invites: 5
invite-cooldown: 30
mutual-invite-boost:
enabled: true
xp-multiplier: 1.5
version-checker:
enabled: false
storage:
type: mysql
remote:
host: "db.production.com"
port: 3306
database: "inviteme"
username: "inviteme_user"
password: "SecurePassword123"
pool-size: 20
language: "en"
access-control-mode: native
max-invites: 3
luckperms:
enabled: true
default-group: "member"
group-limits:
member: 3
vip: 10
moderator: 20
admin: 99
mutual-invite-boost:
enabled: true
xp-multiplier: 1.5
version-checker:
enabled: true
notify-admins: true
storage:
type: sqlite
language: "en"
access-control-mode: plugin
max-invites: 5
# Required: set white-list=false in server.properties
mutual-invite-boost:
enabled: true
storage:
type: sqlite
max-invites: 1 # Start small
mutual-invite-boost:
enabled: true
radius:
overworld: 50
nether: 75
end: 100
xp-multiplier: 2.0
show-actionbar: true
particle-effects: true
xp-sharing:
enabled: true
share-percentage: 0.25
# Only directly invited players (depth 0) can invite others.
# Their invitees (depth 1) cannot invite anyone.
chain-break:
enabled: true
max-depth: 1
max-invites: 5
storage:
type: sqlite
max-invites: 1 # Base limit
plugin-xp-slots:
enabled: true
invites-per-level: 1
levels:
1: 100
2: 300
3: 700
4: 1500
5: 3000
mutual-invite-boost:
enabled: true

After editing config.yml:

/im reload

Check changes applied:

/im debug

What reloads: config.yml, language files, LuckPerms group limits, access control mode

What does NOT reload: Active database connections (requires restart), cached player heads in GUI


“Database connection failed”

  • Check host/port/credentials in config.yml
  • Ensure database exists
  • Check firewall rules

“Changes not applied”

  • Run /im reload
  • Check for YAML syntax errors
  • Verify file permissions

“LuckPerms limits not working”

  • Ensure LuckPerms installed
  • Set luckperms.enabled: true
  • Run /im reload
  • Check group exists: /lp listgroups