Shtreimel in FTB Skies 2: Aero
FTB Skies 2: Aero 1.13.0 ships version 0.6.0 · First seen in 1.0.3
Shtreimel is a mod in FTB Skies 2: Aero 1.13.0, where it is version 0.6.0. No verified summary yet. A full guide is planned.
Shtreimel guide for FTB Skies 2: Aero
Last verified for FTB Skies 2: Aero v1.10.0 on Oct 15, 2026 · text last changed Oct 15, 2026
This is the newest guide. It hasn't been checked against 1.13.0 yet.
- Sections
- 4
Every recipe and number here was checked against FTB Skies 2: Aero 1.10.0, read from the running game on Sep 22, 2026.
What is Shtreimel?
Shtreimel is part of the mod list in FTB Skies 2: Aero 1.10.0, and the pack ships version 0.5.0 of it. The jar is the NeoForge build for Minecraft 1.21.1.[1]
It isn't a newcomer to the pack either: it was already included in version 1.0.3 or earlier, so it has been around for a long time.[1]
Unverified What Shtreimel adds to the game (its items, blocks or mechanics) could not be confirmed from the pack files, so this guide doesn't describe its features.
How do you get started with Shtreimel?
1 part
This section covers Shtreimel's settings, because those are what the sources here show for it in this pack. The config describes a tool driven by /shtreimel commands that watches sub-levels, which its settings describe in terms of ships and contraptions on Sable's physics. So your first steps are about checking a few settings, not crafting anything.[2]
What to check first, in order
- Make sure the heat detector is on with shtreimel.lag.enabled. It is enabled in this pack. Once a dimension's physics slice average passes shtreimel.lag.ewmaThresholdMs, the detector starts naming suspects. That is set to 5 ms here, the same as the mod default and well below a 50 ms tick budget.[2]
- Know the delete safety net. shtreimel.delete.requireConfirm is true, so the /shtreimel delete subcommands need an explicit --confirm flag. shtreimel.delete.requireNameConfirm is false, so deleting a named sub-level does not ask you to retype the name.[2]
- Leave occupancy tracking on. shtreimel.occupancy.enabled is true, which is what lets the who history subcommands work. With shtreimel.occupancy.persist on, the record of who was last on a ship survives a restart.[2]
- Know how often boardings are sampled. shtreimel.occupancy.sampleIntervalTicks is 10 ticks here, the same as the mod default. A boarding shorter than one interval may be missed entirely.[2]
- Know where the audit trail goes. shtreimel.audit.fileEnabled is true, so destructive audit lines are appended to an audit.log file in the world's shtreimel folder, as well as going to the server log.[2]
Unverified Whether Shtreimel has any craftable items or quests in this pack is not shown by the sources here, so none are listed. Recipes and quest chapters would be where that is told, and they are not part of the sources for this section.
How does Shtreimel work?
7 parts
Heads up: Shtreimel doesn't add machines, power or fluid systems that the sources describe. What the pack's server config shows is a diagnostic and admin toolkit for physics sub-levels (the config mentions ships and contraptions, Sable physics and Create). So this section walks through how its systems behave, based on the pack's config file.[2]
Every value below is what the pack sets. Where the config lists a mod default, the pack's value matches it. Where no default is listed, the number is simply the pack's setting.[2]
The heat detector
The lag detector is switched on with shtreimel.lag.enabled. It checks the physics time of each dimension, and once that rises above shtreimel.lag.ewmaThresholdMs (5 ms in the pack, well below a 50 ms tick budget) it starts naming suspects. Lower the value if you want earlier warnings.[2]
Scans are rate limited. shtreimel.lag.scanCooldownSeconds is 30 seconds, so a healthy server pays almost nothing per tick. Each incident names the top shtreimel.lag.suspectCount suspects (1 here), and it needs shtreimel.lag.consecutiveHotScans hot scans in a row (also 1). The same sub-level can't be named again for 300 seconds, set by shtreimel.lag.repeatCooldownSeconds, which keeps your log from filling with repeats.[2]
Full diagnostic snapshots on incidents are off in the pack (shtreimel.lag.captureIncidentSnapshot is false). If you turn them on, shtreimel.lag.incidentSnapshotCooldownSeconds spaces them 300 seconds apart.[2]
There is also a sample recorder for autotuning. It is on, records one sample every 60 seconds and keeps 1,440 minutes of history. Those are shtreimel.lag.autotune.recordSamples, shtreimel.lag.autotune.sampleIntervalSeconds and shtreimel.lag.autotune.bufferMinutes. A shorter interval gives denser history but costs more memory.[2]
How suspects are ranked
Suspects are ordered with weighted scores. The heaviest weight is shtreimel.ranking.weights.blockEntities at 1.5. Then come shtreimel.ranking.weights.loadedChunks, shtreimel.ranking.weights.volume and shtreimel.ranking.weights.entitiesInBoundingBox at 1 each, and shtreimel.ranking.weights.trackingPlayers at 0.75.[2]
Angular speed, linear speed, footprint, force groups, network drift and reaction wheels all sit at 0.5. Force-load tickets, connected sub-levels and loading dependencies are at 0. The config says the last two are disabled because traversing connected actors or dependencies is more expensive.[2]
Each factor also has a soft cap. A few examples: shtreimel.ranking.softCaps.blockEntities is 64, shtreimel.ranking.softCaps.loadedChunks is 64, shtreimel.ranking.softCaps.entitiesInBoundingBox is 32 and shtreimel.ranking.softCaps.trackingPlayers is 8. The pack leaves all of these at the mod defaults.[2]
Freezing sub-levels
Freezing is capped at shtreimel.freeze.maxConcurrent sub-levels per dimension (16). The config says the cap exists so a runaway freeze script can't cause per-tick work spikes. With shtreimel.freeze.persist on, the frozen set is saved to the world's shtreimel/state/frozen.json and survives restarts. With shtreimel.freeze.inheritOnSplit on, a child that splits off a frozen parent is frozen at its own pose.[2]
Who was on the ship
Occupancy tracking (shtreimel.occupancy.enabled) answers questions like who was last on a ship. It samples every 10 ticks (shtreimel.occupancy.sampleIntervalTicks), so a boarding shorter than one interval may be missed entirely.[2]
- shtreimel.occupancy.maxPlayersPerSubLevel keeps 16 distinct players per sub-level, newest first. Only each player's latest visit is held, so one player boarding repeatedly can't push the others out.[2]
- shtreimel.occupancy.maxVisitsPerPlayer keeps 16 visits per player, which bounds the /shtreimel who player command.[2]
- shtreimel.occupancy.maxTrackedPlayers is 500 and shtreimel.occupancy.maxTrackedSubLevels is 1,000. Past those totals the least recently seen entry is dropped.[2]
- shtreimel.occupancy.queryDefaultLimit shows 10 rows for /shtreimel who recent and /shtreimel who player when you give no limit.[2]
- History is saved to the world's shtreimel/state/occupancy.json (shtreimel.occupancy.persist). Background writes are at least 60 seconds apart (shtreimel.occupancy.persistIntervalSeconds), and a final write always happens when the server stops.[2]
Archives, deletion and the audit log
Archives are pruned oldest first once a sub-level UUID has more than shtreimel.archive.maxPerUuid (16). There is also a hard cap of shtreimel.archive.maxTotal (1,024) across everything. A compressed plot.nbt larger than shtreimel.archive.maxCompressedBytes (268,435,456 bytes) is not accepted for verify or restore.[2]
Deleting is guarded. shtreimel.delete.requireConfirm is true, so /shtreimel delete subcommands need an explicit --confirm flag. shtreimel.delete.requireNameConfirm is false in the pack, so you don't have to re-type a named sub-level's name.[2]
Destructive actions are also written to audit.log in the world's shtreimel folder, as well as the server log (shtreimel.audit.fileEnabled). The file rotates around 10,485,760 bytes (shtreimel.audit.fileMaxBytes). Queries return 50 rows by default and at most 1,000 (shtreimel.auditQuery.defaultLimit, shtreimel.auditQuery.maxLimit). A filtered query scans at most 33,554,432 bytes per audit file (shtreimel.auditQuery.maxScanBytes).[2]
Snapshots, force profiling and watching
Snapshots are written as JSON in the pack (shtreimel.snapshots.format also allows CSV or BOTH). Up to 4,096 bodies per dimension are captured (shtreimel.snapshots.subLevelLimit), and shtreimel.snapshots.keepCount is 48.[2]
Force profiling tracks individual point forces on at most 4 sub-levels at once (shtreimel.forceProfile.maxConcurrent). A run lasts 10 seconds by default and up to 60 seconds (shtreimel.forceProfile.defaultDurationSeconds, shtreimel.forceProfile.maxDurationSeconds). Finished summaries stay available to /shtreimel forces show for 300 seconds (shtreimel.forceProfile.resultRetentionSeconds).[2]
Watchers last 30 seconds by default and up to 600 (shtreimel.watch.defaultDurationSeconds, shtreimel.watch.maxDurationSeconds). Events reach a watcher at least 2 ticks apart (shtreimel.watch.minTicksBetweenEvents), which stops a velocity-spinning sub-level from spamming you.[2]
Crash reports and history
shtreimel.crash.headerEnabled adds a crash report header listing loaded sub-levels and the physics EWMA, up to 64 sub-levels per dimension (shtreimel.crash.subLevelLimit). The optional fallback mixin into Sable's physics tick crash path (shtreimel.crash.mixinEnabled) is off, and the config calls it fragile against upstream Sable refactors.[2]
The forensic mixins are all on in the pack. shtreimel.mixins.createContraptionContextEnabled prints the contraption's coordinates and entity id when a crash happens inside Create's contraption collision code. shtreimel.mixins.nanRecoveryAuditEnabled audits Sable's NaN-recovery attempts, which helps when contraptions silently vanish. shtreimel.mixins.removalReasonContextEnabled captures one caller stack frame when a sub-level is removed.[2]
The last 512 add and remove events are kept in memory for /shtreimel history and crash reports (shtreimel.observability.historySize). Lifecycle log lines go out at INFO (shtreimel.observability.logLifecycleAtInfo), limited to 60 per dimension per minute (shtreimel.observability.logRatePerMinute).[2]
Which Shtreimel config options matter?
5 parts
Everything here lives in config/shtreimel-server.toml, so it is a server-side file. Every value in it that lists a mod default matches that default in this pack, so the pack has not changed any of those. A few options (mostly on/off switches) list no mod default, so I can only tell you what the pack sets them to, not whether that differs from the mod.[2]
Heat detector (lag)
The heat detector is on in this pack via shtreimel.lag.enabled. It starts naming suspect sub-levels once a dimension's physics-slice EWMA goes above shtreimel.lag.ewmaThresholdMs, which is 5 ms. The file notes that this is well below a 50 ms tick budget, and that you can tune it lower for earlier warnings.[2]
- shtreimel.lag.scanCooldownSeconds is 30, the minimum seconds between heat scans.[2]
- shtreimel.lag.repeatCooldownSeconds is 300, so the same sub-level is not named again for at least that many seconds. This prevents log spam.[2]
- shtreimel.lag.suspectCount is 1, so each hot-dimension incident includes only the single highest-ranked suspect.[2]
- shtreimel.lag.consecutiveHotScans is 1, which the file says preserves legacy behavior.[2]
- shtreimel.lag.captureIncidentSnapshot is false, so no full diagnostic snapshot is queued automatically when a hot incident is reported.[2]
Freezing and delete safety
- shtreimel.freeze.maxConcurrent is 16 frozen sub-levels per dimension at once. The cap exists so a runaway freeze script cannot cause per-tick work spikes.[2]
- shtreimel.freeze.persist is true, so the frozen set survives server restarts. shtreimel.freeze.inheritOnSplit is also true, so a child that splits off a frozen parent is frozen at its own pose.[2]
- shtreimel.delete.requireConfirm is true, so /shtreimel delete subcommands need an explicit --confirm flag.[2]
- shtreimel.delete.requireNameConfirm is false, so deleting a named sub-level does not require re-typing its name.[2]
Who was on the ship (occupancy)
Occupancy tracking is on (shtreimel.occupancy.enabled) and saved to disk (shtreimel.occupancy.persist), so "who was last on this ship" survives a restart. When tracking is off, nothing is sampled and the who history subcommands say tracking is disabled.[2]
- shtreimel.occupancy.sampleIntervalTicks is 10. Lower values catch shorter hops at more cost, and a boarding shorter than one interval may be missed entirely.[2]
- shtreimel.occupancy.maxPlayersPerSubLevel is 16 distinct players per sub-level, and shtreimel.occupancy.maxVisitsPerPlayer is 16 visits per player, newest kept.[2]
- shtreimel.occupancy.queryDefaultLimit is 10 rows for /shtreimel who recent and /shtreimel who player when you give no limit.[2]
Crash reports, archives and snapshots
- shtreimel.crash.headerEnabled is true, so crash reports get a header listing loaded sub-levels and physics EWMA, capped at 64 sub-levels per dimension by shtreimel.crash.subLevelLimit.[2]
- shtreimel.crash.mixinEnabled is false. It is the optional fallback mixin into Sable's physics tick crash path, off by default and described as fragile against upstream Sable refactors.[2]
- shtreimel.archive.maxPerUuid keeps 16 archives per sub-level UUID before pruning the oldest, and shtreimel.archive.maxTotal is a hard cap of 1,024 across all sub-levels.[2]
- shtreimel.snapshots.format is "JSON" (the allowed values are JSON, CSV or BOTH), and shtreimel.snapshots.keepCount is 48.[2]
Suspect ranking
The ranking weights and soft caps are all at the mod defaults. Both shtreimel.ranking.weights.connectedSubLevels and shtreimel.ranking.weights.loadingDependencies are set to 0, which is also their mod default. The file says the first is disabled because traversing connected actors is more expensive, and the second because dependency traversal can query intersections.[2]
Sources
- FTB Skies 2: Aero 1.10.0 mod list · pack file
- FTB Skies 2: Aero 1.10.0 config: config/shtreimel-server.toml · pack file
Where this guide comes from
Written from what FTB Skies 2: Aero itself ships: its files and recipes, the in-game guidebooks and the mods' own pages. Every statement links to the source it came from, and the numbers are checked against the pack before publishing.
Guide last verified Oct 15, 2026.
Report wrong info
Version in each release
21 releases, first in 1.0.3
| FTB Skies 2: Aero | Version | Jar | Where it came from |
|---|---|---|---|
| 1.13.0 Sep 28, 2026 | 0.6.0 | shtreimel-neoforge-1.21.1-0.6.0.jar | From the published release |
| 1.12.1 Sep 22, 2026 | 0.5.0 | shtreimel-neoforge-1.21.1-0.5.0.jar | From the published release |
| 1.12.0 Sep 21, 2026 | 0.5.0 | shtreimel-neoforge-1.21.1-0.5.0.jar | From the published release |
| 1.10.0 Sep 8, 2026 | 0.5.0 | shtreimel-neoforge-1.21.1-0.5.0.jar | From the published release |
| 1.9.1 Sep 2, 2026 | 0.5.0 | shtreimel-neoforge-1.21.1-0.5.0.jar | From the published release |
| 1.9.0 Sep 1, 2026 | 0.5.0 | shtreimel-neoforge-1.21.1-0.5.0.jar | From the published release |
| 1.8.0 Aug 25, 2026 | 0.5.0 | shtreimel-neoforge-1.21.1-0.5.0.jar | From the published release |
| 1.7.3 Aug 19, 2026 | 0.4.0 | shtreimel-neoforge-1.21.1-0.4.0.jar | From the published release |
| 1.7.2 Aug 18, 2026 | 0.4.0 | shtreimel-neoforge-1.21.1-0.4.0.jar | From the published release |
| 1.7.1 Aug 18, 2026 | 0.4.0 | shtreimel-neoforge-1.21.1-0.4.0.jar | From the published release |
| 1.6.1 Aug 13, 2026 | 0.3.1 | shtreimel-neoforge-1.21.1-0.3.1-obf.jar | From the published release |
| 1.6.0 Aug 11, 2026 | 0.3.1 | shtreimel-neoforge-1.21.1-0.3.1-obf.jar | From the published release |
| 1.5.1 Aug 8, 2026 | 0.3.1 | shtreimel-neoforge-1.21.1-0.3.1-obf.jar | From the published release |
| 1.4.1 Aug 4, 2026 | 0.3.1 | shtreimel-neoforge-1.21.1-0.3.1-obf.jar | From the published release |
| 1.4.0 Aug 3, 2026 | 0.3.1 | shtreimel-neoforge-1.21.1-0.3.1-obf.jar | From the published release |
| 1.3.0 Jul 30, 2026 | 0.3.1 | shtreimel-neoforge-1.21.1-0.3.1-obf.jar | From the published release |
| 1.2.1 Jul 28, 2026 | 0.3.1 | shtreimel-neoforge-1.21.1-0.3.1-obf.jar | From the published release |
| 1.2.0 Jul 28, 2026 | 0.3.1 | shtreimel-neoforge-1.21.1-0.3.1-obf.jar | From the published release |
| 1.1.1 Jul 25, 2026 | 0.3.1 | shtreimel-neoforge-1.21.1-0.3.1-obf.jar | From the published release |
| 1.1.0 Jul 24, 2026 | 0.3.1 | shtreimel-neoforge-1.21.1-0.3.1-obf.jar | From the published release |
| 1.0.3 Jul 17, 2026 | 0.3.1 | shtreimel-neoforge-1.21.1-0.3.1-obf.jar | From the published release |
"From pack files" means the list came from the pack's own files; "from the published release" means ForgeBase read the jars of the release itself.
Items and blocks
We can't match this mod to the pack's item list: it registers as shtreimel, and the pack's recipe dump has nothing under that name. That means we found nothing, not that the mod adds nothing. Search the item browser
Config options (how FTB Skies 2: Aero sets them)
81 settings shipped in the pack's config files; 0 differ from the mod's documented default.
Show settings
| Setting | FTB Skies 2: Aero value | Mod default |
|---|---|---|
shtreimel.audit.fileEnabled Append destructive audit lines to <world>/shtreimel/audit.log in addition to the server log. config/shtreimel-server.toml | true | not documented |
shtreimel.crash.headerEnabled Register a CrashReportCallables header that lists loaded sub-levels and physics EWMA. config/shtreimel-server.toml | true | not documented |
shtreimel.crash.mixinEnabled Apply the optional fallback mixin into Sable's SubLevelPhysicsSystem.tick crash path. Off by default; fragile against upstream Sable refactors. config/shtreimel-server.toml | false | not documented |
shtreimel.delete.requireConfirm If true, /shtreimel delete subcommands require an explicit --confirm flag. config/shtreimel-server.toml | true | not documented |
shtreimel.delete.requireNameConfirm If true, deleting a named sub-level requires re-typing the name as a confirm token. config/shtreimel-server.toml | false | not documented |
shtreimel.freeze.inheritOnSplit Freeze a newly split child at its own pose when its parent is frozen. config/shtreimel-server.toml | true | not documented |
Comments and tips
Loading comments...