Vintage Story Mod DB · Vintage Story mod
CarryOnLib
CarryOnLib is the shared API and library behind the CarryOn mod. It provides stable interfaces and core models so modders can interact with carryable blocks, entities and inventories - and so any mod can include optional CarryOn functionality. Carry On 2.0 de
Quick answer
Which CarryOnLib release should I use?
CarryOnLib 1.0.0-rc.1 targets 1.22.0, 1.22.1, 1.22.2. It must be installed on the client. Installation on the dedicated server is optional. No extra mods listed for this file.
Where it goes
Is CarryOnLib required on the client, server, or both?
It must be installed on the client. Installation on the dedicated server is optional.
This release supports both sides, but the source does not require it on the server.
What else does CarryOnLib 1.0.0-rc.1 need?
1.0.0-rc.1. Change the file and its required mods may change too.
This file does not list any required mods. Do not add a library just because a different file uses it.
This file does not list any required or optional mods.
Before you install it
Add CarryOnLib without breaking your instance.
Built for CarryOnLib 1.0.0-rc.1. Pick another file and the loader, install side or required mods may change.
- 01
Stick to this file
Use 1.0.0-rc.1. It targets 1.22.0, 1.22.1, 1.22.2; another release may have different loader, side or dependency requirements.
- 02
Bring the mods it needs
This file does not list any required mods. Do not add a library just because a different file uses it.
- 03
Put it on the correct side
It must be installed on the client. Installation on the dedicated server is optional.
- 04
Pick the file you checked
Use the “Get this file” button beside 1.0.0-rc.1. It opens that exact file at the source.
About this project
What does CarryOnLib add?
CarryOnLib is the shared API and library behind the CarryOn mod. It provides stable interfaces and core models so modders can interact with carryable blocks, entities and inventories - and so any mod can include optional CarryOn functionality.
Carry On 2.0 depends on CarryOnLib, so install it alongside Carry On. Other mods can list CarryOnLib as a dependency to use carry functionality when Carry On is present; if Carry On is not loaded, CarryOnLibSystem.CarryManager is null and integrating mods should check for that.
CarryOnLib 1.0.0-rc.1 - release candidate
This is the first release candidate of the CarryOnLib 1.0 line. It requires Vintage Story 1.22.0 or newer. As a release candidate the public API can still change before 1.0.0, and mods built against the 1.0.0-pre.* releases must update (see Breaking changes below).
What's new in 1.0
- Carryable entities. Pick up whole entities with
ICarryableEntityPickupHandler, spawn them back withICarryEntitySpawnerFactory(registered onICarryManagerfor dependency injection), and attach single carried blocks to entity slots (boats, packs) withICarryableEntitySlotHandler. - Full spawn context. Spawner factories receive the carried block, owner uid, position, block position, dropped-vs-placed state, and an optional hit face/position via
EntitySpawnContext. - Spawn helpers.
SpawnPositionHelper(face-aware, collision-aware placement with depenetration),GravitySpawnHelper(gravity drop resolution), and the sharedBlockCollisionUtils. - Language-aware errors.
CarryErrorHelperresolves a full language key verbatim and prefixes bare codes withcarryon:, then shows or sends the message in the player's language. - Priority permission handlers.
CarryEvents.RegisterCheckPermissionAt(priority, handler)runs handlers in ascending priority order; the first non-null result decides. - Protected carried-data reads.
CarriedBlockTreeSerializer.DeserializeSafereturnsCarriedBlockReadResult(Ok / Empty / Failed) with stored-code recovery, so a present-but-unreadable carry - for example from a removed mod - is never silently dropped. - Manager additions.
ICarryManagergainsGetCarriedReadResult,IsCarrySlotOccupied,GetRenderableCarriedandSetCarriedRaw(for unreadable carries), ground-storage bag entry points, entity transform group resolver registration, and registries for the handler families. - Carried block additions.
CarriedBlockgainsSpawnerFactoryCodeandSpawnAsEntityOnPlacement, persisted in carry state.
Breaking changes since 1.0.0-pre.*
ICarryableTransferbecomesICarryableBlockSlotHandler, with per-slot routing and validation (GetSlotIndex,IsValidSlot,IsSlotEmpty,IsSlotCarryable), a separateGetInteractDelay, and aCan*/Try*split.ICarryableEntityHandlersplits intoICarryableEntityPickupHandlerandICarryEntitySpawnerFactory.- Failure codes are now full language keys (for example
mymod:slot-full);{0}placeholders are gone and the__continue__sentinel is retired (__ignore__/__default__/__stop__keep their meaning). - The client no longer invokes
Try*; the server re-validates authoritatively. ICarryManager.TryAttach/TryDetach(manager-level entity attach) are removed - use slot handlers.- The
CarryEvents.CheckPermissionAtC# event is removed - useRegisterCheckPermissionAt. IEntityTransformGroupResolver.GetCacheSignatureis removed (the framework never read it).JsonHelper.TryGetValueTrimmedIgnoreCase/TryGetTrailingWildcardValuemoved toWildcardMatcher.InventoryConverterconversions returnnull(not empty trees);BlockDroppedEventArgsis init-only.CarriedBlockReadResult/CarriedBlockReadStatusnow live inCarryOn.API.Common.Models(moved out ofCarryOn.Utility).
The full interface reference and step-by-step migration notes are in the CarryOnLib README.
Mods using CarryOnLib
Installation
- Download CarryOnLib from this page.
- If you use Carry On, download Carry On as well.
- Open the mod folder from the in-game Mod Manager and copy the .zip file(s) in without extracting them.
Alternatively, use the Vintage Story Launcher to manage the mod.
For modders
Reference CarryOnLib in your mod project to access carry operations via ICarryManager, listen for carry events, implement custom transform group resolvers, implement ICarryableBlockSlotHandler for block entity inventory integration, use the inventory conversion and attribute tree utilities, and register carryable block behaviors.
Note: CarryOnConfig, CarryCodes and related configuration types live in the CarryOn mod itself, not in CarryOnLib. CarryOnLib provides CarryConstants as a small subset of codes for modder use.
Source, interface reference and issues: GitHub.
Support the author
Project description from Vintage Story Mod DB.
Pick your setup
CarryOnLib releases for each Vintage Story version.
Choose the version and loader you play, then open the matching release.
1.22.6
1 loader build1.22.5
1 loader build1.22.4
1 loader build1.22.3
1 loader build1.22.2
1 loader build1.22.1
1 loader build1.22.0
1 loader buildCheck the dependencies, then try the file in a copied instance before changing a world you care about.
Recent files
CarryOnLib versions and loaders
1.0.0-rc.1
CarryOnLib-1.22.0_v1.0.0-rc.1.zip
14 Oct 2026
1.0.0-pre.8
CarryOnLib-1.22.0_v1.0.0-pre.8.zip
22 Jul 2026
1.0.0-pre.7
CarryOnLib-1.22.0_v1.0.0-pre.7.zip
4 Jul 2026
1.0.0-pre.5
CarryOnLib-1.22.0_v1.0.0-pre.5.zip
30 Jun 2026
1.0.0-pre.4
CarryOnLib-1.22.0_v1.0.0-pre.4.zip
10 Jun 2026
1.0.0-pre.3
CarryOnLib-1.22.0_v1.0.0-pre.3.zip
4 Jun 2026
1.0.0-pre.2
CarryOnLib-1.22.0_v1.0.0-pre.2.zip
1 Jun 2026
1.0.0-pre.1
CarryOnLib-1.22.0_v1.0.0-pre.1.zip
28 Aug 2025
Looking for an older file? The official Vintage Story Mod DB project page is in Resources.
