Mods / configkit
- Tags:
- Author:
- dizzyd
- Side:
- Both
- Created:
- Sep 3rd at 2:00 AM
- Last modified:
- 2 days ago
- Downloads:
- 3214
-
Recommended download (for Vintage Story 1.22.7):
configkit_1.4.2.zip 1-click install
ConfigKit gives Vintage Story mods an in-game settings screen, drawn with the game's own interface. No Dear ImGui, and nothing extra to install alongside it.
It reads the same configlib-patches.json files mods already ship and writes a plain ModConfig/<mod>.yaml you can edit by hand, so a content mod needs no changes at all, and no dependency on this library either. If ConfigKit isn't installed, a mod simply falls back to the default values in its own assets.
Tested in-game across singleplayer, real two-process multiplayer, and a run alongside another config mod. Verified against a 95-mod pack: every asset it patches resolves identically to configlib's output.
For players
- Press P, or use the Mod settings button in the pause menu.
- Settings the server controls are shown read-only unless you have
controlserver. - Edit a file in
ModConfig/while the game is running and it reloads on the spot. - Type in the filter box beside the mod dropdown to find a setting by name, wherever it lives.
- Don't install ConfigKit and configlib together. If ConfigKit sees configlib or autoconfiglib it stands down and says so in the log, so nothing breaks, but only one of them can manage your configs. Config managers that only handle some mods are a different matter: name a mod under
UnmanagedDomainsinModConfig/configkit.jsonand ConfigKit leaves that one alone without switching itself off. - You can join a server that doesn't have it, and you keep your own settings screen for client-side mods.
- A server running it needs its players to have it too. Anyone without it is turned away on the connect screen and offered the download, the same as any other server-side mod.
For server admins
Settings can rewrite values inside other mods' JSON assets (block behaviour, recipes, item stats) from one config file, without repacking anything. That is often the quickest way to retune a pack for a server, and the server's values are synced to every client on join.
For mod authors
Most mods need no changes. The migration guide covers four cases:
- Ships a
configlib-patches.jsonand no C#? Nothing to do. - Checks whether a config mod is installed? One line.
- Calls into the library? Swap a reference and rebuild.
- Draws its own ImGui settings screen? Describe the settings instead, usually less code than you had.
A settings class needs only stock .NET attributes ([Description], [Range], [Category]), so it keeps no reference to ConfigKit and still compiles and runs without it. Nested classes, dictionaries and lists render themselves — a sub-object becomes a foldable section, a dictionary opens a screen of its own with a filter and an Add button, and neither needs a line of UI code.
It also reads what your class already carries: your /// doc comments become the tooltips, [DisplayFormat] decides how a number reads, validation attributes are enforced with the messages you wrote — including your own ValidationAttribute — and a nullable value type keeps its null instead of showing it as zero.
Full guides are linked under Documentation, just below.
Documentation
All of it lives in the repository, so it stays with the code it describes:
- Structured config — what each shape becomes on screen: nested classes, dictionaries, lists, and every attribute that steers them. With screenshots.
- Integrating — the API, when your values are actually there, client and server, and what to look at when a setting does not appear.
- The config file format — settings, patches, JSON paths and expressions, for a mod with no C# at all.
- Migrating from configlib — four cases, and most mods fall into the one that needs no work.
- Compatibility — a survey of the 2,000 most-downloaded 1.22 mods, sorted by what each would have to change.
- What changed from configlib — the deliberate differences, what was added, and the bugs fixed on the way.
Verifying what you downloaded
Every release is built by GitHub Actions and carries Sigstore-signed provenance tying the zip to the commit that produced it:
gh attestation verify configkit_<version>.zip --repo dizzyd/configkit
The build also refuses to package anything questionable: it asserts that ConfigKit.dll declares only its own types (dependencies ship as separate files and are never merged in), that every third-party dll matches its publisher's SHA-256, and that each one ships with its licence. What that proves is provenance: the binary contains what the source says, not that the behaviour is correct. The source is short; read it.
Origin, and credit
ConfigKit is derived from configlib by Maltiez, released under CC0. The config model, the patch format, the expression syntax and the server-sync design are his work, and they are good work. configlib solved a real problem for hundreds of mods, and its file format is the reason ConfigKit can read existing mods without asking anyone to change anything. What was rebuilt, and the bugs fixed along the way, including which are still present upstream and which this project introduced itself, is listed in what changed from configlib.
This fork exists because, for a period, configlib's published builds contained a class that appeared in no commit of its public source, which fingerprinted other loaded assemblies and degraded or disconnected multiplayer clients after a randomised delay. Those releases have since been withdrawn, and current configlib builds match their public source.
None of that is a judgement of the person. But the principle matters more than any one incident: players run our code on their machines, and they should be able to see what it does. A mod should do what its source says it does, and nothing else. That is the whole reason for the verification above: not because this project is more trustworthy, but because trust shouldn't have to be the mechanism.
If you use configlib today and it works for you, that is a perfectly reasonable choice.
Links
Source, issues and releases: github.com/dizzyd/configkit
Licence: MIT. Third-party notices ship in the zip under licenses/.
| Mod Version | Mod Identifier | For Game version | Downloads | Released | Changelog | Download | 1-click mod install* |
|---|---|---|---|---|---|---|---|
| 1.4.2 | configkit | 274 | 2 days ago | configkit_1.4.2.zip | 1-click install | ||
|
1.4.2 is released! A closed world is cleaned up of instead of staying in memory -- this bug is long-standing in ConfigLib, fwiw. For players
For mod authors
Thanks to Beefy_Swain for finding the leak, measuring it, and sending the fix. | |||||||
| 1.4.1 | configkit | 890 | Sep 19th at 1:40 AM | configkit_1.4.1.zip | 1-click install | ||
|
1.4.1 is released! A JSON patch of your own to a file a mod's config also patches is kept. For players
For mod authors
Thanks to Burgersim for the report, and for narrowing it to the Skaven mod and ConfigKit together. | |||||||
| 1.4.0 | configkit | 448 | Sep 12th at 3:03 PM | configkit_1.4.0.zip | 1-click install | ||
|
1.4.0 is released! Optional sections, and two more of TheInsanityGod's bug reports. For players * A long setting name no longer runs into the rows below it. The row grows to fit the name instead. For mod authors * A nested class declared nullable (public SailsConfig? Sails;) is an optional section. Null is left null rather than replaced with a fresh instance, the section gets an Enabled switch, and the file holds null when it is off and an object when it is on. Switching off and on again keeps the values. Before this, a null sub-config was silently turned back on with defaults at registration. Thanks to TheInsanityGod for the reports, and for noticing that null sub-configs were not surviving. | |||||||
| 1.3.6 | configkit | 579 | Sep 6th at 6:29 PM | configkit_1.3.6.zip | 1-click install | ||
|
1.3.6 is released! Mostly TheInsanityGod's reports, and what turned up chasing them: For mod authors
For players
Fixes
Special thanks to TheInsanityGod for the reports, and for the traced log that pinned the leak down to a line. | |||||||
| 1.3.5 | configkit | 171 | Sep 6th at 12:12 AM | configkit_1.3.5.zip | 1-click install | ||
|
1.3.5 is released; the first of the release 1.3 series, so this covers everything since 1.2: For mod authors
For players
Fixes
Thanks to TheInsanityGod, whose ideas for structured config and mods helped me get this all sorted. | |||||||
| 1.2.0 | configkit | 555 | Sep 3rd at 7:07 PM | configkit_1.2.0.zip | 1-click install | ||
|
1.2.0 is released! Wasn't expecting to do another release today but found a few things doing the survey of top 2k mods:
| |||||||
| 1.1.0 | configkit | 94 | Sep 3rd at 4:54 PM | configkit_1.1.0.zip | 1-click install | ||
|
* Fixed some strange clipping issues with certain permutations of configs | |||||||
| 1.0.1 | configkit | 188 | Sep 3rd at 2:27 AM | configkit_1.0.1.zip | 1-click install | ||
|
Minor GUI fixes | |||||||
| 1.0.0 | configkit | 15 | Sep 3rd at 2:00 AM | configkit_1.0.0.zip | 1-click install | ||
|
Initial release | |||||||



