Mods / Heraldry : Banners
Authors: DanaCraluminum, SaltyWater
Side: Both
Created: Sep 19th at 1:28 PM
Last modified: Sep 23rd at 11:36 AM
Downloads: 11787
Follow Unfollow 204
Latest release (for Vintage Story 1.21.0 and 1.21.1, potentially outdated):
HeraldryBanners-v1.0.0.zip
1-click install
Pet the capybara to support Dana!
And pet the floppa to buy Salty a coffee!
Heraldry: Banners
The guild's profile picture
Requires Heraldry and Attribute Rendering Library
The banners add-on for Heraldry.
![]()

![]()
15 unique shapes for you to choose:

and 70+ patterns

Each banner can hold up to 8 layers on it's design and each layer is one step on top of the previous layer. You can use water to remove a layer.

Banners also get affected by wind

![]()
Poles
To hang a banner, you need a pole
Poles come in all shapes and wood variants. Including flag orientation
![]()

![]()
You can rightclick a pole with a banner to attach or remove it.
![]()

![]()
| Mod Version | Mod Identifier | For Game version | Downloads | Released | Changelog | Download | 1-click mod install* |
|---|---|---|---|---|---|---|---|
| 1.0.0 | heraldrybanners | 11787 | Sep 23rd at 11:36 AM | Empty | HeraldryBanners-v1.0.0.zip | 1-click install |


