Compatibility
Minecraft: Java Edition
Platforms
Supported environments
Links
Tags
Creators
Details
2Core
Run a second Fabric server as a separate JVM process — one mod, two roles.
What is this?
2Core lets you run two Minecraft servers on the same machine from a single mod. The primary server launches and manages the secondary server as an external JVM process. Both servers use the same mod JAR — the role (primary or secondary) is determined automatically at startup.
No plugins, no proxies, no extra software required.
Features
- One mod, two servers — install once, the mod handles both roles automatically
- Cross-server chat sync — chat messages, join/leave notifications, and death messages are relayed between servers in real time
- Player list —
/listothershows online players on the other server (available to all players) - Full process management — start, stop, restart the secondary server with simple commands
- Console relay — optionally mirror the secondary server's console output to the primary
- Auto-start — optionally start the secondary server automatically when the primary starts
- Configurable messages — customize join/leave/chat/death message formats independently for each server with color code support (
&6,&a, etc.) - Safe IPC — servers communicate over a localhost-only TCP socket, no external exposure
Requirements
| Minecraft | 1.21.1 |
| Fabric Loader | ≥ 0.18.6 |
| Fabric API | any |
| Fabric Language Kotlin | ≥ 1.13.0 |
Server-side only. No client installation needed.
Setup
- Install the mod on your primary server (along with Fabric API and Fabric Language Kotlin)
- Start the primary server — the mod creates a
2core/folder and a2core/2core.propertiesconfig file - Place your secondary server files inside
2core/(or configurecopy_modeto copy them automatically) - Run
/2core startto launch the secondary server
The mod copies itself into 2core/mods/ automatically — no need to install it separately on the secondary.
Commands
Available on both servers (all players)
| Command | Description |
|---|---|
/listother |
Show online players on the other server |
Admin commands — primary server only (/2core ...)
| Command | Description |
|---|---|
/2core start |
Start the second server |
/2core stop |
Stop the second server |
/2core restart |
Restart the second server |
/2core status |
Show status, config, and IPC connection info |
/2core chatlink on|off |
Enable or disable cross-server sync |
/2core console on|off |
Toggle secondary console relay to primary |
/2core cmd <command> |
Send a command to the secondary server |
/2core set <key> <value> |
Change a config value without editing the file |
/2core help |
Show command list |
Configuration
Config file: 2core/2core.properties
| Key | Default | Description |
|---|---|---|
copy_mode |
none |
none / launcher / full — how to copy server files to 2core/ |
launcher_jar |
fabric-server-launch.jar |
Fabric launcher jar name |
vanilla_jar |
server.jar |
Vanilla server jar name |
port |
25566 |
Port for the secondary server |
max_ram_mb |
1024 |
Max RAM for the secondary JVM (-Xmx) |
auto_start |
false |
Start secondary automatically when primary starts |
auto_console |
false |
Enable console relay automatically on startup |
chat_link |
false |
Sync chat, join, leave, and death events between servers |
ipc_port |
0 |
IPC port for inter-server communication (0 = auto) |
join_message_for_primary |
&6%player% joined the second server |
Shown on primary when a player joins the secondary |
join_message_for_secondary |
&6%player% joined the main server |
Shown on secondary when a player joins the primary |
leave_message_for_primary |
&6%player% left the second server |
Shown on primary when a player leaves the secondary |
leave_message_for_secondary |
&6%player% left the main server |
Shown on secondary when a player leaves the primary |
chat_format_for_primary |
&7[&62nd&7] &f<%player%> %message% |
Chat format on primary for messages from secondary |
chat_format_for_secondary |
&7[&61st&7] &f<%player%> %message% |
Chat format on secondary for messages from primary |
death_format_for_primary |
&7[&62nd&7] &c%message% |
Death message format on primary from secondary |
death_format_for_secondary |
&7[&61st&7] &c%message% |
Death message format on secondary from primary |
Placeholders: %player%, %message%. Color codes: &0–&9, &a–&f, &l, &o, &r, etc.
How it works
When the primary server starts, it launches the secondary server as a child JVM process with -Dtwocore.role=secondary. Both JVMs run the same mod JAR — the secondary detects its role via the system property and skips all process management logic. Inter-server communication (chat sync, player list queries) happens over a localhost TCP socket managed by the mod.