I don`t get it fully: if some other mods list ImGui and configlib as requirements will this one suffice (like replacing both of the above transparently) or do i have to go with exceptions configuration for this mod? Thanks.
Yes - you can replace configlib+imgui with just ConfigKit. ConfigKit uses the native UI controls that are already in VintageStory so it doesn't need an external library. :)
1.4.2 is released! A closed world is cleaned up of instead of staying in memory -- this bug is long-standing in ConfigLib, fwiw.
For players
For mod authors
Thanks to Beefy_Swain for finding the leak, measuring it, and sending the fix.
Love this mod. It's so much more visually appealing than configlib. I hope i never have to go back.
The mod is really great alternative but only a slider to change values doesn't allow precise configuration.
Thank you. Keep up the great work.
1.4.1 is released!
For players
For mod authors
Thanks to Burgersim for the report, and for narrowing it to the Skaven mod and ConfigKit together.
Pls don't become the next Maltiezπ
Well, I'll do my best. :) But in all seriousness, please note that all builds of ConfigKit are attested. What this means, is that you can go to a release page like, https://github.com/dizzyd/configkit/releases/tag/v1.4.0, and see that the exact version of the code that a given release was built from. Basically, GitHub "attests" (promises, vouches) that the build contains ONLY what was in the code is part of the binary -- and you can check the code to make sure there's nothing odd like "anti-cheat" code or whatever.
It's important to me that you know what you're getting and you're getting only what you want. :)
I seem to have a problem that when I want to use the Skaven/ Rat Player Model Mod together with configkit, a patch I wrote for my server to change the category (from its own skaven, to the beast category) in the character selection screen, just silently doesn't get applied or overwritten again.
Fixed in 1.4.1. Thanks for the bug report!
Will it be possible for me to contact you on the forums, I want to know how you did GitHub Actions and the Sigstore-signed provenance on this mod, so I can do the same for mine.
Yup, I'm dizzyd on the VS Discord. That said, the relevant setup is here in the configkit repo: https://github.com/dizzyd/configkit/blob/main/.github/workflows/release.yml
im on the forums regularly, i dont do discord
Ok, I'm on the forums now, you can ping me there. :)
had an issue where configkit wasn't working at all; clearing my cache fixed the issue o/
Sorry to hear that. What cache are you referring to?
AppData\Roaming\VintagestoryData\Cache
deleting it sometimes fixes a lot of mod problems, i always do that first before any other trouble-shooting
1.4.0 is released! Optional sections, and two more of TheInsanityGod's bug reports.
For players
For mod authors
Thanks to TheInsanityGod for the reports, and for noticing that null sub-configs were not surviving.
(This is for an older version but still reporting) VS 1.22.6, configkit_1.2.0 (on client and serverside)
Had a problem where my client would frequently freeze up entirely and had to be terminated to close game. I saw a rumor that led me to believe this mod may've been the culprit so I trimmed it out first (out of the list of 101 mods) and after playing for a few hours I didn't have any more problems of game freezing. I couldn't confirm for certain what was causing the problem because I could find no errors in my logs or server-side logs so I didn't know where else to look.
I see versions 1.3.5, 1.3.6 have both fixed errors that relate to crashes maybe if I tried those my problem will be gone. :)
edit: In the future if you could point me where to look I'd be grateful because after checking logs I felt stumped.
Thanks for the report; definitely try 1.3.6.
Quick question: were you opening the Mods settings screen much in those sessions? Most of the changes between 1.2.x and 1.3.x are in the config screens; if you weren't opening the config editor during your session, it's unlikely to be a 1.2 vs 1.3 problem. If you rarely or never opened it, the freeze is almost certainly somewhere else - outside that screen ConfigKit does very little while you play.
On where to look: a freeze writes no crash log, which is why yours were clean. Check the last few lines of client-main.log and client-debug.log before the timestamps stop. And next time it hangs, before killing it, open Task Manager, right-click Vintagestory, and choose "Create dump file". That shows exactly which thread is stuck and where. Send me that plus the log tails and I'll take a look.
I had not opened the mod setting screen yet while using this mod, one instance of me crashing I related to me grabbing an iron saw off a tool-rack, others I couldn't relate to any cause / didn't pay enough attention.

I'll keep that in mind to create a dump file next time that happens- though I'm using linux and I don't see such an option in the equivalent System Monitor.
Ah, sorry - I assumed Windows. In that case, from a terminal you can do:
dotnet-dump collect -p $(pgrep -f VintageStory | head -n 1) --type Full
You'll need to install dotnet-dump via something like:
curl -L -o dotnet-dump https://aka.ms/dotnet-dump/linux-x64; chmod +x dotnet-dump
It's worth noting though, that removing a tool from an inventory is vanishingly unlikely to be ConfigKit/configlib, but I know the people got feels about things. :) If you want to do another cross-check, you could remove ConfigKit and put the latest configlib in there - they actually share most of the same code. Good luck!
1.3.6 is released! Mostly TheInsanityGod's reports, and what turned up chasing them:
For players
For mod authors
Fixes
Special thanks to TheInsanityGod for the reports, and for the traced log that pinned the leak down to a line.
1.3.5 is released! The first of the release 1.3 series, so this covers everything since 1.2:
For mod authors
For players
Fixes
Thanks to TheInsanityGod, whose ideas for structured config and mods helped me get this all sorted.
Hey there, I'm the author of IMM, I wanted to know how we should handle compatibility between our mods.
Would you rather add IMM to ConfigKit's incumbents string array, or should I do something on my end to detect and handle ConfigKit?
Hiya!
I'd lean away from the incumbents list. It's less a per-mod courtesy than a global switch; it's there for configlib and autoconfiglib, which contend with us over everything. You and I overlap much less than that: you take mods carrying a config/imm.json, ConfigKits takes a configlib-patches.json or registering in C#, so only mods described to both are ever contested. Turning ConfigKit off everywhere to settle those is too big a hammer.
Your ImmExternalManagerOwnership looks like the right shape to me. The awkward bit is that neither half of the detector would give you a reliable answer about us: your Discover runs at -0.001 and we don't register asset-declared configs until 0.01, and a descriptor only says a mod declared one, not that we took it β we stand down when configlib is around, and a player can hand any single mod over to you.
So I've added something in 1.3.5 that should hold whenever you call it:
bool ours = api.ModLoader.GetModSystem<ConfigKitModSystem>().WillManage(modId);
Happy to treat that and IConfigProvider.Domains as stable so you can rely on them. And in the meantime 1.3.5 takes an UnmanagedDomains list in ModConfig/configkit.json, so anyone hitting a real clash can hand one mod to IMM by name without either of us shipping anything.
Does that work on your end?
Works for me π, I'll probably hook onto it with a C# dynamic to avoid a compile dependency. Thank you for helping make our mods play nice with each other. I'll see to it to add compatibility on my end by the next release in an hour or so.
I'm testing adding both of your mods at the same time in my really simple boats patch and it seems to apply both independently it applies IMM last so depending on how the logic is written it can override ConfigKit.
Once YangWenLi makes the change in IMM, it should resolve to just one of them correctly when both are installed. :)
Should be up now that 1.0.5 is out, unless I screwed something up.
Updated my comment, it was my logic that multiplied instead of overriding..
I don't really know or understamd most of this, but I have 91 mods and used Config lib. So if I delete Config lib and install Configkit I should be okay?
Generally speaking, yes you can just drop it in and replace configlib. You can see if a mod is compatible here: https://github.com/dizzyd/configkit/blob/main/docs/COMPATIBILITY.md
Would be cool if it weren't vibecoded. It's a shame how far game modding has fallen.
I've been writing software professionally for the past 30 years, and I've been using AI tooling for this mod the same way I've used every other tool that's come along in that time: I direct it, I read what it produces, I test it, and I put my name on it. Nothing ships that I haven't reviewed and wouldn't have been comfortable writing myself. The source is public β if you find something sloppy, wrong, or that you'd have done differently, open an issue or a PR and I'll take it seriously. That's the standard the code should be held to, and it's the only one I care about.
I guess I just have a stubborn ethical backbone when it comes to oneself actually doing their own work. Sadly, the VS modding scene is absolutely littered with AI generated projects, and it is practically impossible to tell what is and isn't slop, which is why I made the above comment. As a junior game dev myself (still learning the basics tbh), I just cannot understand the decision to use AI at all, even after weighing the genuine pros (which do exist, I concede; LLM-backed code review can be genuinely useful, a great example of this is Box3D) and glaring cons (the general sentiment of AI being a blackbox slop machine, the overwhelming majority of its users not understanding the code it generates, LLM hallucinations, the severe environmental and economic catastrophe it perpetuates, etc., ad nauseam). Ultimately I hope you look back on those thirty years and understand that if you didn't need AI then, you don't need it now.
Addendum: I'd highly recommend adding the AI tag to the mod's page. Hopefully some time in the future Anego will implement some sort of tag-based sorting and/or blocklist.
I appreciate you taking the time to write that out, and I actually agree with more of it than you might expect. The scene is full of low-effort AI projects, it is hard to tell from the outside what's been reviewed and what hasn't, and most of the people generating code don't understand what they're shipping. That's a legitimate thing to be frustrated about. My only pushback is that the fix for "I can't tell who understands their code" is to look at the code and the person, not to assume the worst about the tool.
On "if you didn't need it then, you don't need it now" β I didn't need IDEs, garbage collection, or Stack Overflow in 1996 either. I still adopted every one of them the moment they made me faster without making the result worse. That's the whole test, and it's the same test I hold this to. The tooling changes; the standard doesn't.
For what it's worth, since you're learning: the skill that will matter most for you isn't whether you use these tools, it's whether you can read code critically enough to know when they're wrong. That skill is what makes the difference between someone who ships slop and someone who doesn't, and it's the same skill it's always been. Good luck with the game dev.
There's no thumbs up button, but thumbs up. I learned to write code taking apart Hypercard stacks on a Macintosh LC II, I learned a lot from doing that but I am glad I can use my modern tools.
You don't miss writing "on mouseup"?! ;)
You know I do miss stacks. Stack scope, background scope, card scope, local scope. Sometimes you want a scope between global and instance, putting aside the language itself, I think it really made working with data intuitive. Like instead of an array, you have a field. You can see it, interact with it. You can see when you put 10 into line 1, that it's there. Not to mention you could manually edit fields basically giving yourself combo cheat and debug tools for the low low cost of literally zero extra effort! Then I would paint over the background to hide them XD
I mean there was the whole the program is the source code thing, which I guess I like about Python too. But no, I don't miss writing code in what was essentially a text editor with no documentation.
Is this backwards compatable with game version 1.22.3? Not all the mods I used have been fuly updated to 22.7 yet, and the fact that configlib is no longer around... (Thanks Maltz...) its not helping much.
I would recommend just giving it a try, mods are usually compatible with all minor versions of the major version they where made for (in fact although not as commen some mods even survive major version changes) even if they don't explicitly mention it.
brother
bruh
bro
b
Thanks mate if i had a nickel where someone put maleware or malicious code i'd have two nickels which isn't a lot but its strange it happended twice.
At least you'd have two nickels!
4 now, Starsector, Starbound, Project zomboid, and now Vintage Story. effectively the same damn reason cross all 4 events too. they didn't like something and decided it was their right to fun/thought police. I will now forever regard Maltiez as Malt Liqour.
You forgot Half Life 2's
"The Sun is Leaking"
Wait Project Zomboid?? i know Rimworld at somepoint had it but i was not arround for that.
Project Zomboid and Starbound? God damn now you got me worried, I never knew about any of those doing the same. I hope I'm not derailing too much but may I please ask the name of the controversial mods? I've both games heavily modded to hell and bad and now I got a little paranoid.
been getting a new pc set up so i've been offline a bit.
Starbounds nonsense was F.U./fractal universe dude had save bricking code if he found you had porn mods in your game and zomboids was a dude having a crashout when people chose to remove his politics from his mod and he added save/world bricking code that kicked off when his mod detected the political gibbering was removed.
Starsectors was the dude behind take no prisoners mod getting shitty that people added things he didn't like as addons to his mod and so added save bricking code as a response.
For the record. all incident resulted in the removal of the afflicted code and in 2 cases iirc the modders were perma'd being zomboids and starsectors git. starsectors' mod was given to a custodian, I think zomboids mod was full purged and Starbounds was cleaned and the dev was sternly warned by steam for his dickery.
that's what I remember but freely factcheck me cause my memory's shit.
...WHAT DO YOU MEAN FOUR!?!?!? WTF??? WHERED PROJECT SZOMBOID COME FROM????
GShade which turned peoples computers off, resulting in it being banned from Github.
(EDITED: Lightless was also apparently spyware. One dev on the team had some code in there I guess? I heard this one through grapevine, can't give much more info.)
Much appreciated for this.
You have LowLightSpawns listen under nothing needing to change on your survey but it keeps telling me i need configlib.
https://ibb.co/v6hKhZh4
You're right - I missed a variation on how mods depend on each other in my scanner. The compatibility guide is now updated - there are six in the "no changes needed" group that do this:
I could make configkit fake the dependency here, but I'm leary of making one mod "pose" as another (even though it's totally possible).
Most of my mods are actually also an interesting variation, I effectively have a code first config approach inside InsanityLib with ConfigLib integration (essentially a refinement of my AutoConfigLib code) that most of my mods work with.
Having said that... any chance you plan on adding support for complex objects (such as arrays, lists, dicts and custom sub classes) in the custom managed configs? Most of my ModConfigs heavily rely on these to make configs logic and efficient from a code perspective.
(if not I'll probably give it a shot myself, once I feel motivated enough to get into another fist fight with the VS GUI code that is :P)
I've got something cooking. Will release tomorrow if it feels close enough. :)
Ah, nevermind, seen the update. I modified the jsons myself and now working
1.2.0 is released! Wasn't expecting to do another release today but found a few things doing the survey of top 2k mods:
I suggested it because it was a feature in ConfigLib.
Man, looks LOADS better. Not to hate on any mod, but this looks amazing.
If you're wondering what mods are compatible with ConfigKit, I did a quick survey: Mod Compatibility
Vanilla UI <3
Thanks, King. ππ
It needs a way to show what the default value is
And a button to change a specific setting to a default value not just a button that changes all of them to it.
Thank you SO MUCH. If you're hiding what your code does from the end user, it's malware, end of discussion. Such a delight to log into the mod page and not even have to search long for a replacement lol. Cheers m8
1.1.0 is released! Changes are minor, but important:
Feel free to fork the project under a
lmao
Xskills Fork still want imGui π
Actually last time I checked the XSkills Fork doesn't require ImGui despite it being mentioned on their modpage, only the gilded addon truly required it.
XSkills Fork/Gilded do not use configlib to start with, as best I can tell. XSkills uses vsimgui, but that is for its own nice window rendering, not config management.
This is gold :) Nothing against imgui, but when guis don't match, it bothers a certain part of mah brain...
would it cause any problems to swap the original configlib for this on an existing server? (serverside)
Generally it should be a drop-in replacement, but it depends on the mods you're using. I've published a mod compatibility guide which can help you map out what might not work after the upgrade. Hope that helps!
thanks :)
""'
Draws its own ImGui settings screen? Describe the settings instead, usually less code than you had.
A settings class needs only stock .NET attributes ([Description], [Range], [Category])
"""
Now you're speaking my language, I wonder how well this would hold op against my configs containing complex nested sub classes though π€
Guess I will have to go test it when I get home.
Actually looking at the migration guide... It doesn't support that, which is fair enough ConfigLib itself didn't either (I was supposed to rework my approach for that into it but I never got to finishing that)
""'
Field types
bool, string, int, float, double, long and enums all work. An enum becomes a dropdown of its member names.
"""
based, thank you, and wow you are serious on accountability with the provenance thing.
Something I intend to do myself as well, once I am at a point where I can release my own code mods. nowhere close to that point yet.
Thank you for this. Trust is the bedrock of modding, and someone taking a sledgehammer to it is just... Plus now we have to reckon with the fact that depending on where they live, electronic crime law may have been breached and because they knew and didn't say anything, the devs of the game may be legally complicit. All this for what?
I hope going forward that this, and other mods like it, will help rebuild the trust that the community needs to be able to function.
Thank you!
Thank you very much, will be installing this gem today.
based
Thank you for this! Using the game's own interface is an amazing idea. Will defs move my mods over to this when I have the chance π
The Maltschism has begun...
:)c
Basedbasedbasedbasedbased
Thank you for making this and being so transparent. It's appreciated.