Concepts · 01

Architecture

SilkMC keeps Folia's regional multithreading model as the core execution architecture. The SilkMC additions sit on top of that model as small, reviewable patches — a compatibility classifier, a scheduler bridge, a teleport bridge, and a plugin lifecycle wrapper.

Design goals

Execution model

SilkMC additions

Compatibility policy

gg.tame.silkmc.server.compat.SilkPluginCompatibility — warn vs strict mode for unmarked plugins, plus operator-friendly classification.

Compatibility →
Scheduler bridging

SilkSchedulerBridge routes legacy BukkitScheduler.runTask* calls to the Global Region Scheduler so they do not throw.

thread ownership
Teleport bridging

Legacy sync Entity.teleport() and Player.teleport() route to teleportAsync when safe.

region-aware
Lifecycle wrapping

beginLifecycle / endLifecycle thread-local context lets failures be classified with a phase like startup or async scheduler task.

diagnostics
Operator surface

Configurable compatibility modes via silkmc-compatibility.yml, plus per-plugin overrides and the /silkmc command.

Commands →
Release scaffolding

Benchmarking helpers, smoke-test CI, and a curated plugin pack used to validate compatibility before tagging.

Testing →

Component map

+----------------------------------------------------------+
|                       SilkMC Server                      |
|                                                          |
|  +--------------------+   +---------------------------+  |
|  | Plugin Manager     |-->| SilkPluginCompatibility   |  |
|  +--------------------+   |  - policy (yml-backed)    |  |
|            |              |  - lifecycle context      |  |
|            |              |  - failure classifier     |  |
|            v              +---------------------------+  |
|  +--------------------+              ^                   |
|  | CraftScheduler     |--------------+                   |
|  | (legacy sync API)  |                                  |
|  +--------------------+                                  |
|            |                                             |
|            v                                             |
|  +--------------------+   +---------------------------+  |
|  | SilkSchedulerBridge|-->| Global Region Scheduler   |  |
|  +--------------------+   +---------------------------+  |
|                                                          |
|  +--------------------+   +---------------------------+  |
|  | CraftEntity        |-->| teleportAsync             |  |
|  | / CraftPlayer      |   | (region-aware teleport)   |  |
|  +--------------------+   +---------------------------+  |
|                                                          |
|  +--------------------+   +---------------------------+  |
|  | Region Threading   |-->| Per-region ticking worker |  |
|  | (upstream Folia)   |   +---------------------------+  |
|  +--------------------+                                  |
+----------------------------------------------------------+

Where the patches live

Where new compatibility shims should go

Add new shims in gg.tame.silkmc.server.compat (or a sibling package) and integrate them through small, reviewable patches against paper-server. SilkMC favors additive compatibility layers over broad rewrites of upstream code.