Goal
Define one portable blueprint schema shared by full SLS and SLS-LITE.
A blueprint should describe the server being assembled without depending on whether it runs through distributed SLS infrastructure or the local Minecraft-focused SLS-LITE runtime.
The implementations may differ, but a shared field should always express the same intent.
SLS-LITE is still in its release-candidate period, so its experimental blueprint fields may be changed or removed to reach a cleaner shared design. Breaking changes are acceptable if testers receive clear migration instructions and actionable validation errors.
Add individual file state
The shared schema currently provides:
state.volumes for directories
state.copy for assembly inputs
save for retaining an instance
Neither state.copy nor a complete writable directory cleanly represents an individual file with an ongoing persistence relationship.
Proposed shared form:
state:
files:
- name: access-list
source: access/lobby.json
target: config/access.json
mode: persistent
Possible modes:
private: each instance receives an independent writable copy; changes never affect the source.
persistent: one instance owns the file while active and publishes its changes back after stopping.
Example use cases
A private file could provide a default configuration that every new instance may customize independently:
state:
files:
- name: default-settings
source: templates/settings.json
target: config/settings.json
mode: private
A persistent file could retain an access list, player registry, save index, or application-generated configuration without granting the instance write access to an entire directory:
state:
files:
- name: whitelist
source: whitelists/survival.json
target: whitelist.json
mode: persistent
state.copy would remain the general one-way assembly operation. state.files would describe a continuing relationship between a source file and an instance file.
SLS-LITE’s experimental state.persistent_files field can be replaced by this shared form.
Define writable-volume ownership
An rw volume exposes a writable directory directly to an instance, but the blueprint does not currently state whether another instance may use it simultaneously.
Proposed shared form:
state:
volumes:
- name: persistent-data
source: game-data/survival
target: /data
mode: rw
access: exclusive
Possible policies:
exclusive: only one active instance may use the writable source.
shared: concurrent access is intentional and coordinated by the application.
Example use cases
A game world or embedded database generally requires exclusive ownership:
state:
volumes:
- name: world
source: worlds/survival
target: /world
mode: rw
access: exclusive
A directory containing assets designed for concurrent updates may deliberately allow shared access:
state:
volumes:
- name: shared-assets
source: assets/network
target: /assets
mode: rw
access: shared
This lets operators express their intent instead of relying on instance-count conventions.
Full SLS would coordinate exclusive ownership across Protocube and its nodes. SLS-LITE would enforce the same contract locally.
Unify instance limits
SLS-LITE currently adds:
server:
limits:
max_players: 20
max_instances: 2
These concepts can also be useful to full SLS:
max_players defines the public capacity of an instance.
max_instances limits how many instances may be created from a blueprint.
Example use cases
A small match server might permit eight players and scale to four simultaneous matches:
server:
limits:
max_players: 8
max_instances: 4
A persistent survival server might allow many players but only one instance:
server:
limits:
max_players: 50
max_instances: 1
We should decide whether these remain under server.limits or move into a dedicated capacity or scheduling section. SLS-LITE can migrate to whichever structure becomes canonical.
Define a shared blueprint-ID format
SLS-LITE currently restricts IDs to portable lowercase slugs because IDs are used in paths, commands, APIs, process identities, and proxy registrations.
For example:
blueprint:
id: survival_events
A shared format avoids one implementation accepting an ID that becomes ambiguous or unsafe in another environment.
Both projects should publish one grammar and normalization policy.
Use a shared logical storage root
Full SLS and SLS-LITE currently interpret source paths from different physical roots.
The blueprint should use a logical managed-storage path:
state:
volumes:
- name: lobby
source: worlds/lobby
target: /world
mode: cow
Full SLS may resolve this below its configured volume storage, while SLS-LITE resolves it below its plugin-owned volumes directory.
Why this matters
A blueprint containing:
should not need to become:
source: volumes/worlds/lobby
when moved between products. The physical storage layout belongs to the implementation, not the blueprint.
SLS-LITE can remove the extra volumes/ prefix from its canonical schema and provide migration guidance for existing RC blueprints.
Migration approach
Because SLS-LITE is still pre-release, we should prioritize a clean shared schema over preserving every experimental LITE field.
Possible SLS-LITE changes include:
- Replace
state.persistent_files with state.files.
- Change volume and file sources to use the shared logical storage root.
- Move
max_players or max_instances if a better shared section is selected.
- Adopt the shared ID rules.
- Reject old declarations with an error showing the corrected form.
For example:
Blueprint uses the removed field 'state.persistent_files'.
Replace it with 'state.files' and add 'mode: persistent'.
See: <migration documentation>
Full SLS may require a more conservative compatibility or schema-versioning plan because its blueprint format is already established.
Compatibility principles
- Both projects document one canonical schema.
- A shared field has the same meaning in both implementations.
- Physical paths, containers, processes, and node topology remain runtime details.
- Game-specific fields are optional and do not prevent other games from using the schema.
- SLS-LITE may break experimental RC syntax to reach the shared contract.
- Every breaking change includes a migration example and actionable error.
- Existing full-SLS blueprints receive an appropriate compatibility path.
- Runtime-specific capabilities fail clearly rather than silently changing meaning.
Proposed work
Goal
Define one portable blueprint schema shared by full SLS and SLS-LITE.
A blueprint should describe the server being assembled without depending on whether it runs through distributed SLS infrastructure or the local Minecraft-focused SLS-LITE runtime.
The implementations may differ, but a shared field should always express the same intent.
SLS-LITE is still in its release-candidate period, so its experimental blueprint fields may be changed or removed to reach a cleaner shared design. Breaking changes are acceptable if testers receive clear migration instructions and actionable validation errors.
Add individual file state
The shared schema currently provides:
state.volumesfor directoriesstate.copyfor assembly inputssavefor retaining an instanceNeither
state.copynor a complete writable directory cleanly represents an individual file with an ongoing persistence relationship.Proposed shared form:
Possible modes:
private: each instance receives an independent writable copy; changes never affect the source.persistent: one instance owns the file while active and publishes its changes back after stopping.Example use cases
A
privatefile could provide a default configuration that every new instance may customize independently:A
persistentfile could retain an access list, player registry, save index, or application-generated configuration without granting the instance write access to an entire directory:state.copywould remain the general one-way assembly operation.state.fileswould describe a continuing relationship between a source file and an instance file.SLS-LITE’s experimental
state.persistent_filesfield can be replaced by this shared form.Define writable-volume ownership
An
rwvolume exposes a writable directory directly to an instance, but the blueprint does not currently state whether another instance may use it simultaneously.Proposed shared form:
Possible policies:
exclusive: only one active instance may use the writable source.shared: concurrent access is intentional and coordinated by the application.Example use cases
A game world or embedded database generally requires exclusive ownership:
A directory containing assets designed for concurrent updates may deliberately allow shared access:
This lets operators express their intent instead of relying on instance-count conventions.
Full SLS would coordinate exclusive ownership across Protocube and its nodes. SLS-LITE would enforce the same contract locally.
Unify instance limits
SLS-LITE currently adds:
These concepts can also be useful to full SLS:
max_playersdefines the public capacity of an instance.max_instanceslimits how many instances may be created from a blueprint.Example use cases
A small match server might permit eight players and scale to four simultaneous matches:
A persistent survival server might allow many players but only one instance:
We should decide whether these remain under
server.limitsor move into a dedicated capacity or scheduling section. SLS-LITE can migrate to whichever structure becomes canonical.Define a shared blueprint-ID format
SLS-LITE currently restricts IDs to portable lowercase slugs because IDs are used in paths, commands, APIs, process identities, and proxy registrations.
For example:
A shared format avoids one implementation accepting an ID that becomes ambiguous or unsafe in another environment.
Both projects should publish one grammar and normalization policy.
Use a shared logical storage root
Full SLS and SLS-LITE currently interpret source paths from different physical roots.
The blueprint should use a logical managed-storage path:
Full SLS may resolve this below its configured volume storage, while SLS-LITE resolves it below its plugin-owned
volumesdirectory.Why this matters
A blueprint containing:
should not need to become:
when moved between products. The physical storage layout belongs to the implementation, not the blueprint.
SLS-LITE can remove the extra
volumes/prefix from its canonical schema and provide migration guidance for existing RC blueprints.Migration approach
Because SLS-LITE is still pre-release, we should prioritize a clean shared schema over preserving every experimental LITE field.
Possible SLS-LITE changes include:
state.persistent_fileswithstate.files.max_playersormax_instancesif a better shared section is selected.For example:
Full SLS may require a more conservative compatibility or schema-versioning plan because its blueprint format is already established.
Compatibility principles
Proposed work
state.filesand its modes.