Compatibility And Support Matrix

Short Answer

Lapis Lazuli now aims to provide a Lapis-native SDK implemented on Bukkit-family servers.

It does not claim full Bukkit, Spigot, or Paper API parity. Instead, it provides:

  • a TypeScript-first public SDK
  • JavaScript, Node, and Python runtime support
  • a Bukkit/Paper backend implementation of the SDK
  • an explicit unsafe escape hatch for raw backend access

Support Matrix

AreaStatusNotes
TypeScript authoringSupportedPrimary API design target
JavaScript authoringSupportedSame SDK surface through embedded js or external node
Python authoringSupportedPublic lapis_lazuli SDK with Pythonic wrappers over the shared runtime
lapis-lazuliActive redesignService-oriented Lapis API
Bukkit-common SDK coreIn progressRuntime is shaped around capabilities common to Bukkit-family servers
Paper targetSupportedCompile target and smoke-tested path
Bukkit / Spigot validationUnverifiedRuntime contract is moving toward Bukkit-common, but release validation is still Paper-first
Raw Java/backend accessPartially supportedExposed through context.unsafe in embedded js; intentionally reduced in node

What The SDK Covers Today

The public SDK now centers on:

  • app
  • commands
  • events
  • tasks
  • players
  • worlds
  • entities
  • items
  • inventory
  • chat
  • effects
  • recipes
  • bossBars
  • scoreboards
  • storage
  • http
  • config
  • unsafe

This is a Lapis API, not a Java facade.

What unsafe Means

unsafe keeps low-level access available when needed:

  • Java class loading
  • raw backend handles
  • generic Java event subscription
  • console command dispatch

That path is intentionally explicit so normal plugin code stays inside the Lapis SDK. For the node engine, only console command dispatch remains available.