Folkhold

A single-player Minecraft world that changes without the player.

NPC factions trade, defend their villages and hold territory. Caravans travel between the villages. The reputation of the player decides how each village receives them.

Download 0.31.2 Release notes

Download

Latest version: 0.31.2, published on October 24, 2026.

For Minecraft 1.21.1 with NeoForge.

Modpack

The modpack is the simple way to play. It contains the Folkhold mods and a selection of mods for performance, nature, terrain, maps and inventory comfort.

folkhold-0.31.2.mrpack 1.3 MB

  1. Download the file of the modpack.
  2. Import the file in a launcher that reads Modrinth packs, for example Prism Launcher or the Modrinth App.
  3. Start the game and create a new world.

Mods

To use the mods without the modpack, put folkhold_core, folkhold_blocks and folkhold_world in the mods folder of a Minecraft 1.21.1 instance. The instance needs NeoForge 21.1.259 or later and GeckoLib 4.9.3 or later.

The README gives more information about the installation.

Release notes

Folkhold 0.31.2

Latest

Versions

Version Change Commit
0.31.2 docs: The Roads More Travelled makes paths on the routes of the caravans (#464) 3674218
0.31.1 fix(world): the route line follows a walk on the blocks, and the journal keeps the last route (#463) 1fb4923
0.31.0 feat(world): approximate and precise route lines, and a new calculation on request (#461) 81aab24
0.30.3 fix(world): the route of the journal goes through the gates, with its progress and the relief (#458) 78708e4
0.30.2 fix(world): a repair asks at once for its materials with quests (#456) 01c5d46
0.30.1 fix(world): the route of the journal shows as a yellow line in the world (#452) 82569bd
0.30.0 feat(world): the journal shows the caravan route between two villages (#449) 4524db2
0.29.0 feat(world): the player journal of the discovered villages and factions (#447) 91f1920
0.28.0 feat(world): the caravan routes use the roads, bridges and tunnels of the world (#446) c99ceaf
0.27.0 feat(world): the faction units have their own voices (#444) ff6873f
0.26.5 perf(world): the construction ghost keeps its vertices in buffers (#443) 7335dce
0.26.4 test(world): the raid spawn GameTest waits for the light of its blocks (#442) d13b131
0.26.3 fix(world): a caravan mule gets to its merchant behind the wall of a village (#440) bb82dde
0.26.2 test(world): the faction color and ruins bank GameTests set their level and stock (#439) 128d627
0.26.1 test(world): the raid gate test closes the gate before the check inside the palisade (#432) ed92623
0.26.0 feat(world): the builders keep the blocks that a player placed (#436) 081deab
0.25.0 feat(world): the builder sites go on while their chunks are not loaded (#435) ea91ba4
0.24.0 feat(world): the builders repair the damaged blocks of their village (#434) c7770c7
0.23.0 feat(world): the handymen light and put out the braziers of their village (#433) 801a5aa
0.22.0 feat(world): the builders take the materials from the village stock (#430) 5000ee5
0.21.0 feat(world): the builders of a village build the construction sites (#428) 90111ae
0.20.0 feat(world): builder and handyman villagers with an animated model (#426) 4fc3d72
0.19.0 feat(world): the villagers of a village are its whole population (#425) d916744
0.18.0 feat(world): crossbow archers in the larger villages (#422) acdc6fe
0.17.0 feat(world): guard detachments in the vanilla villages of a territory (#421) 72a3857
0.16.2 fix(world): raids against the faction villages: spawn positions and march (#420) 0deadbd
0.16.1 fix(world): discovery with the structure sets of the chunk generator (#419) 2ae195c
0.16.0 feat(world): ghost preview and placement of a construction (#411) a4bdff1
0.15.1 feat(core,world): reach zone at the feet of the builders (#410) cef0fbb
0.15.0 feat(blocks): quest board made with PixVox (#418) 2691fd2
0.14.0 feat(blocks): building signs made with PixVox (#417) 2917c09
0.13.0 feat(blocks): brazier made with PixVox (#415) e0f012b
0.12.0 feat(blocks): village heart, watch post and bank blocks made with PixVox (#414) 403f923
0.11.0 feat(world): construction plans with supports and scaffolding (#407) 6c4d0a6
0.10.0 feat(world): rider, a mounted unit of the garrison (#406) 807d8fe
0.9.0 feat(world): faction golem, the heavy unit of the large villages (#405) be3090a
0.8.0 feat(world): healer unit of the garrison (#403) 1bf0d42
0.7.0 feat(world): garrison size and equipment from the village level (#402) b1403cc
0.6.1 build(dev): the GameTest server has its own folder and a new world for each run (#400) e2f0c75
0.6.0 feat(world): test world with a faction village next to the spawn point (#399) d412873
0.5.4 docs(design): scope of J5 and J6, construction system before the growth (#396) c46acb6
0.5.3 docs(design): order and numbers of the milestones J5 to J8 (#389) 3f9973d

The versions start from 0.5.2 (v0.5.2).
All changes: v0.5.2...v0.31.2

Folkhold 0.5.2

Versions

Version Change Commit
0.5.2 ci: the checks of develop on all the pull requests of a stack (#384) cabcfde
0.5.1 ci: the version badge reads the version from GitHub Pages (#387) e13652f
0.5.0 feat(blocks): library mod folkhold_blocks with the Folkhold blocks and the brazier (#379) 22c36ae
0.4.1 ci: the version badge reads the version from the badges branch (#378) 0abd33c
0.4.0 perf(modpack): C2ME, ScalableLux and NoisiumForked for faster chunk generation, Chunky for the pre-generation (#376) ff5bb65
0.3.6 fix(world): the village heart does not wait for the generation of chunks (#375) 775e97a
0.3.5 feat(world): the discover action of the admin screen checks 3000 blocks in each direction (#374) f1768e7
0.3.4 test(world): the guard of the fence gate test has no random stroll (#373) 55f480f
0.3.3 fix(world): caravans go through the gates of the villages (#364) 32564d6
0.3.2 fix(world): no item from the Nether in the trade (#363) def7bb7
0.3.1 feat(world): territory HUD and quest HUD show by default (#362) 211dec4
0.3.0 fix(modpack): remove Weather2, Expanded Weather2 Dynamics and CoroUtil (#355) 2738181
0.2.2 fix(world): the units drop a player in creative or spectator mode (#354) 7a1b890
0.2.1 fix(world): zombie villager textures for the professions of the mod (#352) ec2d4d5
0.2.0 feat(core,world): territory as a disc of chunks around the village (#351) bee5376
0.1.5 fix(world): one noise column for each route cell, no blocked group after an error (#350) 7ca4b53

The versions start from 0.1.4 (v0.1.4).
All changes: v0.1.4...v0.5.2

Folkhold 0.1.4

Versions

Version Change Commit
0.1.4 docs: centered header, CI and release badges, project information in the README (#341) ec9de30
0.1.3 ci: Bump actions/setup-python from 6.3.0 to 7.0.0 (#342) f5a7b94
0.1.2 ci: Bump actions/setup-java from 6.0.1 to 6.1.0 (#343) 240a99a
0.1.1 ci: release on each merge of develop into main, version from the bump markers (#340) e69b252
194 commits with no bump marker
  • 0.1.0: test(world): the bank tests remove the bank chests of earlier tests (#337) (bbc2727)
  • 0.1.0: fix(world): no faction village near a vanilla village (#335) (e96f0f0)
  • 0.1.0: docs(ui): only a button shows its cut label in a tooltip (#334) (69426a2)
  • 0.1.0: refactor(world): one goal list for the faction units (#333) (9a4d58f)
  • 0.1.0: build: GameTests in a gametest source set outside the mod jars (#316) (c5fdb4e)
  • 0.1.0: fix(i18n): translation keys for the texts with a number or a separator (#325) (d3ee50b)
  • 0.1.0: refactor: one helper for each duplicated piece of code, no dead code (#324) (2220663)
  • 0.1.0: docs: guides match the code, workflow for the generated files (#330) (6e8c1af)
  • 0.1.0: docs: comments describe the current state of the code (#327) (5bdc4e9)
  • 0.1.0: fix(core): job rotation, scheduler failure policy, stable map order, lenient enum names (#322) (ea332cd)
  • 0.1.0: docs(design): implemented and planned markers, current facts (#329) (b23b7d5)
  • 0.1.0: build: Spotless, javac lints and Error Prone on the mods (#321) (ef25f9a)
  • 0.1.0: ci: timeouts, cancel on pull requests only, INFO logs, annotations from the markers (#319) (d41a995)
  • 0.1.0: docs: MIT license for the code, CC BY 4.0 for the assets (#328) (fa58b19)
  • 0.1.0: perf(world): stagger the heart ticks and cache the reputation tiers (#326) (c527ad9)
  • 0.1.0: fix(world): send the payloads through ModNetwork.send (#323) (e880745)
  • 0.1.0: ci: release from main only, release before publish, pinned packwiz and Go (#320) (4d9b02b)
  • 0.1.0: build(core): JaCoCo coverage report and the missing unit tests (#318) (954d20a)
  • 0.1.0: test(world): JUnit tests with the game runtime for the pure logic and the codecs (#317) (e812003)
  • 0.1.0: fix(world): loot tables of the heart and the bank chest, lenient faction load, data versions (#315) (71f328d)
  • 0.1.0: fix(core,world): UI state that ends and clears itself (#314) (e591bc6)
  • 0.1.0: fix(world): a posted archer shoots from its post and does not go to a target (#313) (ab4aa5d)
  • 0.1.0: fix(world): wait between two path searches to an anchor that a unit cannot reach (#312) (1057a3b)
  • 0.1.0: fix(world): restore the build of main and make four GameTests stable (#332) (0e41e54)
  • 0.1.0: fix(world): units close the passages they go through and do not cycle them (#311) (665dbcc)
  • 0.1.0: fix(world): a new post starts the direct-move budget of a unit again (#310) (60eab50)
  • 0.1.0: fix(world): check the quest actions on the server and keep the rewards of absent players (#309) (f165d1a)
  • 0.1.0: fix(world): caravan guards get the health multiplier one time (#308) (210ac55)
  • 0.1.0: fix(world): a caravan with entities arrives as soon as it reaches the village (#307) (ba16eb9)
  • 0.1.0: fix(world): change the settlement id in the groups, the routes and the quests (#306) (a8e4012)
  • 0.1.0: fix(world): merchants and caravans sell only what the stock has (#305) (75a2945)
  • 0.1.0: fix(world): stop the route worker before the save and keep a failed search (#304) (a5914db)
  • 0.1.0: fix(world): one viewer at a time for a bank chest (#303) (67afdd1)
  • 0.1.0: feat(world): quest guidance and quest times on the game time (a5e25bc)
  • 0.1.0: fix(world): caravans and faction units walk on powder snow (7ff3913)
  • 0.1.0: feat(world): smaller territory banner and nearest village of the territory (620ebf5)
  • 0.1.0: feat(core): back button in sub-screens, dialogs and texts that fit (8b506ba)
  • 0.1.0: feat(world): admin screen shows the villages of the discovery and discovers on demand (1aaa525)
  • 0.1.0: feat(world): stairs at the village gates to the terrain (349d165)
  • 0.1.0: test(world): the papers test waits for the heart registration (1d0aa9d)
  • 0.1.0: feat(world): papers centered on the quest board (a6c7b81)
  • 0.1.0: feat(world): quest board at the end of the path, with one paper for each offer (3263f35)
  • 0.1.0: feat(world): toasts, territory title and village action bar (02ea9d6)
  • 0.1.0: feat(world): quest and territory HUD panels (402ede7)
  • 0.1.0: feat(world): admin screen with menus, badges and a status line (794ac7f)
  • 0.1.0: feat(world): village heart screen, player first (125f4d6)
  • 0.1.0: feat(world): pillage dialog with the reputation before and after (6520460)
  • 0.1.0: test(world): the board test uses a neutral player (738d414)
  • 0.1.0: feat(world): quest board screen as a notice board (334d6a0)
  • 0.1.0: feat(core): disabled button on parchment (7ccebdb)
  • 0.1.0: feat(core): badges with custom colors, clock text (869cd1c)
  • 0.1.0: feat(core): UI framework with the wood and parchment theme (769be88)
  • 0.1.0: test(world): the anchor of the door guards is behind the door (7385b55)
  • 0.1.0: test(world): the anchor of the guard is behind the signs (9fae012)
  • 0.1.0: fix(world): building signs and quest board parts block the paths (6113520)
  • 0.1.0: feat(world): large quest board of 3 x 3 blocks (183a3ad)
  • 0.1.0: feat(world): caravans cross the water segments in boats (24dd9c0)
  • 0.1.0: feat: detailed routes calculated while the group waits (c8f5e23)
  • 0.1.0: fix(world): the caravan stays together and arrives at the heart of its destination (5c655d5)
  • 0.1.0: fix(world): units close a door or a gate only when no entity is near it (773f68e)
  • 0.1.0: fix(world): admin teleport loads the chunks and finds a free position near the heart (9187cc8)
  • 0.1.0: fix(world): routes on a worker thread, no chunk load, simulation profiler (44e98a7)
  • 0.1.0: feat(core): weighted heuristic for the route search (9b5277a)
  • 0.1.0: feat(world): commands and admin overview of the caravans and the quests (509ae52)
  • 0.1.0: test(world): read the state of the escort offer before the cleanup (a275627)
  • 0.1.0: feat(world): escort quests with real caravans and ambushes (ac8542d)
  • 0.1.0: feat(world): delivery quests at the quest screen (4df90d9)
  • 0.1.0: test(world): the board test waits for the registration of the heart (9cc12b2)
  • 0.1.0: fix(world): send the quest payloads only to a client with the channel (f850838)
  • 0.1.0: feat(world): quest board, quest screen and quest HUD (e59be98)
  • 0.1.0: test(world): remove the bank chests of earlier tests before the ruins tests (1dd14a1)
  • 0.1.0: feat(world): saved quests and delivery offers of the villages (ed8b533)
  • 0.1.0: feat(core): quest model, quest log and delivery generation (957fcb7)
  • 0.1.0: test(world): no automatic abstract tick on the GameTest server (d6c17b1)
  • 0.1.0: docs(design): the caravan merchant looks like a wandering trader (330feec)
  • 0.1.0: fix(world): offers setter of the caravan merchant (8c061f3)
  • 0.1.0: feat(world): traveling merchants of the neutral faction (8b846f5)
  • 0.1.0: feat(core): the listener can keep a group at the end of its route (3e07730)
  • 0.1.0: feat(world): trade with the caravans, raids and cargo in the mule chests (740a846)
  • 0.1.0: docs(world): wrap the javadoc of the materializer (f430f39)
  • 0.1.0: feat(world): caravan merchant on the route, mules and guards near the merchant (40d6632)
  • 0.1.0: feat(core): a group with entities leaves at its departure tick (617b67b)
  • 0.1.0: docs(design): record the J4 decisions (5ec066a)
  • 0.1.0: feat(world): materialization of the mobile groups near the players (cd78c23)
  • 0.1.0: fix(world): water depth of the routes from the surface and floor heights (5b98b28)
  • 0.1.0: feat(world): trade caravans between villages, payment at the arrival (a2b8f02)
  • 0.1.0: feat(core): surpluses, needs and greedy match of the trade between villages (194d316)
  • 0.1.0: feat(world): caravan routes from the chunk generator heights (02ffa44)
  • 0.1.0: feat(core): route search on a coarse grid (58d8299)
  • 0.1.0: feat(world): saved mobile groups and their abstract tick (473eb1a)
  • 0.1.0: feat(core): mobile group model, route and abstract movement (64ff3dd)
  • 0.1.0: test(world): the ruins tests put the faction treasury back (c8a9e7e)
  • 0.1.0: test(world): neutral reputation in the inhabitant trade test (8b5950d)
  • 0.1.0: feat(world): inhabitants show the jobs of their village (deda5f1)
  • 0.1.0: fix(world): ruins keep the bank content, and the restore rebuilds the village (a389716)
  • 0.1.0: feat(world): raised frame and icon on the building signs (7d757dc)
  • 0.1.0: fix(world): valid translations and no bank chests left by the bank test (2ab66ac)
  • 0.1.0: fix(world): inhabitant tunic in the robe area of the texture (a9afdbd)
  • 0.1.0: test(world): earlier test settlements go into ruins (3051e15)
  • 0.1.0: feat(world): admin screen for the settlements (723a250)
  • 0.1.0: feat(world): building signs and bank treasury (6444c4e)
  • 0.1.0: fix(world): merchant robe in the robe area of the texture (a88f4c0)
  • 0.1.0: fix(world): complete village ground and tower stairs (795eb27)
  • 0.1.0: feat(world): inhabitants of the faction villages (9dbc978)
  • 0.1.0: feat(world): village heart screen with tabs and scroll (b7b9bdb)
  • 0.1.0: ci: pin the runner image to Ubuntu 24.04 (975dd56)
  • 0.1.0: feat(world): faction units use the villager sounds (c86180f)
  • 0.1.0: fix(world): start the economy of a new settlement at once (846f39b)
  • 0.1.0: test(world): use the mock player of TestSupport in the merchant tests (0b3f33a)
  • 0.1.0: test(world): replace the deprecated mock server player (b95100c)
  • 0.1.0: ci: pin packwiz and Go, and try the packwiz download 3 times (c02781d)
  • 0.1.0: fix(world): only a complete path to the target makes it reachable (976ad2b)
  • 0.1.0: test(world): record the chase history in the unreachable target test (cc794cb)
  • 0.1.0: test(world): show the chase state in the failure message of the unreachable target test (44c9a99)
  • 0.1.0: fix(world): stable unreachable target check and fence gate goal (ce49d97)
  • 0.1.0: feat(world): 2 guards with a sword in the default garrison (4f8c9ea)
  • 0.1.0: docs(design): record the J3 decisions (65afbb5)
  • 0.1.0: fix(world): connect the window panes of the village houses to the walls (42092b8)
  • 0.1.0: test(world): the merchant buys any item that the village needs (037ad5e)
  • 0.1.0: feat(world): village merchants that trade from the stocks (eb585b3)
  • 0.1.0: fix(world): use the instant build ability for the creative players of the bank (a49bcbb)
  • 0.1.0: feat(world): village cats near the gates (22ef92b)
  • 0.1.0: test(world): register the heart and use a survival player in the bank tests (c551956)
  • 0.1.0: feat(world): alarm bell and shared targets in the village (4a955f0)
  • 0.1.0: feat(world): archers move between the towers (7aface2)
  • 0.1.0: style(world): order the imports of the faction unit (84a36a9)
  • 0.1.0: fix(world): units find a path around a wall, and stop the chase of an unreachable target (b548a7c)
  • 0.1.0: test(world): do not depend on the random jobs in the start stock test (65a6711)
  • 0.1.0: test(world): use only farmers in the economy cycle test (f031b19)
  • 0.1.0: feat(world): economy and territory in the village heart screen (1eeaa29)
  • 0.1.0: feat(world): commands for the abstract simulation (f7ccff3)
  • 0.1.0: test(world): retire the test settlements of another faction (20c4c3d)
  • 0.1.0: feat(world): village bank with pillage (f322708)
  • 0.1.0: fix(world): connect the window panes of the village houses to the walls (27cfe05)
  • 0.1.0: feat(world): crafted good jobs (7f25df8)
  • 0.1.0: test(core): feed the population in the tool wear test (5858e89)
  • 0.1.0: feat(world): raw material and processing jobs (e634d53)
  • 0.1.0: feat(world): food jobs (113c5c6)
  • 0.1.0: feat(world): economy of the settlements (aad317c)
  • 0.1.0: feat(world): destroyed villages become ruins (15fef79)
  • 0.1.0: feat(world): territory claims from the village level (06178c3)
  • 0.1.0: feat(world): village level, tiers and experience (7faf4ef)
  • 0.1.0: feat(world): abstract tick scheduler with a time budget (6c7e3a1)
  • 0.1.0: feat(world): settlement registry with the discovery of the villages (97ec7bf)
  • 0.1.0: fix(modpack): remove Sodium Dynamic Lights and its options libraries (1788308)
  • 0.1.0: chore(modpack): add the LambDynamicLights metafile (9e2fdd5)
  • 0.1.0: chore(modpack): add the Reese's Sodium Options metafile (0061254)
  • 0.1.0: chore(modpack): add the Tectonic and Sodium Dynamic Lights metafiles (0225139)
  • 0.1.0: chore(modpack): add Tectonic and Sodium Dynamic Lights to the base mods (c815f68)
  • 0.1.0: docs(design): scope of version 1 (30c8eb3)
  • 0.1.0: test(world): remove the village of the guard in the fence gate test (7d84352)
  • 0.1.0: fix(world): limit the chase radius to 200 blocks (8ae0e3b)
  • 0.1.0: feat(world): village heart screen (89a5ff8)
  • 0.1.0: fix(i18n): use the same French address form in the territory message (01f0468)
  • 0.1.0: feat(world): territory and village messages, optional territory HUD (02429ed)
  • 0.1.0: feat(world): units open and close fence gates (66617c1)
  • 0.1.0: test(world): remove the village of the guard in the chase radius test (846a4f1)
  • 0.1.0: fix(world): check the chase radius on each tick (a18fe32)
  • 0.1.0: feat(world): village-wide hostility and chase area around the village (464cbd0)
  • 0.1.0: fix(world): armor and held item positions on the unit model (aef4066)
  • 0.1.0: fix(world): spawn the garrison units on the ground of the village (66f8b0d)
  • 0.1.0: fix(world): tower slits, village lights and faction banners on the palisade (e87ac0a)
  • 0.1.0: chore(dev): start Docker Desktop from the dev script when it does not run (4946868)
  • 0.1.0: Geckolib added (44b4a45)
  • 0.1.0: build: share the GeckoLib repository with the dev project (baba37b)
  • 0.1.0: feat(world): animate the faction units with GeckoLib (4317d3f)
  • 0.1.0: fix(world): update the swing time of the units (250b460)
  • 0.1.0: fix(world): rename a local variable in the heart status message (d65671f)
  • 0.1.0: feat(world): show the faction on the units and in the village messages (84895fc)
  • 0.1.0: feat(world): units act according to the player reputation (fc13786)
  • 0.1.0: feat(world): add the faction and reputation commands (0e87478)
  • 0.1.0: feat(world): add the player reputation (a5936de)
  • 0.1.0: feat(world): add cultures, factions and relations (b73bd74)
  • 0.1.0: docs(design): record the J2 decisions (b4dd7f3)
  • 0.1.0: fix(world): archers stay on the tower platform and shoot over a low parapet (cafc532)
  • 0.1.0: feat(world): apply the day and night states to the village (8906c08)
  • 0.1.0: test(world): find the village heart by a scan of the test area (13338f2)
  • 0.1.0: feat(world): add the faction village structure (d6ffa2e)
  • 0.1.0: feat(world): add the captain (9e50858)
  • 0.1.0: test(world): count all garrison roles in the garrison GameTests (733bfb0)
  • 0.1.0: feat(world): add the archer (44a63f2)
  • 0.1.0: feat(world): add the village garrison (5ab3fbe)
  • 0.1.0: feat(world): add the village heart and the shared alert state (1172706)
  • 0.1.0: test(world): build the arena floor from the test code (649c38a)
  • 0.1.0: test(world): remove the entities of each guard GameTest when it passes (cc87edc)
  • 0.1.0: test(world): stop the guard AI in the monster targeting GameTest (3c57fab)
  • 0.1.0: fix(world): hostile monsters attack guards first (13a9e11)
  • 0.1.0: test(world): attack the guard after its first ticks in the alert GameTest (f27a8da)
  • 0.1.0: test(world): keep the attacker alive in the alert GameTest and report the state (bb2912e)
  • 0.1.0: feat(world): add the guard AI (8c8ab33)
  • 0.1.0: feat(world): add the guard NPC and the combat configuration (7d6ae1a)
  • 0.1.0: ci: show build and GameTest errors as annotations (f3a6ca1)
  • 0.1.0: chore: store gradlew.bat with LF line endings in the index (cb99ee9)
  • 0.1.0: docs(design): record the design decisions (2547d05)

The versions start from 0.1.0 (v0.1.0-alpha.1).
All changes: v0.1.0-alpha.1...v0.1.4

Folkhold 0.1.0-alpha.1

Pre-release

What's Changed

New Contributors

Full Changelog: https://github.com/nicolas-goyon/Folkhold/commits/v0.1.0-alpha.1