
SchemFlow
Lightning‑fast schematic management for Minecraft servers (S3/MinIO-backed).
🌊 SchemFlow
Cloud‑native schematic manager for Paper/Purpur 1.21+. Purpose‑built for multi‑server networks and automated build pipelines: push once to S3/MinIO, every node can fetch/paste instantly. 100% backed by S3‑compatible object storage (AWS S3, MinIO, Cloudflare R2, Wasabi, etc.) — no shared disk, no rsync, no manual copying. Includes group isolation, safe trash + restore, undo/redo for deletes, and optional world provisioning with minimal runtime overhead.
What is it?
SchemFlow centralizes schematics in S3/MinIO and gives you fast in‑game commands to upload, distribute, and paste builds across any number of servers—without copying files manually.
Why use SchemFlow?
- One push → all servers see it
- Safer deletes (trash + restore)
- Group isolation + rename + delete lifecycle
- Undo/redo integration for paste/delete
- Low overhead (transient cache only)
- Optional world provisioning for hubs/spawns
Requirements
- Minecraft: 1.21+
- Java: 21+
- Server: Paper or Purpur
Dependencies
Required (choose ONE):
- WorldEdit 7.2.18+
OR - FastAsyncWorldEdit (FAWE) (matching your server version)
Optional Extension:
- Skript 2.7+ (adds simple automation scripting of SchemFlow commands; not required for core features)
Object Storage Advantages
Why S3 instead of the local schematics/ folder?
- Single authoritative store across multiple servers (build → staging → prod) with zero manual sync
- Perfect for network hubs, build clusters, ephemeral containers, CI-driven content deployment
- Horizontal scaling: any node with credentials can read/write immediately (no warmup copy step)
- Works with any S3‑compatible backend: AWS S3, MinIO, Cloudflare R2, Wasabi, Backblaze B2 (S3 API), DigitalOcean Spaces, etc.
- No FTP / rsync / NFS mount complexity; just object keys over HTTPS
- Low CPU / memory overhead (short‑lived temp export + ephemeral paste cache only)
- Trash namespace prevents accidental permanent deletion
- Clean path layout:
SF_<group>/name.schm(data) +.trash/(soft deleted) - Leverage provider durability, lifecycle, replication & CDN (if fronted) for distribution
Features
- S3/MinIO storage (configurable
rootDir,defaultGroup). - Group path pattern:
SF_<group>/<name>.schm+ flat trash:.trash/<name>.schm. - Address schematics by simple
nameorgroup:name. - Core ops: upload, fetch, paste, delete (soft), restore, list, cache refresh.
- Trash safety layer + irreversible clear with
--confirm. - Group lifecycle: create / delete (preview + confirm) / rename.
- WorldEdit integration flags:
-eentities,-aignore air,-bbiomes (default on). - Undo/redo for SchemFlow deletes + fallback to WorldEdit history for pastes.
- Independent selection commands (
pos1,pos2). - World provisioning (
provision <world>). - Ephemeral paste cache (auto purged) keeps disk clean.
Ephemeral Paste Cache
Operational pastes use plugins/SchemFlow/work/cache/. Contents are transient and cleared on enable, reload, or disable. Only /SchemFlow fetch writes persistent files to the configured download directory.
Installation
- Download
SchemFlow-<version>-all.jar. - Place into
plugins/. - Install WorldEdit OR FAWE (not both). Skript optional.
- Start the server once to generate
plugins/SchemFlow/config.yml. - Configure S3/MinIO credentials + bucket. Restart.
Minimal Config Snippet
endpoint: "play.minio.local:9000" # or https://s3.example.com
secure: true
accessKey: "ACCESS_KEY"
secretKey: "SECRET_KEY"
bucket: "schematics"
extension: "schm"
cacheRefreshSeconds: 60
storage:
rootDir: "FlowStack/SchemFlow"
defaultGroup: "default"
Quick Start
- Select region:
/SchemFlow pos1, move,/SchemFlow pos2. - Upload:
/SchemFlow upload lobby_spawn -e -group lobby. - Paste:
/SchemFlow paste lobby:spawn -a(ignore air) or/SchemFlow paste spawn(default group). - List all grouped schematics:
/SchemFlow list. - Delete (soft):
/SchemFlow delete lobby:spawn→ restore later. - Restore:
/SchemFlow restore spawn -group lobby. - Permanently clear trash:
/SchemFlow trash clear --confirm. - Rename a group:
/SchemFlow group rename oldName newName. - Provision a world:
/SchemFlow provision buildworld. - Refresh cache:
/SchemFlow cache.
Commands
/SchemFlow help
/SchemFlow list
/SchemFlow fetch [group:]name [destDir] | /SchemFlow fetch /absolute/path(.schm) [destDir]
/SchemFlow pos1 | /SchemFlow pos2
/SchemFlow upload <id> [-e] [-a] [-b] [-group <name>]
/SchemFlow paste [group:]name [-e] [-a] [-b]
/SchemFlow delete [group:]name
/SchemFlow restore <name> [-group <dest>]
/SchemFlow trash # list trash
/SchemFlow trash clear --confirm
/SchemFlow undo | /SchemFlow redo
/SchemFlow cache | /SchemFlow reload
/SchemFlow groups
/SchemFlow group create <name>
/SchemFlow group delete <name> [--confirm]
/SchemFlow group rename <old> <new>
/SchemFlow provision <world>
Flags
-einclude entities (upload/paste)-aignore air blocks (paste)-binclude biomes (paste; enabled by default if omitted)-group <name>target a non-default group
Permissions
| Node | Purpose | Default |
|---|---|---|
schemflow.admin | All commands | op |
schemflow.help | View help | true |
schemflow.list | List schematics | true |
schemflow.fetch | Download schematic | true |
schemflow.pos1 | Set pos1 | true |
schemflow.pos2 | Set pos2 | true |
schemflow.upload | Upload schematic | op |
schemflow.paste | Paste schematic | op |
schemflow.delete | Soft delete schematic | op |
schemflow.restore | Restore from trash | op |
schemflow.trash.clear | Clear trash permanently | op |
schemflow.cache | Refresh cache | op |
schemflow.reload | Reload config | op |
schemflow.provision | Provision world | op |
schemflow.groups | List groups | op |
schemflow.group.create | Create group | op |
schemflow.group.delete | Delete group | op |
schemflow.group.rename | Rename group | op |
Links
- GitHub: https://github.com/c4g7-dev/SchemFlow
- Releases: https://github.com/c4g7-dev/SchemFlow/releases
- Wiki: https://github.com/c4g7-dev/SchemFlow/wiki
- Issues: https://github.com/c4g7-dev/SchemFlow/issues
- Discord: https://discord.gg/eNNbqS4N2H
License
Apache-2.0 — see LICENSE and NOTICE.
Notes
- WorldEdit or FAWE must be present (but not both).
- Trash + restore protect against accidental loss; use
--confirmfor irreversible operations. - Biome copying is on unless
-bis excluded and flags parsing disables it. - Ephemeral cache avoids clutter; prefer
/SchemFlow fetchfor persistent exports.