Hello! I'm sad to report that I crashed to desktop while crafting my first banner, then again when trying to reproduce the issue. My sceond crash occurred much faster. Steps to reproduce:
After the second crash, I was able to re-enter the world and retrieve the banner by breaking the workbench. Item info in case it helps:
Running on 64 bit Windows 10.0.19045.0 with 65401 MB RAM
Game Version: v1.21.5 (Stable)
11/30/2025 2:29:20 PM: Critical error occurred in the following mod: heraldry@1.0.0
Loaded Mods: bettercrates@1.9.0, Bluesky@1.1.0, buzzwords@1.8.0, buzzybees@1.1.7, canoemode@1.0.4, canoemodcircuitspatch@2.0.0, carpet@1.0.2, catchledge@0.6.0, cavecontent@1.0.1, Ceramos@0.5.1, ceramoscontentfix@1.0.0, diversediets@1.0.3, dryablegroundstorage@1.0.1, dye_recipes_fix@1.1.0, feverstonewilds@2.0.0-rc.11, fibersfromtwine@1.0.1, fixedpaths@1.0.2, freelook@1.0.4, spawngiantwaterlilies@1.0.0, glowtorns@1.0.1, hangingoillamps@1.0.5, HoneyPress@1.1.2, JacksFirewood@1.1.0, millwright@1.3.1, morecrystals@1.3.0, morenails@1.2.0, plantstograss@1.0.1, plasterwashes@1.1.0, plumpkins@1.1.3, primitivesurvival@4.0.1, prospecttogether@2.1.2, raredenseores@0.2.9, resmeltableslightfix@0.1.2, ricketytranslocation@1.0.0, scrollrackable@1.4.0, shelfobsessed@1.9.1, sfaws@1.0.1, snowcaps@0.0.0, sortablestorage@2.4.4, sticksfromfirewoodmallow@2.0.0, storagecontroller@1.2.1, temporalsymphony@2.2.2, temporal_gears_stack@1.0.0, thatchexpanded@1.2.1, game@1.21.5, vsimgui@1.1.16, aculinaryartillery@2.0.0-dev.10, aemonsessentials@0.0.3, aged@2.0.2, ancienttools@1.6.0, animalcages@4.0.1, apelanterns@1.3.5, attributerenderinglibrary@2.4.0, autolootreforged@1.0.5, bedspawnv2@1.6.4, betterfirepit@1.2.0, betterjonasdevicesfixed@2.1.4, betterruins@0.5.4, bettertraders@0.1.0, blacksmithname@1.2.3, blocksoverlay@4.6.1, boattags@1.0.1, bodyheatbar@1.0.1, butteflydisplay@1.1.0, carryon@1.12.1, climbmountain@0.2.1, clothierheirloomsmod@1.0.2, commonlib@2.8.0, composter@1.2.1, configlib@1.10.11, cooperativecombatrework@1.0.0, craftablewattleanddaub@1.1.21, Crateful@1.2.8, danatweaks@3.6.0, dirt2clay@1.0.0, enhancedhandbook@1.7.1, entitycolortint@2.1.3, extrainfo@1.10.1, farmlanddropswithnutrients@1.2.2, farseer@1.3.2, fendragonbcs@0.2.0, fixhandbookclutter@1.0.5, footprints@1.1.1, fromgoldencombs@1.9.4, genelib@2.1.4, grassiergrass@1.0.0, greenbegone@1.0.0, GuibibiQOLS@1.0.2, handbookdeclutterer@0.6.0, humanskintones@0.0.4, hydrateordiedrate@2.3.1, iceisice@1.0.0, improvedhandbookrecipes@1.1.3, insanitylib@1.1.0, jaunt@2.1.1, justthepepper@2.0.0, medievalexpansionpatch@1.3.4, boatspeedtweakz@1.0.5, naturalfertilizer@1.3.0, noticeboard@1.2.2, optimetime@1.3.5, pelaguswinds@1.2.2, petai@4.0.3, pixelwaypoints@1.0.0, playerlist@2.3.4, claywheel@1.1.7, purposefulstorage@1.5.1, realsmoke@1.1.10, relictools@1.1.1, rivers@4.7.3, saltandsands@1.1.6, scaffolding@1.2.5, showcraftable@1.2.6, simplecloth@1.0.3, smithingplus@1.8.3, somethinginthewater@1.2.7, spawnhighlightcustom@1.1.0, sprucedup@1.0.3, stonebakeoven@1.2.0, stonerailings@1.4.0, strspawnchances@0.1.6, temporalityplus@0.0.8, temporalstormtimer@1.1.1, terraprety@7.0.9, th3dungeon@0.4.4, thecritterpack@1.3.4, trailmodupdated@1.3.3, unconscious@2.0.1, volumetricshadingrenewed@1.2.0, creative@1.21.5, survival@1.21.5, waypointtogethercontiued@4.1.0, xvshaders@0.1.1, zippysreseedingreeds@2.1.0, alternativegliderimplementationreforged@1.0.1, autoconfiglib@2.0.9, bbb@1.0.1, brainfreeze@1.3.5, cavebeacons@1.0.9, detailedanimals@0.7.0, ecrevived@0.0.8, expandedfoods@2.0.0-dev.5, em@3.4.0, extraoverlays@1.6.0, sleekdoorglass@1.0.0, heraldry@1.0.0, draconis@1.1.4, saerinmod@0.4.4, shearlib@1.2.0, snowshoes@2.1.3, soilamendments@1.0.0, storageoptions@2.0.0, heraldrybanners@1.0.0, notenoughsandfix@3.0.1, tailorsdelight@2.1.2, wool@1.8.1, dressmakers@1.7.4
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
at System.Collections.Generic.List`1.get_Item(Int32 index)
at Heraldry.HeraldryWorkbenchWorkspace.GenerateOutputStackWithShape(IInventory inv, Int32 index) in C:\Users\dana_\Source\Repos\Heraldry\Heraldry\GUI\HeraldryWorkbenchWorkspace.cs:line 111
at Heraldry.HeraldryWorkbenchWorkspace.GenerateOutputStack(IInventory inv, EnumHeraldryCraftingType craftingType, Int32 index, Boolean consumeLiquid) in C:\Users\dana_\Source\Repos\Heraldry\Heraldry\GUI\HeraldryWorkbenchWorkspace.cs:line 43
at Heraldry.GuiDialogHeraldryWorkbench.SetupDialog() in C:\Users\dana_\Source\Repos\Heraldry\Heraldry\GUI\GuiDialogHeraldryWorkbench.cs:line 132
at Vintagestory.Client.NoObf.ClientMain.ExecuteMainThreadTasks(Single deltaTime) in VintagestoryLib\Client\ClientMain.cs:line 786
at Vintagestory.Client.GuiScreenRunningGame.RenderToPrimary(Single dt) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 172
at Vintagestory.Client.ScreenManager.Render(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 719
at Vintagestory.Client.ScreenManager.OnNewFrame(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 663
at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 112
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 338
at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 133
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
Event Log entries for Vintagestory.exe, the latest 1
==================================
{ TimeGenerated = 11/28/2025 5:47:18 PM, Site = , Source = Application Error, Message = Faulting application name: Vintagestory.exe, version: 1.21.5.0, time stamp: 0x67fe0000
Faulting module name: coreclr.dll, version: 8.0.224.6711, time stamp: 0x65a895d5
Exception code: 0xc0000005
Fault offset: 0x00000000001d1f48
Faulting process id: 0x10e00
Faulting application start time: 0x01dc60cb4aa21894
Faulting application path: E:\Vintagestory\Vintagestory.exe
Faulting module path: C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.2\coreclr.dll
Report Id: 6795d57c-e2fe-42a9-a7d8-43b9b1868193
Faulting package full name:
Faulting package-relative application ID: }
Running on 64 bit Windows 10.0.19045.0 with 65401 MB RAM
Game Version: v1.21.5 (Stable)
11/30/2025 2:34:53 PM: Critical error occurred in the following mod: heraldry@1.0.0
Loaded Mods: bettercrates@1.9.0, Bluesky@1.1.0, buzzwords@1.8.0, buzzybees@1.1.7, canoemode@1.0.4, canoemodcircuitspatch@2.0.0, carpet@1.0.2, catchledge@0.6.0, cavecontent@1.0.1, Ceramos@0.5.1, ceramoscontentfix@1.0.0, diversediets@1.0.3, dryablegroundstorage@1.0.1, dye_recipes_fix@1.1.0, feverstonewilds@2.0.0-rc.11, fibersfromtwine@1.0.1, fixedpaths@1.0.2, freelook@1.0.4, spawngiantwaterlilies@1.0.0, glowtorns@1.0.1, hangingoillamps@1.0.5, HoneyPress@1.1.2, JacksFirewood@1.1.0, millwright@1.3.1, morecrystals@1.3.0, morenails@1.2.0, plantstograss@1.0.1, plasterwashes@1.1.0, plumpkins@1.1.3, primitivesurvival@4.0.1, prospecttogether@2.1.2, raredenseores@0.2.9, resmeltableslightfix@0.1.2, ricketytranslocation@1.0.0, scrollrackable@1.4.0, shelfobsessed@1.9.1, sfaws@1.0.1, snowcaps@0.0.0, sortablestorage@2.4.4, sticksfromfirewoodmallow@2.0.0, storagecontroller@1.2.1, temporalsymphony@2.2.2, temporal_gears_stack@1.0.0, thatchexpanded@1.2.1, game@1.21.5, vsimgui@1.1.16, aculinaryartillery@2.0.0-dev.10, aemonsessentials@0.0.3, aged@2.0.2, ancienttools@1.6.0, animalcages@4.0.1, apelanterns@1.3.5, attributerenderinglibrary@2.4.0, autolootreforged@1.0.5, bedspawnv2@1.6.4, betterfirepit@1.2.0, betterjonasdevicesfixed@2.1.4, betterruins@0.5.4, bettertraders@0.1.0, blacksmithname@1.2.3, blocksoverlay@4.6.1, boattags@1.0.1, bodyheatbar@1.0.1, butteflydisplay@1.1.0, carryon@1.12.1, climbmountain@0.2.1, clothierheirloomsmod@1.0.2, commonlib@2.8.0, composter@1.2.1, configlib@1.10.11, cooperativecombatrework@1.0.0, craftablewattleanddaub@1.1.21, Crateful@1.2.8, danatweaks@3.6.0, dirt2clay@1.0.0, enhancedhandbook@1.7.1, entitycolortint@2.1.3, extrainfo@1.10.1, farmlanddropswithnutrients@1.2.2, farseer@1.3.2, fendragonbcs@0.2.0, fixhandbookclutter@1.0.5, footprints@1.1.1, fromgoldencombs@1.9.4, genelib@2.1.4, grassiergrass@1.0.0, greenbegone@1.0.0, GuibibiQOLS@1.0.2, handbookdeclutterer@0.6.0, humanskintones@0.0.4, hydrateordiedrate@2.3.1, iceisice@1.0.0, improvedhandbookrecipes@1.1.3, insanitylib@1.1.0, jaunt@2.1.1, justthepepper@2.0.0, medievalexpansionpatch@1.3.4, boatspeedtweakz@1.0.5, naturalfertilizer@1.3.0, noticeboard@1.2.2, optimetime@1.3.5, pelaguswinds@1.2.2, petai@4.0.3, pixelwaypoints@1.0.0, playerlist@2.3.4, claywheel@1.1.7, purposefulstorage@1.5.1, realsmoke@1.1.10, relictools@1.1.1, rivers@4.7.3, saltandsands@1.1.6, scaffolding@1.2.5, showcraftable@1.2.6, simplecloth@1.0.3, smithingplus@1.8.3, somethinginthewater@1.2.7, spawnhighlightcustom@1.1.0, sprucedup@1.0.3, stonebakeoven@1.2.0, stonerailings@1.4.0, strspawnchances@0.1.6, temporalityplus@0.0.8, temporalstormtimer@1.1.1, terraprety@7.0.9, th3dungeon@0.4.4, thecritterpack@1.3.4, trailmodupdated@1.3.3, unconscious@2.0.1, volumetricshadingrenewed@1.2.0, creative@1.21.5, survival@1.21.5, waypointtogethercontiued@4.1.0, xvshaders@0.1.1, zippysreseedingreeds@2.1.0, alternativegliderimplementationreforged@1.0.1, autoconfiglib@2.0.9, bbb@1.0.1, brainfreeze@1.3.5, cavebeacons@1.0.9, detailedanimals@0.7.0, ecrevived@0.0.8, expandedfoods@2.0.0-dev.5, em@3.4.0, extraoverlays@1.6.0, sleekdoorglass@1.0.0, heraldry@1.0.0, draconis@1.1.4, saerinmod@0.4.4, shearlib@1.2.0, snowshoes@2.1.3, soilamendments@1.0.0, storageoptions@2.0.0, heraldrybanners@1.0.0, notenoughsandfix@3.0.1, tailorsdelight@2.1.2, wool@1.8.1, dressmakers@1.7.4
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
at System.Collections.Generic.List`1.get_Item(Int32 index)
at Heraldry.HeraldryWorkbenchWorkspace.GenerateOutputStackWithShape(IInventory inv, Int32 index) in C:\Users\dana_\Source\Repos\Heraldry\Heraldry\GUI\HeraldryWorkbenchWorkspace.cs:line 111
at Heraldry.HeraldryWorkbenchWorkspace.GenerateOutputStack(IInventory inv, EnumHeraldryCraftingType craftingType, Int32 index, Boolean consumeLiquid) in C:\Users\dana_\Source\Repos\Heraldry\Heraldry\GUI\HeraldryWorkbenchWorkspace.cs:line 43
at Heraldry.GuiDialogHeraldryWorkbench.SetupDialog() in C:\Users\dana_\Source\Repos\Heraldry\Heraldry\GUI\GuiDialogHeraldryWorkbench.cs:line 132
at Heraldry.GuiDialogHeraldryWorkbench..ctor(String dialogTitle, InventoryBase inventory, BlockPos blockEntityPos, ICoreClientAPI capi, EnumHeraldryCraftingType selectedCraftingType, Int32 selectedPatternIndex) in C:\Users\dana_\Source\Repos\Heraldry\Heraldry\GUI\GuiDialogHeraldryWorkbench.cs:line 32
at Heraldry.BlockEntityHeraldryWorkbench.b__32_0() in C:\Users\dana_\Source\Repos\Heraldry\Heraldry\BlockEntity\BlockEntityHeraldryWorkbench.cs:line 63
at Vintagestory.GameContent.BlockEntityOpenableContainer.toggleInventoryDialogClient(IPlayer byPlayer, CreateDialogDelegate onCreateDialog) in VSSurvivalMod\BlockEntity\BEOpenableContainer.cs:line 127
at Heraldry.BlockEntityHeraldryWorkbench.OnPlayerRightClick(IPlayer byPlayer, BlockSelection blockSel) in C:\Users\dana_\Source\Repos\Heraldry\Heraldry\BlockEntity\BlockEntityHeraldryWorkbench.cs:line 62
at Vintagestory.GameContent.BlockBehaviorContainer.OnBlockInteractStart(IWorldAccessor world, IPlayer byPlayer, BlockSelection blockSel, EnumHandling& handling) in VSSurvivalMod\BlockBehavior\BehaviorContainer.cs:line 36
at Vintagestory.API.Common.Block.OnBlockInteractStart(IWorldAccessor world, IPlayer byPlayer, BlockSelection blockSel) in VintagestoryApi\Common\Collectible\Block\Block.cs:line 1390
at Vintagestory.GameContent.BlockMultiblock.<>c__DisplayClass17_0.b__2(Block block) in VSEssentials\Block\BlockMultiblock.cs:line 243
at Vintagestory.GameContent.BlockMultiblock.Handle[T,K](IBlockAccessor ba, Int32 x, Int32 y, Int32 z, BlockCallDelegateInterface`2 onImplementsInterface, BlockCallDelegateBlock`1 onIsMultiblock, BlockCallDelegateBlock`1 onOtherwise) in VSEssentials\Block\BlockMultiblock.cs:line 91
at Vintagestory.GameContent.BlockMultiblock.OnBlockInteractStart(IWorldAccessor world, IPlayer byPlayer, BlockSelection blockSel) in VSEssentials\Block\BlockMultiblock.cs:line 238
at Vintagestory.Client.NoObf.SystemMouseInWorldInteractions.TryBeginUseBlock(Block selectedBlock, BlockSelection blockSelection) in VintagestoryLib\Client\Systems\Player\MouseInWorldInteractions.cs:line 886
at Vintagestory.Client.NoObf.SystemMouseInWorldInteractions.HandleMouseInteractionsBlockSelected(Single dt) in VintagestoryLib\Client\Systems\Player\MouseInWorldInteractions.cs:line 544
at Vintagestory.Client.NoObf.SystemMouseInWorldInteractions.OnFinalizeFrame(Single dt) in VintagestoryLib\Client\Systems\Player\MouseInWorldInteractions.cs:line 87
at Vintagestory.Client.NoObf.ClientMain.RenderToDefaultFramebuffer(Single dt) in VintagestoryLib\Client\ClientMain.cs:line 1031
at Vintagestory.Client.GuiScreenRunningGame.RenderToDefaultFramebuffer(Single dt) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 250
at Vintagestory.Client.ScreenManager.Render(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 760
at Vintagestory.Client.ScreenManager.OnNewFrame(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 663
at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 112
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 338
at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 133
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 95
Event Log entries for Vintagestory.exe, the latest 1
==================================
{ TimeGenerated = 11/28/2025 5:47:18 PM, Site = , Source = Application Error, Message = Faulting application name: Vintagestory.exe, version: 1.21.5.0, time stamp: 0x67fe0000
Faulting module name: coreclr.dll, version: 8.0.224.6711, time stamp: 0x65a895d5
Exception code: 0xc0000005
Fault offset: 0x00000000001d1f48
Faulting process id: 0x10e00
Faulting application start time: 0x01dc60cb4aa21894
Faulting application path: E:\Vintagestory\Vintagestory.exe
Faulting module path: C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.2\coreclr.dll
Report Id: 6795d57c-e2fe-42a9-a7d8-43b9b1868193
Faulting package full name:
Faulting package-relative application ID: }
Same issue as Raven0V
artemax44 You can set other shapes only in workbench
DanaCraluminum
I mean, only the simple rectangular banner can be crafted. The other simple banners with other shapes can't be crafted, or the guide doesn't include how to craft them!DanaCraluminum
OK. Thanks. I saw it! You only craft the simple rectangular banner. That's why I didn't find it that easy! Hehehe. Thanks, problem solved!artemax44 Craft plain banner first
DanaCraluminum SaltyWater
It's a good mod, but I have a question. How do you craft simple banners? I have the table and the buckets with the dyes, but I need to add the simple banner, and I don't know how to craft it.Putting dye bucket in the dye slot and then changing to "shapes" will make the game crash, and opening the bench after rejoining will make the game crash
thank u dana and salty for making another mandatory mod
Hey, y'all. Any plans to have a config option or in-game interactable so the banners don't wave in the wind while indoors?
Loving this already. Good work!
rugrat0ne Yes, it is going to replace my old Banners mod, but they aren't interchangeable. You can run both mods together and they will still work
As a heraldry geek, I am loving all of these! Is this going to replace the other Banners mod? Will stuff made with that still work if I swap them?