Concepts · 03

Compatibility

SilkMC is designed to be more forgiving than upstream Folia without hiding correctness problems. This page describes the compatibility policy, configurable behavior, and the boundaries SilkMC will not cross for the sake of compatibility.

Current policy

Classification

ClassTriggerAction
SAFEDeclares silk-supported or folia-supported.Load normally.
COMPATIBLEUses Bukkit/Spigot/Paper APIs but no unsafe patterns.Load under the shim layer (scheduler bridge, teleport bridge).
UNSAFEAsync scheduling combined with direct NMS-level world access.Refuse to load; print a structured rejection log; continue startup.
UNKNOWNNo detectable APIs or unreadable JAR.Refuse under strict mode; allowed with warning if allow-unknown-plugins: true.

Modes

Fail-safe behavior

When SilkMC cannot safely emulate a legacy expectation, it should:

  1. Stop the unsafe operation.
  2. Disable the plugin when the failure matches a known compatibility boundary.
  3. Log a clear operator-facing reason.
  4. Preserve server stability.

SilkMC currently classifies and disables plugins for known startup or task-time failures such as:

Each classified failure produces a log entry with the plugin display name, the lifecycle phase (startup, async scheduler task, global region task, …), a one-paragraph operator-facing reason, and optionally the original stack trace.

Stability rules

never
SilkMC will not, under any compatibility policy:
  • Fake region ownership to silence a thread check.
  • Pretend a cross-region operation succeeded when it actually didn't write.
  • Introduce a fake global "main" thread that mutates world state.
  • Corrupt world or player data to keep a plugin running.
When in doubt, SilkMC fails the operation cleanly and disables the plugin.

Known limitations