DFHack’s mission is to provide tools and interfaces for players and modders to:
- expand the bounds of what is possible in Dwarf Fortress
- reduce the impact of game bugs
- give the player more agency and control over the game
- provide alternatives to toilsome or frustrating aspects of gameplay
- make the game more fun
The best way to make feature requests or report problems is to open an Issue at our GitHub page.
When reporting problems, links to your zipped, uploaded savegame and mods are immensely helpful, and issues with attached savegames and mods get fixed faster. We need a zip of your mods because we can't load your savegame without them.
DFHack installs directly into your Dwarf Fortress directory, so be sure to install it to the same Steam library and drive as Dwarf Fortress.
It is not a problem if you already have DFHack manually installed. You can subscribe to the Steam version and it will absorb the installed files. Your data in dfhack-config/ is safe. No additional steps are necessary.
Quick compatibility update for the quick-released DF 51.13
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Paint the map with stars
The DFHack drawing tool gui/design now has an option for drawing hollow or filled N-point stars. You can even rotate the star around its axis so the points can go in any direction. Go ahead, make a Palace of the Sun for your demanding monarch!Search for units by any name
The general search and find tool, gui/sitemap, now displays both the native and the English translated name for all units. Whichever name you happen to remember, you can search for it and find the unit you're looking for! Click on the name to zoom to that unit on the map, or shift-click to start following that unit around.Let items rot away
The deteriorate tool is now available on the DFHack gui/control-panel. It allows items to rot away over time. This can be good for just keeping your map clean, but you can also use it to add a bit more challenge to the game. If you enable it with default settings, it will check the map for non-entombed corpses and non-usable body parts and let them rot away over the next few months. For an additional challenge, you can add food, usable body parts (like hair and bones) and damaged clothing to that list. Use it or lose it!What's my mod list again?
You can now use gui/mod-manager to see a list of your active mods. You can even export the list to the clipboard for easy sharing or posting.Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Some DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools listed as "unavailable" in the docs do not compile yet and are not accessible at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- deteriorate: (reinstated) allow corpses, body parts, food, and/or damaged clothes to rot away[/*]
- modtools/moddable-gods: (reinstated) create new deities from scratch[/*]
New Features
- gui/blueprint: now records zone designations[/*]
- gui/design: add option to draw N-point stars, hollow or filled or inverted, and change the main axis to orient in any direction[/*]
- gui/mod-manager: when run in a loaded world, shows a list of active mods -- click to export the list to the clipboard for easy sharing or posting[/*]
- gui/spectate: added "Prefer nicknamed" to the list of options[/*]
Fixes
- fixed an overly restrictive type constraint that resulted in some object types being glossed as a boolean when passed as an argument from C++ to Lua[/*]
- getplants:[list]
- will no longer crash when faced with plants with growths that do not drop seeds when processed[/*]
- use updated formula for calculating whether plant growths are ripe[/*]
- fix logic for determining whether plant growths have been picked[/*]
Misc Improvements
- All places where units are listed in DFHack tools now show the translated English name in addition to the native name. In particular, this makes units searchable by English name in gui/sitemap.[/*]
- blueprint:[list]
- support for recording zones[/*]
- support for recording stockpile properties like names and stockpile links; does not yet support recording detailed contents configuration[/*]
Removed
- removed historically unused Core :: RegisterData/Core :: GetData API and associated internal data structures[/*]
API
- cuboid :: forCoord, Maps :: forCoord: take additional parameter to control whether iteration goes in column major or row major order[/*]
- Items :: getDescription: fixed display of quality levels, now displays ALL item designations (in correct order) and obeys vanilla SHOW_IMP_QUALITY setting[/*]
- Random module: added SplitmixRNG class, implements the Splitmix64 RNG used by Dwarf Fortress for "simple" randomness[/*]
Lua
- script-manager:[list]
- new get_active_mods() function for getting information on active mods[/*]
- new get_mod_info_metadata() function for getting information out of mod info.txt files[/*]
Quick patch to fix a crashes in preserve-rooms and preserve-tombs when an invalid unit is assigned to a zone.
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Break up brawls
Both fix/loyaltycascade and makeown now take the extra step of calming any brawls that your citizens are involved in. If a particular captured and tamed pet is acting unruly (e.g. a Roc attacking your military or random visitors), select it and run makeown to remove it from any conflicts it may have been involved in before you tamed it.Likewise, fix/loyaltycascade will now break up tavern brawls. Tavern brawls aren't true "loyalty cascades", since the brawlers aren't actually enemies of your civilization. However, it really looks like a loyalty cascade, and this is the tool that players tend to try when a tavern brawl spirals out of control.
And remember the old fortress adage: "To your alcohol stocks pay mind, but keep those tavern keepers unassigned!".
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Some DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools listed as "unavailable" in the docs do not compile yet and are not accessible at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
Fixes
- text widgets no longer lose their cursor when the Ctrl-a (select all) hotkey is pressed when there is no text to select[/*]
- dig-now:[list]
- fix cases where boulders/rough gems of incorrect material were being generated when digging through walls[/*]
- properly generate ice boulders when digging through ice walls[/*]
Misc Improvements
- fix/loyaltycascade: now also breaks up brawls and other intra-fort conflicts that [u]look[/u] like loyalty cascades[/*]
- makeown: remove selected unit from any current conflicts so they don't just start attacking other citizens when you make them a citizen of your fort[/*]
- spectate: show dwarves' activities (like prayer)[/*]
API
- Buildings :: setOwner: updated for changes in 51.11[/*]
- Buildings module: add getOwner (using the Units :: get_cached_unit_by_global_id mechanic) to reflect changes in 51.11[/*]
- Military module: added addToSquad function[/*]
- Units :: teleport: projectile information is now cleared for teleported units[/*]
- Units module: added get_cached_unit_by_global_id to emulate how DF handles unit vector index caching (used in civzones and in general references)[/*]
Lua
- dfhack.military.addToSquad: expose Military API function[/*]
- dfhack.buildings.getOwner: make new Buildings API available to Lua[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
New toolbar icons for popular tools
By popular demand, gui/sitemap now has an icon on the main toolbar at the bottom of the screen. Click this button to quickly find and zoom to (or follow) units, locations (like your guildhalls and hospital), or artifacts. You can search by either native names or translated names for units and artifacts.If you prefer hotkeys, the Ctrl-g hotkey for gui/sitemap still works as it always has.

Similarly gui/mass-remove now has a toolbar button that shows when you click the vanilla "eraser" toolbar icon. The new button shows up next to the other "remove" icons. gui/mass-remove allows you to area select to remove any combination of constructions, buildings, stockpiles, and zones. For buildings and constructions, you also have the option to only remove those that are fully built, those that are planned but not yet built, or both.

Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Some DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools listed as "unavailable" in the docs do not compile yet and are not accessible at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Features
- gui/journal: Ctrl-j hotkey to launch gui/journal now works in adventure mode![/*]
- gui/mass-remove: add a button to the bottom toolbar when eraser mode is active for launching gui/mass-remove[/*]
- gui/sitemap: add a button to the toolbar at the bottom left corner of the screen for launching gui/sitemap[/*]
- idle-crafting: default to only considering happy and ecstatic units for the highest need threshold[/*]
Fixes
- Fix processing error in the overlay that displays unit preferences in the baron selection list[/*]
- gui/journal: prevent pause/unpause events from leaking through the UI when keys are mashed[/*]
- idle-crafting: check that units still have crafting needs before creating a job for them[/*]
API
- Filesystem module: rewritten to use C++ standard library components, for better portability[/*]
Q: How do I download DFHack?
A: Either add to your Steam library from our Steam page or scroll to the latest release on our GitHub releases page , expand the "Assets" list, and download the file for your platform (e.g. dfhack-XX.XX-rX-Windows-64bit.zip. If you are on Windows and are manually installing from the zip file, please remember to right click on the file after downloading, open the file properties, and select the "Unblock" checkbox. This will prevent issues with Windows antivirus programs.If you are on the Steam DF experimental branch, please also switch DFHack to its experimental branch in your Steam client.
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Changelog
Misc Improvements
- Compatibility update for DF 51.08[/*]
- Please see release notes for 51.07-r1 for recent changes[/*]
Q: How do I download DFHack?
A: Either add to your Steam library from our Steam page or scroll to the latest release on our GitHub releases page , expand the "Assets" list, and download the file for your platform (e.g. dfhack-XX.XX-rX-Windows-64bit.zip. If you are on Windows and are manually installing from the zip file, please remember to right click on the file after downloading, open the file properties, and select the "Unblock" checkbox. This will prevent issues with Windows antivirus programs.If you are on the Steam DF experimental branch, please also switch DFHack to its experimental branch in your Steam client.
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Adventure mode support for gui/journal
Now you can keep an in-game journal of your adventures! Run gui/journal and you'll get a per-adventurer journal to write in. It is saved with your adventures, and if you retire and later unretire that same adventurer, their journal will still be with them.Follow your dwarves like a pro, or watch them like a fish tank
The spectate tool has had a complete overhaul, and is now integrated into the vanilla follow mode. There are lots of ways you can interact with it.If you start following a dwarf by clicking on the vanilla "camera" button, you'll see that the little panel that shows up in the lower left corner has a few more widgets on it. You can hit the right arrow key (or click on the icon) to follow another target, or you can hit the left arrow key (or click on the icon) to follow the [u]previous[/u] target. This means you can quickly switch to a new dwarf and then back to a previous dwarf just by tapping the arrow keys.

There is also an indicator for whether "spectate mode" is on. If you turn it on, you can let the game run and spectate will periodically shift the camera to follow a different dwarf. If you've managed to get your fort into a stable state, this is a good way to sit back, relax, and watch your dwarves like a fish tank.

How does it choose the next dwarf to follow? It's random, but you can tweak how it chooses targets with the new gui/spectate interface. You can launch it by clicking on the gear icon on the follow panel, where the new left and right arrow widgets are. You can choose which kinds of units other than your own dwarves to include as possible targets, like livestock, enemies, or visitors. By default, the camera will prefer to follow units that are in combat and units that have newly arrived on the map.

If spectate mode is enabled and the new "cinematic action" option is on, the camera will even switch targets more quickly when there is combat afoot! If the "Auto unpause" option is on, events that would normally pause the game, like sieges or artifact announcements, will not pause the game at all. This allows a "true" fish tank mode where you can see your beautiful fort rise and fall of its own accord.
Spectate mode will automatically disengage when you jump in to take control. It switches off when you move the camera: the exact same way that vanilla follow mode switches off. Spectate mode will also disengage when you open the squads panel.
We've also made it easier to jump to following a specific target. There is a new global hotkey: Ctrl-g (for "go to"). It is available when you are on the main dwarf map (or the main adventure map, but "follow" mode isn't relevant there).

Ctrl-g will pop up the gui/sitemap interface. You can start typing to search for a name, and Shift-click or Shift-Enter will start following that unit directly!

But wait, there's more!
You can also use gui/spectate to configure live tooltips for your dwarves. If you turn on the spectate.tooltips overlay, you can display information like their name, their current happiness level, and their current job. The "Follow" set of toggles controls what information will follow your dwarves around on the map in floating tooltips. The "Hover" set of toggles controls what information will be shown in a pop up when you hover your mouse over a unit.

Give it a try! My favorite configuration so far is:
- "Follow" shows an indicator for miserable and unhappy dwarves[/*]
- "Hover" shows the current stress level, name, and job[/*]

Skip adventure messages
The new advtools.fastcombat overlay allows you to skip combat animations and the announcement "More" button. If you're trying to walk through a populated area, this can be a huge time (and click) saver! Have you heard the one about the elf and the elf? Yes, we have! Let us walk across the room!
Now, to skip all the "More" messages, just hit any movement key. The first movement key will skip the messages to the end of the list. Hit the key again to move. It works the same with the mouse. The first click on the map will skip all messages to the end, and the second click will start your adventurer walking to that destination.
Attach notes to the map
We now have a tool for attaching notes to fort map tiles! gui/notes is the UI for adding and managing map notes. You can memorialize events where they occurred
or leave design plans for yourself on the levels where you plan to expand your fort.

Schedule cheese making according to milk supplies
Cheese making is difficult to automate using work orders. A single job can consume anything from a bucket with a single unit of milk to a barrel with 100 units of milk. This makes it hard to predict how much cheese will actually be produced by a regular manager work order.If you enable autocheese in the DFHack control panel, it will scan your fort for barrels with a certain minimum amount of milk (default: 50), create a cheese making job specifically for that barrel, and assign this job to one of your idle dwarves (giving preference to skilled cheese makers).

Easy cheesy!
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Some DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools listed as "unavailable" in the docs do not compile yet and are not accessible at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- autocheese: automatically make cheese using barrels that have accumulated sufficient milk[/*]
- devel/export-map: export map tile data to a JSON file[/*]
- gui/notes: UI for adding and managing notes attached to tiles on the map[/*]
- gui/spectate: interactive UI for configuring spectate[/*]
- launch: (reinstated) new adventurer fighting move: thrash your enemies with a flying suplex[/*]
- putontable: (reinstated) make an item appear on a table[/*]
New Features
- advtools: advtools.fastcombat overlay (enabled by default) allows you to skip combat animations and the announcement "More" button by mashing the movement keys[/*]
- emigration: nobles command for sending freeloader barons back to the sites that they rule over[/*]
- gui/journal: now working in adventure mode -- journal is per-adventurer, so if you unretire an adventurer, you get the same journal[/*]
- gui/sitemap: is now the official "go to" tool. new global hotkey for fort and adventure mode: Ctrl-G[/*]
- spectate:[list]
- can now specify number of seconds (in real time) before switching to follow a new unit[/*]
- new "cinematic-action" mode that dynamically speeds up perspective switches based on intensity of conflict[/*]
- new global keybinding for toggling spectate mode: Ctrl-Shift-S[/*]
- new overlay panel that allows you to cycle through following next/previous units (regardless of whether spectate mode is enabled)[/*]
Fixes
- Windows console: fix possible hang if the console returns a too-small window width (for any reason)[/*]
- changevein: fix a crash that could occur when attempting to change a vein into itself[/*]
- createitem: produced items will now end up at the look cursor position (if it is active)[/*]
- gui/liquids:[list]
- don't add liquids to wall tiles[/*]
- using the remove tool with magma selected will no longer create unexpected unpathable tiles[/*]
Misc Improvements
- autobutcher: treat animals on restraints as unavailable for slaughter[/*]
- colonies: support adventure mode[/*]
- devel/query: support adventure mode[/*]
- devel/tree-info: support adventure mode[/*]
- gui/confirm: in the delete manager order confirmation dialog, show a description of which order you have selected to delete[/*]
- gui/create-item: now accepts a pos argument of where to spawn items[/*]
- gui/design: only display vanilla dimensions tooltip if the DFHack dimensions tooltip is disabled[/*]
- gui/notify:[list]
- moody dwarf notification turns red when they can't reach workshop or items[/*]
- save reminder now appears in adventure mode[/*]
- save reminder changes color to yellow at 30 minutes and to orange at 60 minutes[/*]
Documentation
- stonesense-art-guide: guide for making sprite art for Stonesense[/*]
Removed
- orders: MakeCheese job removed from library/basic orders set. Please use autocheese instead![/*]
- stonesense: removed the "follow DF cursor" tracking mode since the keyboard cursor is no longer commonly used for moving the map around[/*]
API
- Buildings :: checkFreeTiles: now takes a building instead of a pointer to the building extents[/*]
- Items :: getItemBaseValue: adjust to the reduced value of prepared meals (changed in DF 51.06)[/*]
- Items :: getValue: magical powers now correctly contribute to item value[/*]
- Military :: removeFromSquad: removes unit from any squad assignments[/*]
- Units :: isUnitInBox, Units :: getUnitsInBox: don't include inactive units[/*]
Lua
- dfhack.buildings.checkFreeTiles: now takes a building pointer instead of an extents parameter[/*]
- dfhack.military.removeFromSquad: Lua API for Military :: removeFromSquad[/*]
- dfhack.units.setAutomaticProfessions: sets unit labors according to current work detail settings[/*]
- gui.dwarfmode: adventure mode cursor now supported in getCursorPos, setCursorPos, and clearCursorPos funcitons[/*]
- overlay.isOverlayEnabled: new API for querying whether a given overlay is enabled[/*]
- overlay: widgets can now declare overlay_onenable and overlay_ondisable functions to hook enable/disable[/*]
Structures
- create numerous new structures whose contents had previously been missing or inlined into other structures[/*]
- fix a variety of structure errors[/*]
- merged several duplicate structure/enum types[/*]
- promote all bay12 structures, enums, and bitfields to top-level types: this means that most T_* types now have top-level names[/*]
- reorganize all structure definitions to match bay12 header layouts[/*]
- specific changes:[list]
- Building vmethod countHospitalSupplies now returns abstract_building_contents instead of hospital_supplies, which has different field names[/*]
- When indexing into a vector named scribejobs, replace item_id and written_content_id with target_id and relevant_id[/*]
- conversation_state_type.DenyPermissionSleep is now SleepPermissionRequested[/*]
- block_square_event_spoorst.[whatever] is now block_square_event_spoorst.info.[whatever][/*]
- building_stockpilest.max_*/container_* is now building_stockpilest.storage.max_*/container_*[/*]
- building_civzonest.zone_settings.pen is now building_civzonest.zone_settings.pen.flags[/*]
- building_civzonest.zone_settings.tomb is now building_civzonest.zone_settings.tomb.flags[/*]
- building_bridgest.gate_flags.closed/closing/opening are now raised/raising/lowering[/*]
- building_weaponst.gate_flags.closed/closing/opening are now retracted/retracting/unretracting[/*]
- building.design.builder1/builder1_civ/builder2 are now .worker/worker_create_event/curworker (and the 2nd is a History Event, not an Entity)[/*]
- stockpile_settings.allow_organic/allow_inorganic are now stockpile_settings.misc.allow_organic/allow_inorganic[/*]
- world.busy_buildings[] is now world.building_uses.buildings[][/*]
- world.coin_batches is now world.coin_batches.all[/*]
- spatter.flags.water_soluble is now external[/*]
- creation_zone_pwg_alteration_campst.tent_matlgoss is now .tent_matgloss (spelling fix)[/*]
- world.raws.body_templates and world.raws.bodyglosses are now world.raws.creaturebody.*[/*]
- world.raws.tissue_templates/body_detail_plans/creature_variations are now world.raws.*.all[/*]
- material_force_adjustst.mat_indx is now mat_index (spelling fix)[/*]
- game.minimap.minimap[x][y] is now game.minimap.minimap[x][y].tile[/*]
- historical_entity.relations.diplomacy[] is now historical_entity.relations.diplomacy.state[][/*]
- historical_entity.conquered_site_group_flags is now historical_entity.law.conquered_site_group_flags[/*]
- world.effects is now world.effects.all[/*]
- world.raws.entities is now world.raws.entities.all[/*]
- site_type enum deleted, merged with world_site_type[/*]
- world.event.dirty_waters[].* is now world.event.dirty_waters[].pos.*[/*]
- death_condition_type enum replaced with histfig_body_state (notably in state_profilest.body_state)[/*]
- history_hit_item, history_event_reason_info, and history_event_circumstance_info removed and substituted[/*]
- knowledge_profilest.known_locations.ab_review[] is now .reports[] (because .known_locations got merged with site_reputation_info)[/*]
- world.raws.interactions[] is now world.raws.interactions.all[][/*]
- itemdef_instrumentst.registers/timbre are now itemdef_instrumentst.timbre.registers/timbre[/*]
- dye_info removed and substituted[/*]
- job_art_specification removed and substituted[/*]
- entity_activity_statistics.discovered_(creature_foods/creatures/plant_foods/plants) is now entity_activity_statistics.knowledge.*[/*]
- world.mandates[] is now world.mandates.all[][/*]
- creature_interaction_effect.counter_trigger.required is now creature_interaction_effect.counter_trigger.flag.bits.REQUIRED[/*]
- creature_interaction_effect_target removed and substituted[/*]
- material_common removed, its contents prepended to material and material_template[/*]
- world.raws.material_templates is now world.raws.material_templates.all[/*]
- world.raws.syndromes is now world.raws.mat_table.syndromes[/*]
- world.raws.effects is now world.raws.mat_table.effects[/*]
- world.raws.inorganics is now world.raws.inorganics.all[/*]
- world.raws.inorganics_subset is now world.raws.inorganics.cheap[/*]
- plotinfo.main.selected_hotkey/in_rename_hotkey are now plotinfo.main.hotkey_interface.*[/*]
- world.proj_list is now world.projectiles.all[/*]
- general_ref_building_well_tag.direction is now a bitfield[/*]
- world_region_details.edges.(split_x/split_y)[][].x/y are now .break_one/break_two[/*]
- world_population_ref.depth is now world_population_ref.layer_depth and is now an integer instead of an enum[/*]
- Bitfield region_weather_flag is now region_weather_bits (to avoid conflicts)[/*]
- Rhythm beat_flag realigned (PrimaryAccent removed, because it wasn't really a unique flag)[/*]
- dipscript_info.script_steps/script_vars are now dipscript_info.script.steps/vars[/*]
- script_step_discussst.event is now script_step_discussst.duration[/*]
- script_step_dipeventst and script_step_invasionst fields renamed[/*]
- site_architecture_changest.spec_flag is now a tagged union[/*]
- squad.schedule[x][y] is now squad.schedule.routine[x].month[y][/*]
- world.unit_chunks is now world.unit_chunks.all[/*]
- historical_entity.events[] is now historical_entity.rumor_info.events[/*]
- world.enemy_status_cache.rel_map[x][y] is now world.enemy_status_cache.rel_map[x][y].ur[/*]
- unit.curse.interaction_id/interaction_time/interaction_delay/time_on_site/own_interaction/own_interaction_delay are now unit.curse.interaction.*[/*]
- unit.cached_glowtile_type is now unit.cache.cached_glowtile_type[/*]
- unit_preference.active is now unit_preference.flags.visible[/*]
- witness_report_flags replaced with correct flags[/*]
- caste_body_info.clothing_items.[] is now caste_body_info.clothing_items.bp[][/*]
- plant_tree_tile.branches_dir enum collapsed into 4 simple flags[/*]
- world.populations is now world.populations.all[/*]
- world_data.constructions.map[x][y][N] is now world_data.constructions.map[x][y].square[N][/*]
- world.family_info[] is now world.family_info.family[][/*]
- world.fake_world_info[] is now world.fake_world_info.language[][/*]
- world.selected_direction is now world.selected_direction[0] (and there are 3 additional entries)[/*]
This is a beta release. To install, select the beta branch for DFHack in your Steam client.
If you are on the Steam DF experimental branch, please select the experimental branch for DFHack in your Steam client.
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Follow your dwarves like a pro, or watch them like a fish tank
The spectate tool has had a complete overhaul, and is now integrated into the vanilla follow mode. There are lots of ways you can interact with it.If you start following a dwarf by clicking on the vanilla "camera" button, you'll see that the little panel that shows up in the lower left corner has a few more widgets on it. You can hit the right arrow key (or click on the icon) to follow another target, or you can hit the left arrow key (or click on the icon) to follow the [u]previous[/u] target. This means you can quickly switch to a new dwarf and then back to a previous dwarf just by tapping the arrow keys.

There is also an indicator for whether "spectate mode" is on. If you turn it on, you can let the game run and spectate will periodically shift the camera to follow a different dwarf. If you've managed to get your fort into a stable state, this is a good way to sit back, relax, and watch your dwarves like a fish tank.

How does it choose the next dwarf to follow? It's random, but you can tweak how it chooses targets with the new gui/spectate interface. You can launch it by clicking on the gear icon on the follow panel, where the new left and right arrow widgets are. You can choose which kinds of units other than your own dwarves to include as possible targets, like livestock, enemies, or visitors. By default, the camera will prefer to follow units that are in combat and units that have newly arrived on the map.

If spectate mode is enabled and the new "cinematic action" option is on, the camera will even switch targets more quickly when there is combat afoot! If the "Auto unpause" option is on, events that would normally pause the game, like sieges or artifact announcements, will not pause the game at all. This allows a "true" fish tank mode where you can see your beautiful fort rise and fall of its own accord.
Spectate mode will automatically disengage when you jump in to take control. It switches off when you move the camera: the exact same way that vanilla follow mode switches off. Spectate mode will also disengage when you open the squads panel.
We've also made it easier to jump to following a specific target. There is a new global hotkey: Ctrl-g (for "go to"). It is available when you are on the main dwarf map (or the main adventure map, but "follow" mode isn't relevant there).

Ctrl-g will pop up the gui/sitemap interface. You can start typing to search for a name, and Shift-click or Shift-Enter will start following that unit directly!

But wait, there's more!
You can also use gui/spectate to configure live tooltips for your dwarves. If you turn on the spectate.tooltips overlay, you can display information like their name, their current happiness level, and their current job. The "Follow" set of toggles controls what information will follow your dwarves around on the map in floating tooltips. The "Hover" set of toggles controls what information will be shown in a pop up when you hover your mouse over a unit.

Give it a try! My favorite configuration so far is:
- "Follow" shows an indicator for miserable and unhappy dwarves[/*]
- "Hover" shows the current stress level, name, and job[/*]

Skip adventure messages
The new advtools.fastcombat overlay allows you to skip combat animations and the announcement "More" button. If you're trying to walk through a populated area, this can be a huge time (and click) saver! Have you heard the one about the elf and the elf? Yes, we have! Let us walk across the room!
Now, to skip all the "More" messages, just hit any movement key. The first movement key will skip the messages to the end of the list. Hit the key again to move. It works the same with the mouse. The first click on the map will skip all messages to the end, and the second click will start your adventurer walking to that destination.
Attach notes to the map
We now have a tool for attaching notes to fort map tiles! gui/notes is the UI for adding and managing map notes. You can memorialize events where they occurred
or leave design plans for yourself on the levels where you plan to expand your fort.

Schedule cheese making according to milk supplies
Cheese making is difficult to automate using work orders. A single job can consume anything from a bucket with a single unit of milk to a barrel with 100 units of milk. This makes it hard to predict how much cheese will actually be produced by a regular manager work order.If you enable autocheese in the DFHack control panel, it will scan your fort for barrels with a certain minimum amount of milk (default: 50), create a cheese making job specifically for that barrel, and assign this job to one of your idle dwarves (giving preference to skilled cheese makers).

Easy cheesy!
Announcements
So why is this a beta?
In addition to the new features (which we always need feedback on!), DFHack has undergone an extensive internal reorganization to help align the code closer to how the internal DF structures are organized. For scripts, many of the df namespace paths have changed. If you are maintaining an out-of-tree script, find out what identifiers have changed in the Structures release notes on Github: https://github.com/DFHack/dfhack/releases/tag/51.06-r2rc1As a player, please keep an eye out for commands that return errors when you run them or functionality that appears not to work like it used to. It is possible that typos have crept in with all the updates.
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Some DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools listed as "unavailable" in the docs do not compile yet and are not accessible at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
For full details, please see https://github.com/DFHack/dfhack/releases/tag/51.06-r2rc1This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Some DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools listed as "unavailable" in the docs do not compile yet and are not accessible at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
This is a compatibility release for DF 51.05 and has no new features since DFHack 51.04-r1.1.This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
Currently, each distribution channel of DF has a different version. This release of DFHack is specifically compatible with:
- Dwarf Fortress 51.04 on Steam[/*]
- Dwarf Fortress 51.03 on Itch[/*]
- Dwarf Fortress 51.02 Classic[/*]
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Changelog
New Features
- stonesense:[list]
- added option EXTRUDE_TILES to slightly expand sprite to avoid gaps (on by default)[/*]
- added option PIXELPERFECT_ZOOM to change the zoom scale to avoid gaps (off by default)[/*]
- added back minecart track graphics[/*]
Fixes
- Ctrl-a hotkeys have been changed to something else (Ctrl-n) for tools that also have an editable text field, where Ctrl-a is interpreted as select all text[/*]
- advtools: fix dfhack-added conversation options not appearing in the ask whereabouts conversation tree[/*]
- gui/launcher:[list]
- ensure commandline is fully visible when searching through history and switching from a very long command to a short command[/*]
- flatten text when pasting multi-line text from the clipboard[/*]
Misc Improvements
- assign-preferences: new --show option to display the preferences of the selected unit[/*]
- pref-adjust: new show command to display the preferences of the selected unit[/*]
- stonesense:[list]
- improved the way altars look[/*]
- fog no longer unnecessarily renders to a separate bitmap[/*]
- added new connective tiles for pools of blood and vomit[/*]
Removed
- gui/control-panel: removed craft-age-wear tweak for Windows users; the tweak doesn't currently load on Windows[/*]
API
- Core :: getUnpausedMs: new API for getting unpaused ms since load in a fort-mode game[/*]
This release is just a quick compatibility update for the latest stable DF release (51.03).
Changelog
Fixes
- gui/gm-editor: fix Enter key not being recognized for opening the selected object[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Some DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools listed as "unavailable" in the docs do not compile yet and are not accessible at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
Fixes
- deathcause: fix error when retrieving the name of a historical figure[/*]
Misc Improvements
- DFHack edit field widgets, such as the commandline editor in gui/launcher, now support text selection and other advanced text editing features from gui/journal[/*]
- stonesense:[list]
- keybinds.txt config file is now read from dfhack-config/stonesense/keybinds.txt[/*]
- added some missing artwork for bookcases, displays, and offering places[/*]
- reorganized the position of some existing art to be more intuitive[/*]
- added index numbers empty sprite slots to aid in making the xml files for the sprites[/*]
- zoom levels in stonesense now mirror the main game when in follow mode[/*]
Q: How do I download DFHack?
A: Either add to your Steam library from our Steam page or scroll to the latest release on our GitHub releases page , expand the "Assets" list, and download the file for your platform (e.g. dfhack-XX.XX-rX-Windows-64bit.zip. If you are on Windows and are manually installing from the zip file, please remember to right click on the file after downloading, open the file properties, and select the "Unblock" checkbox. This will prevent issues with Windows antivirus programs.This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
The stonesense stands up
Stonesense, the beloved tool that renders your fortress in 3D, has seen some serious love in this release. Thanks to the efforts of new contributor Squid Coder and our own Rome of Oxtrot, longstanding crash bugs are fixed and many quality of life features are added.
Here are some new things to try:
- Hit semicolon (;) to toggle fog (huge performance boost)[/*]
- Hit a to toggle announcements (which are now neatly tucked away in the lower right corner)[/*]
Give it a try if you haven't already! It can be breathtaking to see your fortress creations in full 3D!
Rescue missions for lost squads
Occasionally, squads that you send out on a mission get stuck on the world map. They lose their ability to navigate and are unable to return to your fortress. This tool allows a messenger that is returning from a holding or any other of your squads that is returning from a mission to rescue the lost squad along the way and bring them home.
This fix is enabled by default in the DFHack control panel , so you don't need to do anything special to benefit from it. However, it is still up to you to send out a messenger or squad that can be tasked with the rescue. If you have a holding that is linked to your fort, you can send out a messenger you dont have to actually request any workers. Otherwise, you can send a squad out on a mission with minimal risk, like Demand one-time tribute.
This tool is also integrated with the DFHack notifcation panel , so you will get a notification when a squad is stuck and there are no squads or messengers currently out traveling that can rescue them.

Note that there might be other reasons why your squad appears missing if it got wiped out in combat and nobody survived to report back, for example but this tool should allow you to recover from the cases that are actual bugs.
Rename anything that can be named
Sure, you can rename your fortress before you embark, but what about second rename?Fire up gui/rename, and you can choose from a list of nameable entities in your environment to give a custom name to. This tool works with DFs in-world languages, so you get an interface similar to the one you use to give names to fortresses and governments on embark. It is a little more informative and flexible compared to the vanilla UI, though. For example, you can search for or sort by the English word or the translated language word. You can also change the language of a name, and you can give units new "real" first names.

You can click on something (e.g. a unit) and then run gui/rename to rename it, or you can choose any of the following from an in-tool selection dialog:
- An artifact on the current map[/*]
- A unit on the current map[/*]
- A squad belonging to the current fortress[/*]
- A location (e.g. tavern, hospital, guildhall, temple) on the current map[/*]
- The current fortress (or adventurer site)[/*]
- The government of the current fortress[/*]
- The civilization of the current fortress[/*]
- The world[/*]

Modders and power users can also pass game IDs on the commandline to rename other entities like foreign sites or religions.
gui/rename also comes with an overlay for convenience. When generating a new world, you'll get a button for renaming the world before you save it for the first time.

As a side bonus, this tool transparently fixes a DF bug on the embark screen where you are unable to give your starting dwarves nicknames. You'll be able to set nicknames normally now.
More info here: https://docs.dfhack.org/en/stable/docs/tools/gui/rename.html#gui-rename
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Some DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools listed as "unavailable" in the docs do not compile yet and are not accessible at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- fix/stuck-squad: allow squads and messengers returning from missions to rescue squads that have gotten stuck on the world map[/*]
- gui/rename: (reinstated) give new in-game language-based names to anything that can be named (units, governments, fortresses, the world, etc.)[/*]
New Features
- gui/notify: new notification type: save reminder; appears if you have gone more than 15 minutes without saving; click to autosave[/*]
- gui/rename:[list]
- add overlay to worldgen screen allowing you to rename the world before the new world is saved[/*]
- add overlay to the "Prepare carefully" embark screen that transparently fixes a DF bug where you can't give units nicknames or custom professions[/*]
Fixes
- caravan: no longer incorrectly identify wood-based plant items and plant-based soaps as being ethically unsuitable for trading with the elves[/*]
- fix/dry-buckets: don't empty buckets for wells that are actively in use[/*]
- gui/design: don't require an extra right click on the first cancel of building area designations[/*]
- gui/gm-unit: refresh unit sprite when profession is changed[/*]
- gui/unit-info-viewer: skill progress bars now show correct XP thresholds for skills past Legendary+5[/*]
- preserve-rooms:[list]
- don't erroneously release reservations for units that have returned from their missions but have not yet entered the fort map[/*]
- handle case where unit records are culled by DF immediately after a unit leaves the map[/*]
Misc Improvements
- caravan: add filter for written works in display furniture assignment dialog[/*]
- dig-now: handle digging in pool and river tiles[/*]
- fix/wildlife: don't vaporize stuck wildlife that is onscreen -- kill them instead (as if they died from old age)[/*]
- gui/sitemap: show primary group affiliation for visitors and invaders (e.g. civilization name or performance troupe)[/*]
- immortal-cravings: goblins and other naturally non-eating/non-drinking races will now also satisfy their needs for eating and drinking[/*]
- stonesense:[list]
- changed announcements to be right-aligned and limited to only show the most recent 10 announcements[/*]
- init.txt config file is now read from dfhack-configs/stonesense/init.txt[/*]
- creature names are now hidden by default (they can still be shown by pressing n (default keybinding) while stonesense window is active)[/*]
- use smaller increments for zooming in and out[/*]
- OSD is now hidden by default; hit F2 (default keybinding) to show it again[/*]
Documentation
- Added example code for creating plugin RPC endpoints that can be used to extend the DFHack API[/*]
Removed
- dfhack.TranslateName has been renamed to dfhack.translation.translateName[/*]
API
- Persistence :: getUnsavedSeconds: returns the number of seconds since last save or load[/*]
- Translation :: generateName: generates in-game names, mirroring DF's internal logic[/*]
- Units :: getVisibleName: when acting on a unit without an impersonated identity, returns the unit's name structure instead of the associated histfig's name structure[/*]
- Units :: isUnitInBox, Units :: getUnitsInBox: add versions accepting pos arguments[/*]
Internals
- Errors when unloading a plugin's DLL are now checked and reported[/*]
- Plugin command callbacks are now called with the core suspended by default so DF memory is always safe to access without extra steps[/*]
Lua
- dfhack.persistent.getUnsavedSeconds: Lua API for Persistence :: getUnsavedSeconds[/*]
- dfhack.translation.generateName: Lua API for Translation :: generateName[/*]
- dfhack.units.isUnitInBox, dfhack.units.getUnitsInBox: add versions accepting pos arguments[/*]
- widgets.FilteredList: search keys for list items can now be functions that return a string[/*]
Structures
- fixed incorrect vtable address for widget superclass on Linux[/*]
A quick compatibility update for 50.15. No new features beyond the major release just announced yesterday: https://steamcommunity.com/games/2346660/announcements/detail/519699278946371794
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
If you are running the DF Steam-only adventure beta, please download by subscribing to DFHack's adventure-beta branch on Steam.
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Unstick stuck wildlife
Have you noticed that wildlife sometimes gets stuck on the map? This happens most frequently with birds who just seem to freeze in mid-air, but you will also find the occasional giant elephant stuck in a tree (take that, physics!). Stuck wildlife causes issues because they prevent any new wildlife from entering the map, reducing the player's opportunity for FUN.When the wildlife system is working properly, a small group of creatures enters the map, wanders around for a while (or aggressively attacks you if it is an agitated group), and then leaves the map. Once all members of the group have left, have been killed, or have been caught in cages, then a new wave (potentially of a different species/agitation level) can enter the map.
You can run the fix/wildlife script without parameters to immediately remove currently stuck wildlife, or you can enable it in gui/control-panel on the Bug Fixes tab to monitor and manage wildlife in the background. When enabled from the control panel, it will monitor for stuck wildlife and remove wildlife that has been stuck for 7 days.

Unlike most bugfixes, this one is not enabled by default since some players like to keep wildlife around for creative purposes (e.g. for intentionally stalling wildlife waves or for controlled startling of friendly necromancers). These players can selectively ignore the wildlife they want to keep captive before they enable fix/wildlife.

In related news, the force command has gained the ability to spawn new waves of wildlife: force Wildlife will allow a new wave of wildlife to enter the map regardless of how much wildlife is already wandering around.
Have fun : )
Improved lifestyles for immortals
There's no question about it: being immortal is tough! Fort citizens who are immortal (like necromancers or vampires) have no bodily reason to eat or drink. However, they still have personality needs that can only be satisfied by eating or drinking! Despite not needing the nourishment, they can become distracted and unhappy when they go too long without a good meal.If you enable immortal-cravings in the DFHack control panel, your distracted immortals will be allowed to satisfy their needs for food and drink like any other citizen. This will help reduce their stress (and solve what many players consider to be a bug), but beware that it will make vampires harder to detect -- they'll no longer have a telltale unmet need for food displayed on their info sheet!

The sky is no longer the limit
Do you dream of castles in the clouds? Enable infinite-sky in the DFHack control panel and go build one!
When enabled, infinite-sky will automatically create new z-levels of sky as you build taller and taller constructions.

Realistic returns from melting items
DF has an odd quirk (just one?) when calculating how many bars of metal you get when melting an item. Depending on the item type, you sometimes get more bars from melting than you used for manufacturing the item in the first place! If this bothers you, you can enable realistic-melting in the Gameplay tab of the DFHack control panel. It normalizes melting returns to about 95% of forging cost per item, with efficiency reductions if the item is damaged.
Text navigation keys
Thanks to the new custom keybindings added in DF 50.14, DFHack text boxes can now support more advanced cursor navigation keys:- Delete the character at the cursor with the Delete key[/*]
- Move the cursor by one word left or right with Ctrl+Left and Ctrl+Right[/*]
- Move the cursor to the beginning or end of the line with Home and End[/*]

Dreamfort tutorial video series
The popular Dreamfort quickfort blueprint set now has a video walkthrough! After a showcase of the finished fort, I guide you through each step of fort creation, demonstrating and discussing the design choices of Dreamfort along the way.
Start your journey here: https://youtu.be/N3YpK00Z2VE or browse the entire playlist: https://www.youtube.com/playlist?list=PLzXx9JcB9oXxmrtkO1y8ZXzBCFEZrKxve

Of course, the written walkthrough is available in-game and online as well if you would rather read: https://docs.google.com/spreadsheets/d/15TDBebP8rBNvsFbezb9xuKPmGWNzv7j4XZWq1AsfCio/edit?gid=0#gid=0
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Some DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools listed as "unavailable" in the docs do not compile yet and are not accessible at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- fix/wildlife: prevent wildlife from getting stuck when trying to exit the map. This fix needs to be enabled manually in gui/control-panel on the Bug Fixes tab since not all players want this bug to be fixed (you can intentionally stall wildlife incursions by trapping wildlife in an enclosed area so they are not caged but still cannot escape).[/*]
- forceequip: (reinstated) forcibly move items into a unit's inventory[/*]
- immortal-cravings: allow immortals to satisfy their cravings for food and drink[/*]
- infinite-sky: (reinstated, renamed from infiniteSky) automatically create new z-levels of sky to build in[/*]
- justice: pardon a criminal's prison sentence[/*]
New Features
- force: add support for a Wildlife event to allow additional wildlife to enter the map[/*]
- tweak: realistic-melting: change melting return for inorganic armor parts, shields, weapons, trap components and tools to stop smelters from creating metal, bring melt return for adamantine in line with other metals to ~95% of forging cost. wear reduces melt return by 10% per level[/*]
Fixes
- Fix mouse clicks bleeding through resizable DFHack windows when clicking in the space between the frame and the window content[/*]
- autobutcher: don't run a scanning and marking cycle on the first tick of a fortress to allow for all custom configuration to be set first[/*]
- control-panel: fix error when setting numeric preferences from the commandline[/*]
- emigration: save-and-reload no longer resets the emigration cycle timeout[/*]
- exportlegends: ensure historical figure race filter is usable after re-entering legends mode with a different loaded world[/*]
- fix/loyaltycascade: allow the fix to work on non-dwarven citizens[/*]
- geld, ungeld: save-and-reload no longer loses changes done by geld and ungeld for units who are historical figures[/*]
- gui/notify: don't classify (peacefully) visiting night creatures as hostile[/*]
- gui/quickfort:[list]
- only print a help blueprint's text once even if the repeat setting is enabled[/*]
- fix build mode evaluation rules to allow placement of furniture and constructions on tiles with stair shapes or without orthagonal floors[/*]
Misc Improvements
- DFHack now verifies that critical DF data structures have known sizes and refuses to start if there is a mismatch[/*]
- DFHack text edit fields now delete the character at the cursor when you hit the Delete key[/*]
- DFHack text edit fields now move the cursor by one word left or right with Ctrl-Left and Ctrl-Right[/*]
- DFHack text edit fields now move the cursor to the beginning or end of the line with Home and End[/*]
- Quickfort blueprint library:[list]
- aquifer_tap blueprint walkthough rewritten for clarity[/*]
- aquifer_tap blueprint now designated at priority 3 and marks the stairway tile below the tap in "blueprint" mode to prevent drips while the drainage pipe is being prepared[/*]
Documentation
- Dreamfort: add link to Dreamfort tutorial youtube series: https://www.youtube.com/playlist?list=PLzXx9JcB9oXxmrtkO1y8ZXzBCFEZrKxve [/*]
- The error message that comes up if there is a version mismatch between DF and DFHack now informs you which DF versions are supported by the installed version of DFHack[/*]
Removed
- UI focus strings for squad panel flows combined into a single tree: dwarfmode/SquadEquipment -> dwarfmode/Squads/Equipment, dwarfmode/SquadSchedule -> dwarfmode/Squads/Schedule[/*]
- faststart: removed since the vanilla startup sequence is now sufficiently fast[/*]
- modtools/force: merged into force[/*]
API
- DFHack :: Units: new function setPathGoal[/*]
- Units :: setAutomaticProfessions: bay12-provided entry point to assign labors based on work details[/*]
Lua
- dfhack.units: new function setPathGoal[/*]
- widgets.TabBar: updated to allow for horizontal scrolling of tabs when there are too many to fit in the available space[/*]
Structures
- added unitst_set_automatic_professions entry point export to list of known globals[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
Fixes
- autobutcher: fix regression in ordering of butcherable animals[/*]
- preserve-rooms: don't reserve a room for citizens that you expel from the fort[/*]
On Steam, this release is available on the DFHack default "None" channel (for DF 50.13), the adventure-beta channel (for DF 51.01-beta), and the 50.14testing channel (for DF 50.14-beta).
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Idle crafting
Dwarves will now have to option to go craft something when they have the need. The only thing you have to do is designate a Craftsdwarf's workshop as a place where dwarves can elect to go to do their crafting.At the bottom of the "Workers" tab, you'll now see an option for "Allow idle dwarves to satisfy crafting needs". The option will only be toggleable if the workshop is not already assigned to a master. If you set this option to "yes", then you'll see crafting jobs start to appear as your idle dwarves figure it's time to go craft something. Feel free to trade those crafts away to the next caravan!
Although you can designate any Craftsdwarf's workshop as an idle crafting designation, this feature works best if you build a separate Craftsdwarf's workshop (or two) specifically for idle crafting. If you set the number of "General work orders allowed" to zero on the "Work orders" tab for the workshop then the workshop is kept free for dwarves to use in their down time.
If you have the "Permitted General Work Order Labors" customized for the workshop, the kinds of crafting jobs that dwarves will do there will respect the setting. Note that you must have at least one of Stonecrafting or Bone Carving enabled for the workshop to be used for idle crafting. You can also link the workshop to a stockpile to control which materials will be used for the crafts.

Room reservations
This is actually two features in one: a bugfix and a quality of life tool. The bugfix part takes effect automatically when a unit leaves the map. The most common situation is a squad going out on a raid. You may have noticed that when a unit leaves the map, they lose ownership of all their rooms. If you have carefully assigned specific bedrooms to your squad members, you'll be annoyed to see the rooms snagged by some random dwarf while your squad is away. This is even more impactful if you have nobility or administrators in the squad: their room requirements will be suddenly unmet.Now, when your units leave the map, their room will be reserved in their names for when they get back. The room's zone will be disabled, and you'll see a message when you click on the zone telling you who the room is reserved for. You have the option of cancelling the reservation and making the room available for general use, if you want to. The reservation is automatically canceled if the owner is killed while away on their raid.
The second part of this feature is the ability to reserve rooms for specific noble or administrative roles. You can make a fine office and pre-reserve it for when a baron is appointed. The office will be disabled until a baron appears, and when the role becomes filled, the room will be automatically assigned to the role holder. You can even prepare for the situation where you have [u]many[/u] barons. If you reserve 10 fine offices for the baron role, one office will be assigned to each of your 10 barons as they appear.
This is also very useful for administrative roles like managers. If you switch managers frequently, it can be a hassle to reassign the office each time. When you reserve the room for the manager role, the room will be automatically reassigned when a new citizen is appointed to the role.

Ethics violation warning
It is now much harder to accidentally offend the elves. To be clear, you can still offend them if you [u]want[/u] to. It's just harder to do it unintentionally.Elves will refuse to trade for any item that could have come from harming an animal or a tree. They'll then refuse any further trades and leave the map in a huff. It is not always easy to figure out which items will trigger their ire. If a stone craft has a wooden decoration, they'll notice. If you sell innocent sand in an animal leather bag, they'll notice. If your artifact warhammer menaces with spikes of yak bone, they'll definitely notice.
If you [u]do[/u] select any of those items in the bartering menu (that is, when you are actually specifying which fort items to trade for which merchant items), you'll see an "Ethics warning" badge next to the Trade button. Clicking on this badge will list the offending items, and it will give you an option to deselect them. If you click the Trade button anyway, you'll get one final confirmation to make absolutely sure you know what you're doing.
Give it a try! Remember, happy elves bring [u]friendly[/u] giant animals instead of hostile ones! : )
For elves, the check is for animal and tree ethics, but this feature also works on modded races that have any other combination of ethical requirements.

Matchmaking interface
By popular request by matchmaking role players, we now have an interface for assigning (or reassigning) spouses and lovers: gui/family-affairs. You can also initiate pregnancies with the partners of your choice, regardless of existing relationships. Go forth and meddle!You can open the tool with the pregnancy tab pre-selected by invoking it as gui/pregnancy.

Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- embark-anyone: allows you to embark as any civilization, including dead and non-dwarven civs[/*]
- gui/family-affairs: (reinstated) inspect or meddle with pregnancies, marriages, or lover relationships[/*]
- idle-crafting: allow dwarves to independently satisfy their need to craft objects[/*]
- notes: attach notes to locations on a fort map[/*]
- preserve-rooms: manage room assignments for off-map units and noble roles. reserves rooms owned by traveling units and reinstates their ownership when they return to the site. also allows you to assign rooms to noble/administrator roles, and the rooms will be automatically assigned whenever the holder of the role changes[/*]
New Features
- caravan:[list]
- DFHack dialogs for trade screens (both Bring goods to depot and the Trade barter screen) can now filter by item origins (foreign vs. fort-made) and can filter bins by whether they have a mix of ethically acceptable and unacceptable items in them[/*]
- If you have managed to select an item that is ethically unacceptable to the merchant, an "Ethics warning" badge will now appear next to the "Trade" button. Clicking on the badge will show you which items that you have selected are problematic. The dialog has a button that you can click to deselect the problematic items in the trade list.[/*]
Fixes
- DFHack screens that allow keyboard cursor and camera movement while focused now also allow diagonal and Z-change keyboard cursor keys[/*]
- DFHack state for a site is now properly saved when retiring a fort[/*]
- prevent hang when buildings in zones are destroyed in the case where the buildings were not added to the zone in the same order that they were created (uncommon)[/*]
- System clipboard: when pasting single lines from the system clipboard, replace newlines with spaces so they don't show up as strange CP437 glyphs in-game[/*]
- buildingplan:[list]
- improved performance in forts with large numbers of items[/*]
- fixed processing errors when using quick material filter slot '0'[/*]
Misc Improvements
- Dreamfort:[list]
- integrate with preserve-rooms to assign relevant rooms to nobles/adimistrators[/*]
- smooth tiles under statues and other large furniture that you can't easily smooth later[/*]
Documentation
- add documentation for dfhack.items.findType(string) and dfhack.items.findSubtype(string)[/*]
- gui/embark-anywhere: add information about how the game determines world tile pathability and instructions for bridging two landmasses[/*]
- modding-guide:[list]
- added examples for reading and writing various types of persistent storage[/*]
- updated all code snippets for greater clarity[/*]
Removed
- quickfortress.csv: remove old sample blueprints for "The Quick Fortress", which were unmaintained and non-functional in DF v50+. Online blueprints are available at https://docs.google.com/spreadsheets/d/1WuLYZBM6S2nt-XsPS30kpDnngpOQCuIdlw4zjrcITdY if anyone is interested in giving these blueprints some love[/*]
API
- DFHack :: cuboid: cuboid :: clampMap now returns the cuboid itself (instead of boolean) to allow method chaining; call cuboid :: isValid to determine success[/*]
- Items :: createItem: removed growth_print parameter; now determined automatically[/*]
- Units: new isWildlife and isAgitated property checks[/*]
Lua
- Overlay widgets can now assume their active and visible functions will only execute in a context that matches their viewscreens associations[/*]
- dfhack.items.createItem: removed growth_print parameter to match C++ API[/*]
- dfhack.units.isDanger: no longer unconditionally returns true for intelligent undead[/*]
- dfhack.units: isWildlife and isAgitated property checks[/*]
- gui.simulateInput: do not generate spurious keycode from _STRING key inputs[/*]
This beta release is available on the DFHack "beta" channel (for DF 50.13), the "adventure-beta" channel (for DF 51.01-beta), and the "50.14testing" channel (for DF 50.14-beta).
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Idle crafting
Dwarves will now have to option to go craft something when they have the need. The only thing you have to do is designate a Craftsdwarf's workshop as a place where dwarves can elect to go to do their crafting.At the bottom of the "Workers" tab, you'll now see an option for "Allow idle dwarves to satisfy crafting needs". The option will only be toggleable if the workshop is not assigned to a master. If you set this option to "yes", then you'll see crafting jobs start to appear as your idle dwarves figure it's time to go craft something. Feel free to trade those crafts away to the next caravan.
This feature works best if you build a separate Craftsdwarf's workshop (or two) specifically for idle crafting, and you set the number of "General work orders allowed" to zero on the "Work orders" tab for the workshop. That way, the workshop is kept free for dwarves to use in their down time.
If you have the "Permitted General Work Order Labors" customized for the workshop, the kinds of crafting jobs that dwarves will do there will respect the setting. Note that you must have at least one of Stonecrafting or Bone Carving enabled for the workshop to be used for idle crafting.

Room reservations
This is actually two things in one: a bugfix and a quality of life tool. The bugfix part takes effect automatically when a unit leaves the map. The most common situation is a squad going out on a raid. You may have noticed that when a unit leaves the map, they lose ownership of all their rooms. If you have carefully assigned specific bedrooms to your squad members, you'll be annoyed to see the rooms snagged by some random dwarf while your squad is away. This is even more impactful if you have nobility or administrators in the squad: their room requirements will be suddenly unmet.Now, when your units leave the map, their room will be reserved in their name for when they get back. The room's zone will be disabled, and you'll see a message when you click on the zone telling you who the room is reserved for. You have the option of cancelling the reservation and making the room available for general use, if you want to.
The second part of this feature is the ability to reserve rooms for specific noble or administrative roles. You can make a fine office and pre-reserve it for when a baron is appointed. The office will be disabled until a baron appears, and when someone is appointed to that role, the room will be automatically assigned to them. You can even prepare for the situation where you have [u]many[/u] barons. If you prepare and reserve 10 offices for the baron role, one office will be assigned to up to 10 barons when they appear.
This is also very useful for administrative roles like managers. If you switch managers frequently, it can be a hassle to reassign the office each time. When you reserve the room for the manager role, the room will be automatically reassigned when a new citizen is appointed to the role.

Ethics violation warning
It is now much harder to accidentally offend the elves. To be clear, you can still offend them if you [u]want[/u] to. It's just harder to do it unintentionally.When you select items for trade in the bartering menu (when you are actually specifying which fort items to trade for which merchant items) and have an item selected that will cause the elves to declare you a heathen, you'll see an "Ethics warning" badge next to the Trade button. Clicking on this badge will list the offending items, and it will give you an option to deselect them. If you click the Trade button anyway, you'll get one final confirmation to make absolutely sure you know what you're doing.
Give it a try! Remember, happy elves bring [u]friendly[/u] giant animals instead of hostile ones! : )

Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- embark-anyone: allows you to embark as any civilization, including dead and non-dwarven civs[/*]
- gui/family-affairs: (reinstated) inspect or meddle with pregnancies, marriages, or lover relationships[/*]
- idle-crafting: allow dwarves to independently satisfy their need to craft objects[/*]
- notes: manage map-specific notes[/*]
- preserve-rooms: manage room assignments for off-map units and noble roles. reserves rooms owned by traveling units and reinstates their ownership when they return to the site. also allows you to assign rooms to noble/administrator roles, and the rooms will be automatically assigned whenever the holder of the role changes[/*]
New Features
- caravan:[list]
- DFHack dialogs for trade screens (both Bring goods to depot and the Trade barter screen) can now filter by item origins (foreign vs. fort-made) and can filter bins by whether they have a mix of ethically acceptable and unacceptable items in them[/*]
- If you have managed to select an item that is ethically unacceptable to the merchant, an "Ethics warning" badge will now appear next to the "Trade" button. Clicking on the badge will show you which items that you have selected are problematic. The dialog has a button that you can click to deselect the problematic items in the trade list.[/*]
Fixes
- DFHack screens that allow keyboard cursor and camera movement while focused now also allow diagonal and Z-change keyboard cursor keys[/*]
- DFHack state for a site is now properly saved when retiring a fort[/*]
- prevent hang when buildings in zones are destroyed in the case where the buildings were not added to the zone in the same order that they were created (uncommon)[/*]
- System clipboard: when pasting single lines from the system clipboard, replace newlines with spaces so they don't show up as strange CP437 glyphs in-game[/*]
- buildingplan:[list]
- improved performance in forts with large numbers of items[/*]
- fixed processing errors when using quick material filter slot '0'[/*]
Misc Improvements
- Dreamfort:[list]
- integrate with preserve-rooms to assign relevant rooms to nobles/adimistrators[/*]
- smooth tiles under statues and other large furniture that you can't easily smooth later[/*]
Documentation
- add documentation for dfhack.items.findType(string) and dfhack.items.findSubtype(string)[/*]
- gui/embark-anywhere: add information about how the game determines world tile pathability and instructions for bridging two landmasses[/*]
Removed
- quickfortress.csv: remove old sample blueprints for "The Quick Fortress", which were unmaintained and non-functional in DF v50+. Online blueprints are available at https://docs.google.com/spreadsheets/d/1WuLYZBM6S2nt-XsPS30kpDnngpOQCuIdlw4zjrcITdY if anyone is interested in giving these blueprints some love[/*]
API
- DFHack :: cuboid: cuboid :: clampMap now returns the cuboid itself (instead of boolean) to allow method chaining; call cuboid :: isValid to determine success[/*]
- Items :: createItem: removed growth_print parameter; now determined automatically[/*]
- Units: new isWildlife and isAgitated property checks[/*]
Lua
- Overlay widgets can now assume their active and visible functions will only execute in a context that matches their viewscreens associations[/*]
- dfhack.items.createItem: removed growth_print parameter to match C++ API[/*]
- dfhack.units.isDanger: no longer unconditionally returns true for intelligent undead[/*]
- dfhack.units: isWildlife and isAgitated property checks[/*]
- gui.simulateInput: do not generate spurious keycode from _STRING key inputs[/*]
If you are subscribed to the DF adventure beta (the DF "beta" branch), please subscribe to the DFHack "adventure-beta" branch for a compatible build.
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Table of contents in gui/journal
Community contributor psychowico has continued to deliver improvements to gui/journal. It now supports markdown syntax for section headers, and it will automatically build a hyperlinked table of contents as you add the headers.
To add a header, start a line with "# ", e.g. "# Fortress goals". You can add level 2 subheadings with "## ", and so on.
Due to the tool's popularity, there is now a global hotkey (in fort mode) for launching gui/journal: Ctrl-j
timestream bugfixes and improvements
The FPS fixer timestream has been significantly refined for better behavior at the highest FPS improvement levels. For example, jobs were not being generated quickly enough for the accelerated calendar rate. Also, some non-skill-based jobs, like eating and drinking, were taking too long to complete. With the updates, dwarves will no longer be left jobless or get stuck in the booze stockpile with seemingly unquenchable thirst.Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Features
- gui/journal:[list]
- new hotkey, accessible from anywhere in fort mode: Ctrl-j[/*]
- new automatic table of contents. add lines that start with "# ", like "# Entry for 502-04-02", to add hyperlinked headers to the table of contents[/*]
Fixes
- Copy/Paste: Fix handling of multi-line text when interacting with the system clipboard on Windows[/*]
- add-spatter: fix a crash related to unloading a savegame with add-spatter reactions, then loading a second savegame with add-spatter reactions[/*]
- autodump: cancel any jobs that point to dumped items[/*]
- build-now: fix error when building buildings that (in previous DF versions) required the architecture labor[/*]
- changelayer: fix incorrect lookup of geological region in multi-region embarks[/*]
- fix/dead-units: fix error when removing dead units from burrows and the unit with the greatest ID was dead[/*]
- full-heal: fix -r --all_citizens option combination not resurrecting citizens[/*]
- gui/autodump:[list]
- prevent dumping into walls or invalid map areas[/*]
- properly turn items into projectiles when they are teleported into mid-air[/*]
Misc Improvements
- performance improvements for DFHack tools and infrastructure[/*]
- allneeds: display distribution of needs by how severely they are affecting the dwarf[/*]
- autodump: allow dumping items into mid-air, converting them into projectiles like gui/autodump does[/*]
- build-now: if suspendmanager is running, run an unsuspend cycle immediately before scanning for buildings to build[/*]
- gui/pathable: give edge tiles where wagons can enter the map a special highlight to make them more identifiable. this is especially useful when the game decides that only a portion of the map edge is usable by wagons.[/*]
- list-waves:[list]
- now outputs the names of the dwarves in each migration wave[/*]
- can now display information about specific migration waves (e.g. list-waves 0 to identify your starting 7 dwarves)[/*]
Documentation
- improved docs for dfhack.units module functions[/*]
Removed
- The PRELOAD_LIB environment variable has been renamed to DF_PRELOAD to match the naming scheme of other environment variables used by the dfhack startup script. If you are preloading libraries (e.g. for performance testing) please define DF_PRELOAD instead of PRELOAD_LIB or LD_PRELOAD[/*]
- cuboid :: clamp(bool block): renamed to cuboid :: clampMap(bool block), name taken by cuboid :: clamp(cuboid other)[/*]
- Units :: getPhysicalDescription: function requires DF call point that is no longer available. alternative is to navigate the unit info sheet and extract the description from the UI (see markdown)[/*]
- Units :: MAX_COLORS, Units :: findIndexById, Units :: getNumUnits, Units :: getUnit: replaced by DFHack :: COLOR_MAX and the generated type-specific get_vector functions[/*]
API
- cuboid:[list]
- construct from df :: map_block*, forBlock iterator to access map blocks in cuboid[/*]
- clamp(cuboid other), clampNew(cuboid other) for cuboid intersection. clampNew returns new cuboid instead of modifying.[/*]
Lua
- dfhack.items.moveToInventory: make use_mode and body_part args optional[/*]
- dfhack.units:[list]
- allow historical figures to be passed instead of units for getReadableName, getVisibleName, and getProfessionName[/*]
- add getRaceReadableName, getRaceReadableNameById, getRaceNamePluralById[/*]
Structures
- world_site: rename is_mountain_halls and is_fortress to Bay12 names min_depth and max_depth[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Designating digging and constructions with shapes
Our digging layout tool, gui/design has had a major usability overhaul.
There is a new, button-oriented interface for selecting modes and shapes, and the overall experience of designating, stretching, rotating, moving, and applying to the map is much easier than it was before.
Have fun with those curves!

Keep notes in-game with the new fort journal

Brought to you by community member psychowico, gui/journal is a multi-line text editor that allows you to take notes on your fort's goals, plans, and progress. The text is saved with your fort, and the editor provides many mouse- and keyboard-friendly text editing conveniences, like cursor movement, text selection, and copy/paste (fully integrated with the system clipboard).
It is especially useful for jotting down what you're in the middle of doing so you can remind yourself when you load the game later.

Fix FPS death with timestream

timestream has a simple premise: when the FPS drops, speed up reality to compensate. It dynamically adjusts the calendar so that the flow of time [u]scales[/u] to match a target FPS (usually 100). Put simply, it makes the game move as quickly as it did when you first embarked, even when you have hundreds of units on the map.
With timestream active, you can keep the game running at full speed as long as the vanilla FPS counter stays above 15 FPS. At that point, the game will still run faster than it would otherwise, but you'll start noticing the slowdown.
This tool breathes new life into old forts. If you start to feel frustrated that the game is getting sluggish, give timestream a try. It's on the "Gameplay" tab of gui/control-panel.
Interactive map editing
You may have heard of tiletypes as the command to use for editing the map. It has a reputation for being difficult to understand, and startlingly easy to get wrong. Thanks to community member tatoyoda600's efforts, we now have gui/tiletypes, which turns map editing into simple point and click!
You can now easily fill in gaps in accidentally-dug areas, change tiles to the materials of your choice for decoration, or reshape the terrain to your liking!

Control the rate of immigration
A common complaint is that very large migrant waves can overwhelm fort infrastructure. If you enable the pop-control tool in gui/control-panel (Gameplay tab), you can limit migration waves to a reasonable size. The default is 10, but you can adjust it to any number you feel comfortable with.
Note that this tool will overwrite the population caps set in the vanilla settings, so if you have those numbers customized, be sure to update the setting for pop-control itself. For example, if you want a maximum population of 100 (along with the default per-wave maximum of 10 immigrants), run
pop-control set max-pop 100
after you enable pop-control.
Quick find and zoom for people, locations, and artifacts
The new gui/sitemap tool helps you find and zoom to things quickly.
It works in both adventure and fort mode. In adventure mode, its primary use is to find what you're looking for when you get to a site. If you have a quest to talk to a specific person or find a specific artifact, it can be very frustrating to arrive at the correct site but then be completely unable to find what you're looking for on the map. It doesn't help that nobody at the site can give you directions! gui/sitemap will list all the people, places, and things of interest and let you zoom the screen to their location with a click. You'll still have to find your way over there, though, which can be a challenge if it's deep underground.
In fort mode, it serves as a faster alternative to the vanilla overview screens. It also has the unique benefit of telling you both the Dwarven and the English names of artifacts. Now, when you get a notification that Thunderbanner has been stolen, you can search for the artifact in gui/sitemap and see that it's actually warning you about Amudzulban. Then you can zoom to its current location and search some pockets.

Trade depot pathability visualization for wagons

Veteran players may remember a feature from Dwarf Fortress in its pre-Steam times: the ability to show where caravan wagons can path on their way to your trade depot. This feature was not brought forward to DF v50, so DFHack offers a replacement. If you are concerned about whether wagons can get to your depot, or if you'd like to identify the choke points, start up gui/pathable and select the "Depot" tab. That will highlight the tiles that wagons can traverse on their way to your trade depot (or any of your trade depots, if you have more than one).
Announcements
What does DFHack do for Adventure mode?
DFHack supports the DF adventure mode beta on its own adventure-beta Steam branch. If you're subscribed to the beta branch for Dwarf Fortress, please subscribe to the adventure-beta branch for DFHack.DFHack automatically applies a number of bugfixes and interface enhancements by default, such as:
- fix corrupt throwing/shooting state, preventing save/load crashes after shooting a weapon[/*]
- extend the searchable keywords in the conversation topic list to make it easier to find the topic you're looking for[/*]
- add "ask whereabouts of" conversation topics so you can discover the location of people with whom you have some sort of relationship (before, you could only ask whereabouts of people involved in rumors)[/*]
- add drowning/suffocation and blood loss countdown displays so you can tell how dire your situation is[/*]
- advtools party: promotes one of your companions to become a controllable adventurer[/*]
- advtools pets: fixes issues with companions' pets and pets you gift to others in adventure mode[/*]
- fix/sleepers: fix sleeping units belonging to a camp that never wake up[/*]
- gui/sitemap: list and zoom to people, locations, and artifacts[/*]
- unretire-anyone: start an adventure as any historical figure in the world (use on embark preparation screen)[/*]
- gui/reveal: reveal the adventure mode map and keep it revealed as you move[/*]
- bodyswap: move adventurer control to another unit (any other unit)[/*]
- flashstep: jump your adventurer across the map by hovering over a tile with the mouse and hitting a hotkey (Ctrl-t)[/*]
- ghostly: allow your adventurer to walk through walls[/*]
- resurrect-adv: revive a newly dead adventurer[/*]
- reveal-adv-map: reveal hidden sites on the adventure travel map[/*]
DFHack is continuing to build support for the new adventure mode, so you can expect even more in upcoming releases!
Locale-sensitive number formatting
DFHack tools can display a lot of large numbers, especially where prices and weights are involved. We have traditionally formatted those numbers exactly the same as DF itself does -- that is, no formatting; just numbers. For example, one million is written as 1000000.This can be hard to read, but it's also not perfectly clear how else the numbers should be formatted. In English, we often add commas to numbers, one comma every third digit, so one million would be written as 1,000,000. That would make it easier to read if English is your native language. People from India might prefer to see one million as 10,00,000, and people from Germany might prefer 1.000.000.
So now you have a choice. In gui/control-panel, in the Preferences tab, there is now a Large number formatting preference that you can set.

You have several options:
- None (the default), which formats the numbers without embellishment like vanilla DF does (e.g. 1234567)[/*]
- English, which formats the numbers with commas every third digit (e.g. 1,234,567)[/*]
- System locale, which formats the numbers according to the locale settings for your operating system (system-dependent)[/*]
- SI suffix, which shows up to three significant digits and a metric-system suffix (e.g. 1.23M)[/*]
- Scientific, which shows numbers in scientific notation (e.g. 1.2e+06)[/*]

Dreamfort updates
The Dreamfort quickfort blueprints have seen significant updates in this release. If you are in the middle of building from the Dreamfort blueprints, expect some minor errors or misplaced furniture if you started building from the Dreamfort blueprints in a previous DFHack version.Starting from a new embark, of course, will work perfectly fine.
If you're not already familiar with it, Dreamfort is DFHack's marquee blueprint set for a complete fort layout. It demonstrates good design patterns for new players and shows what the game is capable of. For more experienced players, it provides a simple, yet complete fortress that you can quickly get up and running when you want to focus on specific aspects of the game and not worry too much about infrastructure.

Screenshots are available here: https://docs.dfhack.org/en/latest/docs/guides/quickfort-library-guide.html#dreamfort
and the walkthrough is available via the blueprint notes (which you can display with gui/quickfort) or online here: https://docs.google.com/spreadsheets/d/15TDBebP8rBNvsFbezb9xuKPmGWNzv7j4XZWq1AsfCio/edit?gid=0#gid=0
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- advtools:[list]
- collection of useful commands and overlays for adventure mode[/*]
- added an overlay that automatically fixes corrupt throwing/shooting state, preventing save/load crashes[/*]
- advtools party - promotes one of your companions to become a controllable adventurer[/*]
- advtools pets - fixes pets you gift in adventure mode.[/*]
New Features
- Locale-senstive number formatting: select your preferred format in gui/control-panel. prices and other large numbers in DFHack UIs can be displayed with commas (English formatting), the number formatting used by your system locale, in SI units (e.g. 12.3k), or even in scientific notation[/*]
- advtools: automatically add a conversation option to "ask whereabouts of" for all your relationships (before, you could only ask whereabouts of people involved in rumors)[/*]
- buildingplan: dimension tooltip is now displayed for constructions and buildings that are designated over an area, like bridges and farm plots[/*]
- gui/design: all-new visually-driven UI for much improved usability[/*]
- gui/notify:[list]
- new notification type: injured citizens; click to zoom to injured units; also displays a warning if your hospital is not functional (or if you have no hospital)[/*]
- new notification type: drowning and suffocation progress bars for adventure mode[/*]
Fixes
- Mortal mode: prevent keybindings that run armok tools from being recognized when in mortal mode[/*]
- assign-profile: fix handling of unit option for setting target unit id[/*]
- autobutcher: fix inverted ranking of which animals to butcher first[/*]
- buildingplan: properly identify appropriate construction items for modded buildings built from thread[/*]
- caravan: fix errors in trade dialog if all fort items are traded away while the trade dialog is showing fort items and the confirm trade confirmation is shown[/*]
- clear-smoke: properly tag smoke flows for garbage collection to avoid memory leak[/*]
- confirm: fix confirmation prompt behavior when overwriting a hotkey zoom location[/*]
- control-panel: restore non-default values of per-save enabled/disabled settings for repeat-based commands[/*]
- dig: don't leave phantom dig designations behind when autodigging warm/damp designated tiles[/*]
- gui/create-item: allow creation of adamantine thread, wool, and yarn[/*]
- gui/gm-unit:[list]
- correctly display skill levels above Legendary+5[/*]
- fix errors when editing/randomizing colors and body appearance[/*]
Misc Improvements
- Dreamfort:[list]
- add a full complement of beds and chests to both barracks[/*]
- redesign guildhall/temple/library level for better accessibility[/*]
- walkthough documentation refresh[/*]
- add milking/shearing station in surface grazing pasture[/*]
- integrate building prioritization into the blueprints and remove prioritize checklist steps[/*]
- add plumbing template for filling cisterns with running water[/*]
Documentation
- Developer's primer for DFHack's type identity system[/*]
- installing: add instructions for how to use Steam DFHack with non-Steam DF (e.g. to benefit from DFHack auto-updates and cloud backups)[/*]
- modding-guide: add a section on persistent storage, both for global settings and world-specific settings[/*]
Removed
- adv-fix-sleepers: renamed to fix/sleepers[/*]
- adv-rumors: merged into advtools[/*]
- devel/find-offsets, devel/find-twbt, devel/prepare-save: remove development scripts that are no longer useful[/*]
- fix/item-occupancy, fix/tile-occupancy: merged into fix/occupancy[/*]
- max-wave: merged into pop-control[/*]
- plants: renamed to plant[/*]
- dfhack.HIDE_CONSOLE_ON_STARTUP and dfhack.HIDE_ARMOK_TOOLS are no longer directly accessible. Please use control-panel or gui/control-panel to interact wtih those settings.[/*]
- gui.FramedScreen: this class is now deprecated; please use gui.ZScreen and widgets.Window instead[/*]
API
- Focus strings have moved for stockpile states: dwarfmode/CustomStockpile is now dwarfmode/Stockpile/Some/Customize and similar for dwarfmode/StockpileTools and dwarfmode/StockpileLink[/*]
- Buildings :: getName: get a building's name[/*]
- format_number: format numbers according to the configured player formatting preference[/*]
- Items :: remove: now cancels related jobs and marks the item as hidden and forbidden until it can be garbage collected[/*]
- Maps :: isTileAquifer, Maps :: isTileHeavyAquifer, Maps :: setTileAquifer, Maps :: removeTileAquifer, Maps :: setAreaAquifer, Maps :: removeAreaAquifer: new aquifer detection and modification API[/*]
- Units :: create, Units :: makeown: new APIs to use bay12-provided entry points for low-level operations[/*]
Lua
- dfhack.formatInt, dfhack.formatFloat: formats numbers according to the player preferences for number formatting set in gui/control-panel[/*]
- dfhack.gui.getSelectedJob: can now return the job with a destination under the keyboard cursor (e.g. digging/carving/engraving jobs)[/*]
- dfhack.internal.getClipboardTextCp437Multiline: for retrieving multiline text from the system clipboard[/*]
- dfhack.maps.isTileAquifer, dfhack.maps.isTileHeavyAquifer, dfhack.maps.setTileAquifer, dfhack.maps.removeTileAquifer: access to new aquifer API[/*]
- dfhack.units.create, dfhack.units.makeown: Lua access to new module API[/*]
- dialogs.showYesNoPrompt: extend options so the standard dialog can be used for gui/confirm-style confirmation prompts[/*]
- gui.get_interface_rect, gui.get_interface_frame: convenience functions for working with scaled interfaces[/*]
- overlay: new attributes: fullscreen and full_interface for overlays that need access to the entire screen or the scaled interface area, respectively[/*]
- plugins.tiletypes.tiletypes_setTile: can now accept a table for access to previously unavailable options[/*]
- safe_index: will now return nil when attempting to index into a non-indexable object[/*]
- script-manager: add getModSourcePath and getModStatePath so modders can get the directory path to their own files[/*]
- string : wrap: now preserves inter-word spacing and can return the wrapped lines as a table of strings instead of a single multi-line string[/*]
- widgets.ButtonGroup: subclass of CycleHotkeyLabel that additionally displays clickable graphical buttons[/*]
- widgets.CycleHotkeyLabel: when the widget has both forward and backward hotkeys defined, support moving backwards by clicking on the appropriate hotkey hint[/*]
- widgets.DimensionsTooltip: reusable selected dimensions tooltip that follows the mouse cursor around[/*]
- widgets.FilteredList: don't restrict the player from inputting multiple successive space characters[/*]
- widgets.makeButtonLabelText: create text and graphical buttons from character/color/tile maps and/or dynamically loaded tilesets[/*]
Structures
- added several bay12 exported entry points to list of known globals[/*]
- canonicalized a wide swath of type names, field names, and structure organization to match DF's internal names and organization. fields that already had useful names were largely left alone, but all unk, anon, and other "placeholder" names have been changed. structures that differed from reality were also corrected (e.g. collections of fields that were actually substructures and vice versa).[/*]
- job.item_category is now job.specflag, contains a union of flag fields, and depends on the job type[/*]
- plant_flags: rename is_burning, is_drowning, is_dead to Bay12 names unused_01, season_dead, dead[/*]
- slab_engraving_type: correct order of items (last two were swapped)[/*]
- unitst: correct return type of create_nemesis vmethod[/*]
- world_data: identify many fields and substructures[/*]
This beta release is available on the beta channel (for DF 50.13) and the adventure-beta channel (for DF 51.01-beta).
This beta release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
In addition to the features introduced in DFHack 50.13-r3rc1 , there are some new highlights for this beta release:Fix FPS death with timestream

timestream has a simple premise: when the FPS drops, speed up the world to compensate. It dynamically adjusts the calendar so that time flows at a rate that makes you [u]feel[/u] like you're playing at a much higher FPS. It makes the game much more responsive and snappy, even when you have hundreds of units on the map.
With timestream active, you can keep the game running at full speed as long as the vanilla FPS counter stays above 15 FPS. At that point, you'll hit other limitations and you'll start noticing the slowdown.
Trade depot pathability visualization for wagons

Veteran players may remember a feature from Dwarf Fortress in its pre-Steam times: the ability to show where caravan wagons can path on their way to your trade depot. This feature was not brought forward to DF v50, so DFHack offers a replacement. If you are concerned about whether wagons can get to your depot, or if you'd like to identify the choke points, start up gui/pathable and select the "Depot" tab. That will highlight the tiles that wagons can traverse on their way to your trade depot (or any of your trade depots, if you have more than one).
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
This changelog has been trimmed to only show the difference from the previous beta.New Tools
- devel/luacov: (reinstated) add Lua script coverage reporting for use in testing and performance analysis[/*]
- fix/sleepers: (reinstated) fixes sleeping units belonging to a camp that never wake up.[/*]
- timestream: (reinstated) keep the game running quickly even when there are large numbers of units on the map[/*]
New Features
- Locale-senstive number formatting: select your preferred format in gui/control-panel. prices and other large numbers in DFHack UIs can be displayed with commas (English formatting), the number formatting used by your system locale, in SI units (e.g. 12.3k), or even in scientific notation[/*]
- gui/pathable: new "Depot" mode that shows whether wagons can path to your trade depot[/*]
Fixes
- clear-smoke: properly tag smoke flows for garbage collection to avoid memory leak[/*]
- overlay: overlay positions are now adjusted according to the configured max interface width percentage in the DF settings[/*]
- zone: animal assignment overlay button moved to not conflict with vanilla aquarium/terrarium button on glass cages[/*]
Misc Improvements
- empty-bin: select a stockpile, tile, or building to empty all containers in the stockpile, tile, or building[/*]
- exterminate:[list]
- add --limit option to limit number of exterminated creatures[/*]
- add knockout and traumatize method for non-lethal incapacitation[/*]
Removed
- adv-fix-sleepers: renamed to fix/sleepers[/*]
Lua
- gui.get_interface_rect, gui.get_interface_frame: convenience functions for working with scaled interfaces[/*]
- overlay: new attributes: fullscreen and full_interface for overlays that need access to the entire screen or the scaled interface area, respectively[/*]
- string : wrap: now preserves inter-word spacing and can return the wrapped lines as a table of strings instead of a single multi-line string[/*]
This beta release is available on the beta channel (for DF 50.13) and the adventure-beta channel (for DF 51.01-beta).
This beta release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Designating digging and constructions with shapes
Our digging design tool, gui/design has had a major usability overhaul.
There are now icons for selecting modes and shapes, and the overall experience of designating shapes, stretching, rotating, and moving them, and finally applying them to the map is much easier than it was before.
Have fun with those curves!

Interactive map editing
You may have heard of tiletypes as the command to use for editing the map. It has a reputation for being difficult to understand, and startlingly easy to get wrong. Thanks to community member tatoyoda600's efforts, we now have gui/tiletypes, which turns map editing into simple point and click!
You can now easily fill in gaps in accidentally-dug areas, spawn tiles of the material of your choice for digging, or reshape the surface terrain to your liking!

Quick find and zoom for people, locations, and artifacts
The new gui/sitemap tool helps you find and zoom to things quickly.
It works in both adventure and fort mode. In adventure mode, its primary use is to find what you're looking for when you get to a site. If you have a quest to talk to a specific person or find a specific artifact, it can be very frustrating to arrive at the correct site but then be completely unable to find what you're looking for on the map. It doesn't help that nobody at the site can give you directions! gui/sitemap will list all the people, places, and things of interest and let you zoom the screen to their location with a click. You'll still have to find your way over there, though, which can be a challenge if it's deep underground.
In fort mode, it serves as a faster alternative to the vanilla overview screens. It also has the unique benefit of telling you both the Dwarven and the English names of artifacts. Now, when you get a notification that Thunderbanner has been stolen, you can search for the artifact in gui/sitemap and see that it's actually warning you about Amudzulban. Then you can zoom to its current location and search some pockets.

Controlling rate of immigration
A common complaint is that very large migrant waves can overwhelm fort infrastructure. If you enable the pop-control tool in gui/control-panel (Gameplay tab), you can limit migration waves to a reasonable size. The default is 10, but you can adjust it to any number you feel comfortable with.
Note that this tool will overwrite the population caps set in the vanilla settings, so if you have those numbers customized, be sure to update the setting for pop-control itself. For example, if you want a maximum population of 100 (along with the default per-wave maximum of 10 immigrants), run
pop-control set max-pop 100
after you enable pop-control.
Plant and tree manipulation
For those looking to meddle in the natural order, we now have the commandline plant tool for spawning, growing, and removing plant life.
For example, to grow a sapling into a tree, enter mining mode, enable the keyboard cursor, and highlight the tile with the sapling on it. Then, run plant grow here to increase the sapling's age. Once you unpause the game, the sapling will instantly grow into a tree!

Locale-sensitive number formatting
DFHack tools can display a lot of large numbers, especially where prices and weights are involved. We have traditionally formatted those numbers exactly the same as DF itself does -- that is, no formatting; just numbers. For example, one million is written as 1000000.This can be hard to read, but it's also not perfectly clear how else the numbers should be formatted. In English, we often add commas to numbers, one comma every third digit, so one million would be written as 1,000,000. That would make it easier to read, assuming English is your native language. People from India might prefer to see one million as 10,00,000, and people from Germany might prefer 1.000.000.
So now you have a choice. In gui/control-panel, in the Preferences tab, there is now a Large number formatting preference that you can set.

You have several options:
- None (the default), which formats the numbers without embellishment like vanilla DF does (e.g. 1234567)[/*]
- English, which formats the numbers with commas every third digit (e.g. 1,234,567)[/*]
- System locale, which formats the numbers according to the locale settings for your operating system (system-dependent)[/*]
- SI suffix, which shows up to three significant digits and a metric-system suffix (e.g. 1.23M)[/*]
- Scientific, which shows numbers in scientific notation (e.g. 1.2e+06)[/*]

Announcements
Behind-the-scenes changes
This release marks a significant step forward in aligning the DFHack names for variables with the actual names used internally by the Dwarf Fortress code. Not only does this help smooth communication between DFHack and DF devs, but it opens up a whole new world for modders who can now access large new sections of the game state. Expect new tools soon that capitalize on this improvement in accessibility, especially in regards to the world map!One of the major reasons for this beta is to test the existing DFHack tools and ensure they were all properly migrated to the new naming scheme. Please be on the lookout for commands that you know worked before but that now spit out errors.
Dreamfort has been updated
The Dreamfort quickfort blueprints have seen significant updates in this release. If you are in the middle of building from the Dreamfort blueprints, expect some minor errors or misplaced furniture if you started building from the Dreamfort blueprints in the previous DFHack version.Starting from a new embark, of course, will work perfectly fine.
If you're not already familiar with it, Dreamfort is DFHack's marquee blueprint set for a complete fort layout. It demonstrates good design patterns for new players and shows what the game is capable of. For more experienced players, it provides a simple, yet complete fortress that you can quickly get up and running when you want to focus on specific aspects of the game and not worry too much about infrastructure.

Screenshots are available here: https://docs.dfhack.org/en/latest/docs/guides/quickfort-library-guide.html#dreamfort
and the walkthrough is available via the blueprint notes (which you can display with gui/quickfort) or online here: https://docs.google.com/spreadsheets/d/15TDBebP8rBNvsFbezb9xuKPmGWNzv7j4XZWq1AsfCio/edit?gid=0#gid=0
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- advtools: collection of useful commands and overlays for adventure mode[/*]
- bodyswap: (reinstated) take control of another unit in adventure mode[/*]
- devel/tree-info: print a technical visualization of tree data[/*]
- fix/occupancy: fixes issues where you can't build somewhere because the game tells you an item/unit/building is in the way but there's nothing there[/*]
- fix/population-cap: fixes the situation where you continue to get migrant waves even when you are above your configured population cap[/*]
- gui/sitemap: list and zoom to people, locations, and artifacts[/*]
- gui/tiletypes: interface for modifying map tiles and tile properties[/*]
- plant: (reinstated) tool for creating/growing/removing plants[/*]
- pop-control: (reinstated) limit the maximum size of migrant waves[/*]
New Features
- buildingplan: dimension tooltip is now displayed for constructions and buildings that are designated over an area, like bridges and farm plots[/*]
- gui/notify: new notification type: injured citizens; click to zoom to injured units; also displays a warning if your hospital is not functional (or if you have no hospital)[/*]
- plant: can now remove shrubs and saplings; list all valid shrub/sapling raw IDs; grow can make mature trees older; many new command options[/*]
- prioritize: new info panel on under-construction buildings showing if the construction job has been taken and by whom. click to zoom to builder; toggle high priority status for job if it's not yet taken and you need it to be built ASAP[/*]
- tweak: named-codices: display book titles instead of a material description in the stocks/trade screens[/*]
Misc Improvements
- Dreamfort:[list]
- add a full complement of beds and chests to both barracks[/*]
- redesign guildhall/temple/library level for better accessibility[/*]
- walkthough documentation refresh[/*]
- add milking/shearing station in surface grazing pasture[/*]
- integrate building prioritization into the blueprints and remove prioritize checklist steps[/*]
- add plumbing template for filling cisterns with running water[/*]
Documentation
- installing: add instructions for how to use Steam DFHack with non-Steam DF (ito benefit from DFHack auto-updates and cloud backups)[/*]
- modding-guide: add a section on persistent storage, both for global settings and world-specific settings[/*]
For the complete changelog, please see https://github.com/DFHack/dfhack/releases/tag/50.13-r3rc1
- Fix suspendmanager incorrectly suspending single-tile staircases
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Localization support
You can now install both DFHack and the Dwarf Fortress localization project for translating essential parts of the DF UI into your native language!
It currently has good support for:
- Spanish[/*]
- Italian[/*]
- Russian[/*]
- German[/*]
- Portuguese (Brazil)[/*]
- Chinese (simplified)[/*]
- Korean[/*]
- French[/*]
- Polish[/*]
More details at the Dwarf Fortress localization project home page: https://github.com/dfint
Adventure mode support

Dwarf Fortress adventure mode is currently available on DF's Steam beta branch. DFHack supports the adventure beta on its own adventure-beta branch. Please make sure you are subscribed to DFHack's adventure-beta branch if you are running the DF adventure beta!

We are going through our back catalog and steadily updating adventure mode tools. Moreover, we are modifying existing tools as necessary to be useful for adventure mode.

Here's what's been validated so far:
- flashstep: teleport the adventurer to the mouse cursor[/*]
- ghostly: allow the adventurer to walk through walls[/*]
- gui/create-item: create arbitrary items[/*]
- gui/reveal: reveal the map beyond your cone of vision[/*]
- gui/sandbox: create units or trees (or items too)[/*]
- gui/unit-info-viewer: get extended information on the selected unit[/*]
- resurrect-adv: bring your adventurer back to life[/*]
- reveal-adv-map: reveal hidden world map tiles[/*]
- reveal-hidden-sites: reveal hidden world map sites[/*]
- reveal-hidden-units: reveal hidden units on the local map[/*]
- unretire-anyone: start an adventure as anybody in the world[/*]
Expectations for the adventure mode beta
DFHack needs to release a new compatible build whenever a new DF beta is pushed, just like we need to release a new compatible build whenever a stable DF version is released.The good news is that DFHack now has a process in place to automatically build a compatible DFHack version when a new DF beta drops. DFHack should be compatible with new DF betas within 15 minutes. Sometimes, however, Steam gets one update but not the other. If you get a message that DFHack does not recognize the version of Dwarf Fortress, try going into the app settings in your Steam client for both DFHack and Dwarf Fortress, click on Installed Files, and click the Verify integrity of game files button. That will poke Steam to ensure that both DF and DFHack are fully updated.

In addition to compatibility bumps, the adventure-beta branch of DFHack will be updated frequently as DFHack's support for adventure mode is improved.
Export unit and item descriptions
This release includes a unit/item description exporter that will write details about the selected unit or item to a formatted markdown text file.
Just select a unit or item and hit the Ctrl-t hotkey (or select markdown from the DFHack logo context menu)! The text will be written to a file in your Dwarf Fortress game directory, named after your current world. If you export multiple times, the text will be appended to the same file, so feel free to run markdown on all your forgotten beasts and expensive artifacts. The whole list will be ready for you when you're done.

Quick switch favorites for building planner materials

When you want to use a specific material for construction, say because you are designing a pattern in your tavern floor, it can be annoying to have to set the material filter each time. Now, you can set your favorite material filters and quickly switch among them with the new building planner favorites panel!

Your favorites are saved with your fort, so they'll be there for you if you save and load the game.
You can also rename a favorite by shift-clicking on the name.
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- Updated for adventure mode:[list]
- reveal[/*]
- gui/sandbox, gui/create-item, gui/reveal[/*]
New Features
- DFHack and the Dwarf Fortress translation project can now both be run at the same time[/*]
- buildingplan: quick material filter favorites on main planner panel[/*]
- instruments: new subcommand instruments order for creating instrument work orders[/*]
Fixes
- blueprint: correctly define stockpile boundaries in recorded stockpile ("place") blueprints when there are adjacent non-rectangular stockpiles of identical types[/*]
- caravan: don't include undiscovered divine artifacts in the goods list[/*]
- combine: respect container volume limits[/*]
- dig:[list]
- refresh count of tiles that will be modified by "mark all designated tiles on this z-level for warm/damp dig" when the z-level changes[/*]
- don't affect already-revealed tiles when marking z-level for warm/damp dig[/*]
Misc Improvements
- Dreamfort: move wells on services level so brawling drunken tavern patrons are less likely to fall in[/*]
- New commandline options for controlling the Cloud Save coprocess when launching from Steam. See the dfhack-core documentation for details.[/*]
- caravan: display who is in the cages you are selecting for trade and whether they are hostile[/*]
- combine: reduce combined drink sizes to 25[/*]
- deathcause: automatically find and choose a corpse when a pile of mixed items is selected[/*]
- dig:[list]
- warm/damp/aquifer status will now be shown in mining mode for tiles that your dwarves can see from the level below[/*]
- warm/damp/aquifer status will now be shown when in smoothing/engraving modes[/*]
API
- dfhack.items.getReadableDescription(): easy API for getting a human-readable item description with useful annotations and information (like tattered markers or who is in a cage)[/*]
- Items::createItem: now returns a list of item pointers rather than a single ID, moved creator parameter to beginning, added growth_print and no_floor parameters at end[/*]
- World::getAdventurer: returns current adventurer unit[/*]
- World::ReadPauseState: now returns true when the game is effectively paused due to a large panel obscuring the map. this aligns the return value with the visual state of the pause button when in fort mode.[/*]
Lua
- dfhack.internal.setClipboardTextCp437Multiline: for copying multiline text to the system clipboard[/*]
- dfhack.items.createItem: return value and parameters have changed as per C++ API[/*]
- dfhack.world.getAdventurer: returns current adventurer unit[/*]
Documentation
- Quickfort Blueprint Library: add demo videos for pump stack and light aquifer tap blueprints[/*]
- Update docs for dependency requirements and compilation procedures[/*]
This release is for the non-beta 50.13 release of DF. For the DF v51.01 adventure mode beta, please subscribe to the DFHack adventure-beta beta branch on Steam. The adventure-beta DFHack branch includes everything in this release as well.
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Point and click quantum stockpiles

Run gui/quantum and you'll get a visual, interactive interface for creating quantum stockpiles.
Quantum stockpiles simplify fort management by allowing a small stockpile to contain a large number of items. This reduces the complexity of your storage design, lets your dwarves find items more efficiently, and increases FPS. Until now, though, they were a bit fiddly to set up and it was easy to make a mistake that would prevent them from working correctly.
Quantum stockpiles work by linking a feeder or "input" stockpile to a one-tile minecart hauling route. Whenever an item from the feeder stockpile is placed in the minecart, the minecart is tipped and the item spills out onto an adjacent tile. The single-tile "output" stockpile in that adjacent tile holds all the items spilled out of the minecart and is your quantum stockpile. You can also choose to not have a receiving stockpile and instead have the minecart dump into a pit (perhaps a pit filled with magma).
The gui/quantum UI will walk you through the steps:
- Select a stockpile to be the feeder by clicking on it.[/*]
- Set configuration (like what the quantum stockpile will be named) with the onscreen options.[/*]
- Click on a free tile on the map to build the minecart stop and (optionally) designate the output stockpile.[/*]

See the wiki for more information on quantum stockpiles.
Extended unit info summary

This handy lookup tool will give you detailed (but non-spoilery) data on the currently selected unit and their race. Among other things, it will tell you if a creature needs grass or lays eggs. It will even tell you the unit's current size in cubic centimeters.
If you have any ghosts walking (floating?) around, you'll get some interesting info on them as well : )
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- gui/quantum: (reinstated) point and click interface for creating quantum stockpiles or quantum dumps[/*]
- gui/unit-info-viewer: (reinstated) give detailed information on a unit, such as egg laying behavior, body size, birth date, age, and information about their afterlife behavior (if a ghost)[/*]
Fixes
- Fixed incorrect DFHack background window texture when DF is started in ascii mode and subsequently switched to graphics mode[/*]
- Fixed misidentification of visitors from your own civ as residents; affects all tools that iterate through citizens/residents[/*]
- cursecheck: act on selected unit only if a unit is selected[/*]
- exterminate: don't classify dangerous non-invader units as friendly (e.g. snatchers)[/*]
- gui/create-item:[list]
- properly restrict bags to bag materials by default[/*]
- allow gloves and shoees to be made out of textiles by default[/*]
Misc Improvements
- gui/gm-unit: changes to unit appearance will now immediately be reflected in the unit portrait[/*]
- open-legends: allow player to cancel the "DF will now exit" dialog and continue browsing[/*]
- suspendmanager: Account for walls planned on the z-layer below when determining accessibility to a job[/*]
Structures
- biome_type: add enum attrs for caption and plant_raw_flags[/*]
Documentation
- autoclothing: add section comparing autoclothing and tailor to guide players choosing which to enable[/*]
We've been working with Tarn and Putnam in the lead-up to this beta, and DFHack is prepared to keep pace with DF beta updates. If you're on the DF beta Steam branch, please also subscribe to the DFHack adventure-beta Steam branch to keep the two apps in sync.
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Open legends mode directly from an active fort
The long-awaited, much-requested feature is here: you can now jump into legends mode without retiring your current fortress!
When you run open-legends, you'll get a dialog explaining what is about to happen and you will be prompted to save your game. The dialog gives you a clickable link that will do an autosave, or you can exit the dialog to do a named manual save and come back to open-legends afterwards. Then you can hop right into legends mode and dig into your world's history as it exists right now!

It's important to save your game because entering legends mode disrupts the state of the game. You can't safely jump back into your fort afterwards. DFHack takes steps to protect your savegame and will exit to desktop when you're done browsing legends mode. You can relaunch DF and load your saved game to continue. This isn't ideal, but it is much easier than the current process: saving to a new timeline, retiring your fort, loading up the world anew for a legends session, browsing, and then deleting (or forgetting to delete) the extra timeline.
Many thanks to Rumrusher, who provided the key insight that allowed this feature to work again!
Here's how it looks from end to end:

Dig through warm or damp tiles without interruption
DF has a safety feature: when your miners uncover a warm or damp tile, any dig designation on that tile will be canceled. This is to protect you from blithely mining your way into a lake or an underground magma pool. However, this also means that if you [u]want[/u] to dig through a warm or damp area, you will have to monitor as tiles become unhidden and re-designate your digging for every. single. tile. This is very very very painful. Digging through light aquifers or above magma is an exercise in frustration. Many players completely avoid aquifers for this reason.
There is now a new icon in the mining toolbar. In graphics mode, it looks like a pickaxe with a drop of water and a lava flow behind it. In ASCII mode, it looks like two tildes (~~). Click it (or hit the Ctrl-D hotkey), and you can enable warm and/or damp dig mode. Tiles that you subsequently designate for digging will have a special marker on them (or will blink red/blue in ASCII mode), and they will not be canceled if the designated tile turns out to be warm or damp (respectively).
This means that you can dig without interruption under lakes or through light aquifers.

If you enable both damp dig and vanilla autodig, e.g. to mine out a mineral vein, the damp dig marker will propagate along with the autodig. This allows you to seamlessly automine veins that cross under lakes or through aquifers. Note that if you autodig through an aquifer, you might want to smooth the walls as you go, otherwise the water might build up behind your miners and trap them.

You'll also notice that light and heavy aquifers have new icons (or, in ASCII, blink patterns) that distinguish them from each other and from non-leaky "just damp" tiles.

The new toolbar and aquifer icons are distributed with DFHack and are derived from vanilla assets. This is done with permission from Bay 12. Thank you Tarn!
There are also some new tools and new functionality in existing tools that go along with warm and damp dig:
- gui/aquifer allows you to see, add, remove, and modify aquifers[/*]
- gui/reveal now highlights aquifer tiles, even when not in mining mode. It also gained an alternate reveal mode where [u]only[/u] aquifers are shown and no tiles are actually unhidden. This allows you to designate your digging with knowledge of where aquifers are, but will not spoil the caverns or other underground surprises.[/*]
- gui/blueprint captures warm and damp dig markers as part of the generated blueprints[/*]
- gui/quickfort reproduces warm and damp dig markers stored in blueprints, and additionally allows you to apply any blueprint with warm and/or damp dig markers[/*]
- the aquifer_tap[/*]
Unlink buildings from levers

When viewing levers or the buildings they are linked to, you will now see buttons for unlinking and freeing unlinked mechanisms. This allows you to repurpose levers without deconstructing them, and allows you to retrieve unused mechanisms from unlinked buildings.

Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- aquifer: commandline tool for creating, draining, and modifying aquifers[/*]
- gui/aquifer: interactive aquifer visualization and editing[/*]
- open-legends: (reinstated) open legends mode directly from a loaded fort[/*]
New Features
- blueprint:[list]
- designations and active dig jobs are now captured in generated blueprints[/*]
- warm/damp dig markers are captured in generated blueprints[/*]
Fixes
- fix behavior of Linux Steam launcher on systems that don't support the inotify API[/*]
- fix rendering of resize "notch" in lower right corner of resizable windows in ascii mode[/*]
- agitation-rebalance: fix calculated percent chance of cavern invasion[/*]
- armoks-blessing: fix error when making "Normal" attributes legendary[/*]
- emigration: remove units from burrows when they emigrate[/*]
- fix/loyaltycascade: fix edge case where loyalties of renegade units were not being fixed[/*]
- gui/launcher: don't pop up a result dialog if a command run from minimal mode has no output[/*]
- quickfort:[list]
- stockpiles can now be placed even if there is water covering the tile, as per vanilla behavior[/*]
- reject tiles for building that contain magma or deep water[/*]
Misc Improvements
- aquifer_tap blueprint: now designates in damp dig mode for uninterrupted digging in a light aquifer[/*]
- pump_stack blueprint: now designates in warm and damp dig mode for uninterrupted digging through warm and damp tiles[/*]
- agitation-rebalance: when more than the maximum allowed cavern invaders are trying to enter the map, prefer keeping the animal people invaders instead of their war animals[/*]
- gui/control-panel: add alternate "nodump" version for cleanowned that does not cause citizens to toss their old clothes in the dump. this is useful for players who would rather sell old clothes than incinerate them[/*]
- gui/reveal: show aquifers even when not in mining mode[/*]
- keybinding: you can now assign keybindings to mouse buttons (if your mouse has more than the three buttons already used by DF)[/*]
- tailor: allow turning off automatic confiscation of tattered clothing[/*]
Removed
- drain-aquifer: replaced by aquifer drain --all; an alias now exists so drain-aquifer will automatically run the new command[/*]
API
- Buildings :: checkFreeTiles: now takes a allow_flow parameter to control whether water- or magma-filled tiles are valid[/*]
- Units :: citizensRange: c++-20 std :: range filter for citizen units[/*]
- Units :: forCitizens: iterator callback function for citizen units[/*]
- Units :: paintTile, Units :: readTile: now takes an optional field specification for reading and writing to specific map compositing layers[/*]
Lua
- dfhack.gui.matchFocusString: focus string matching is now case sensitive (for performance reasons)[/*]
Structures
- name many previously-unknown map-related fields and flag bits[/*]
- job_type: new job class type: "Carving" (for smoothing and detailing)[/*]
- unit_action_data_attack (unit_move_attackst): identify flags[/*]
Documentation
- Lua API: documented existing enum:next_item(index) function[/*]
This beta release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
What needs testing
Dig through warm or damp tiles without interruption
DF has a safety feature: when your miners uncover a warm or damp tile, any dig designation on that tile will be canceled. This is to protect you from blithely mining your way into a lake or an underground magma pool. However, this also means that if you [u]want[/u] to dig through a warm or damp area, you will have to re-designate every. single. tile. as it becomes unhidden. This is very very very painful. Digging through light aquifers or above magma is an exercise in frustration. Many players completely avoid aquifers for this reason.There is now a new icon in the mining toolbar. In graphics mode, it looks like a pickaxe with a drop of water and a lava flow behind it. In ASCII mode, it looks like two tildes (~~). Click it (or hit the Ctrl-D hotkey), and you can enable warm and/or damp dig mode. Tiles that you subsequently designate for digging will have a special marker on them (or will blink blue/red in ASCII mode), and they will not be canceled if the designated tile turns out to be warm or damp (respectively).
This means that you can dig without interruption under lakes or through light aquifers. If you enable both damp dig and vanilla autodig, e.g. to mine out a mineral vein, the damp dig marker will propagate along with the autodig. This allows you to automine veins that cross under lakes or through aquifers. Note that if you autodig through an aquifer, you might want to smooth the walls as you autodig, otherwise the water might build up behind your miners and trap them.
You'll also notice that light and heavy aquifers have new icons that distinguish them from each other and from non-leaky "just damp" tiles.
The new toolbar and aquifer icons are distributed with DFHack and are derived from vanilla assets. They are used with permission from Bay 12.
There are also some new tools and new functionality in existing tools for warm and damp dig:
- gui/aquifer allows you to see and edit aquifers[/*]
- gui/reveal now highlights aquifer tiles, even when not in mining mode[/*]
- gui/blueprint captures warm and damp dig markers[/*]
- gui/quickfort reproduces warm and damp dig markers stored in blueprints, and additionally allows you to apply any blueprint with warm and/or damp dig markers[/*]
Open legends mode directly from an active fort
The long-awaited, much-requested feature is here: you can now jump into legends mode without retiring your current fortress.When you run open-legends, you'll get a dialog explaining what is about to happen and you will be prompted to save your game. The dialog gives you a clickable link that will do an autosave, or you can exit the dialog to do a named manual save and then come back to open-legends. Then you can hop right into legends mode and dig into your world's history!
Legends mode, however, disrupts the state of the game. You can't safely jump back into your fort afterwards. DFHack takes steps to protect your savegame and will exit to desktop when you're done browsing legends mode. You can relaunch DF and load your savegame to continue. This isn't ideal, but it is much easier than the current process: saving to a new timeline, retiring your fort, loading up the world anew for a legends session, browsing, and then deleting (or forgetting to delete) the extra timeline.
Unlink levers
When viewing levers or the buildings they are linked to, you will now see buttons for unlinking and freeing unlinked mechanisms. This allows you to repurpose levers without deconstructing them, and allows you to retrieve unused mechanisms from unlinked buildings.PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
New Tools
- aquifer: commandline tool for creating, draining, and modifying aquifers[/*]
- gui/aquifer - interactive aquifer visualization and editing[/*]
- open-legends: (reinstated) open legends mode directly from a loaded fort[/*]
New Features
- blueprint:[list]
- designations and active dig jobs are now captured in generated blueprints[/*]
- warm/damp dig markers are captured in generated blueprints[/*]
Fixes
- fix behavior of Linux Steam launcher on systems that don't support the inotify API[/*]
- fix rendering of resize "notch" in lower right corner of resizable windows in ascii mode[/*]
- armoks-blessing: fix error when making class "Normal" attributes legendary[/*]
- fix/loyaltycascade: fix lookup of associated unit metadata when the metadata list is sparse (that is, the script was sometimes failing to fix the loyalties of renegade units because it was failing to find those units' metadata)[/*]
- quickfort:[list]
- stockpiles can now be placed even if there is water covering the tile, as per vanilla behavior[/*]
- reject tiles for building that contain magma or deep water[/*]
Misc Improvements
- aquifer tap blueprint: now designates in damp dig mode for uninterrupted digging in a light aquifer[/*]
- pump stack blueprint: now designates in warm and damp dig mode for uninterrupted digging through warm and damp tiles[/*]
- gui/control-panel: add alternate "nodump" version for cleanowned that does not cause citizens to toss their old clothes in the dump. this is useful for players who would rather sell old clothes than incinerate them[/*]
- gui/reveal: show aquifers even when not in mining mode[/*]
- keybinding: you can now assign keybindings to mouse buttons (if your mouse has more than the three buttons already used by DF)[/*]
- tailor: allow turning off automatic confiscation of tattered clothing[/*]
Removed
- drain-aquifer: replaced by aquifer drain --all; an alias now exists so drain-aquifer will automatically run the new command[/*]
API
- Buildings :: checkFreeTiles: now takes a allow_flow parameter to control whether water- or magma-filled tiles are valid[/*]
- Units :: citizensRange: c++-20 std :: range filter for citizen units[/*]
- Units :: forCitizens: iterator callback function for citizen units[/*]
- Units :: paintTile, Units :: readTile: now takes an optional field specification for reading and writing to specific map compositing layers[/*]
Lua
- dfhack.gui.matchFocusString: focus string matching is now case sensitive (for performance reasons)[/*]
Structures
- name many previously-unknown map-related fields and flag bits[/*]
- job_type: new job class type: "Carving" (for smoothing and detailing)[/*]
- unit_action_data_attack (unit_move_attackst): identify flags[/*]
Documentation
- Lua API: documented existing enum:next_item(index) function[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Taking the frustration out of irritation
agitation-rebalance alters the mechanics of irritation-related attacks, that is, agitated surface wildlife and cavern invaders, so they are less constant and are more responsive to ongoing player behavior.Many people find the constant vanilla irritation attacks to be overwhelming, or at least un-fun. This gameplay mod tempers the retaliation so once you get attacked, you won't get attacked again until you specifically provoke nature further. Instead of hitting a threshold and then getting a never-ending stream of attackers, chances of a subsequent attack smoothly ramp up over time in proportion to your tree-chopping, fishing, or noise-making activity in the relevant area.
If you're just confused by the whole agitated animal and cavern invasion thing, there is an overview of how the vanilla system works here: https://docs.dfhack.org/en/stable/docs/tools/agitation-rebalance.html#how-the-df-agitation-system-works
How to use
Open up gui/control-panel and go to the "Gameplay" tab. Turn on agitation-rebalance. If your game difficulty settings for "Enemies" are at any of the vanilla presets, that's all you have to do. If you have customized the difficulty settings, say to disable cavern invaders because you found them annoying, run this command:agitation-rebalance preset lenient
If you want a tougher experience, you can instead run:
agitation-rebalance preset strict
And if you want the visible monitor that shows the current threat level on the surface and in the caverns, run:
agitation-rebalance enable monitor

Many thanks to rome of oxtrot for digging through the DF logic to identify the formulas used to calculate the chances of agitation and invasion. This mod would not have been possible without her dedicated research.
Fixing longstanding vanilla bugs
This release features solutions for no fewer than three longstanding vanilla bugs.fix/stuck-worship
fix/stuck-worship fixes prayer so units don't get stuck in uninterruptible "Worship!" states.You may have noticed that some dwarves can never satisfy their need to worship. They get stuck praying to the same god over and over, but they never seem to get enough. Their job is listed as a purple "Worship!", which means that the need is so strong that they are unable to do anything else. Despite having needs to pray to several different gods, the dwarf only ever prays to one, even if they have already satisfied their need for that particular god. This fix ensures that each god gets their fair share of prayer time.
If you have dwarves that are already stuck in a Worship! loop and have a backlog of gods they need to pray to, it may still take them a few days to pray themselves out of that hole. However, after a month or so, your fort should seem more productive and when your dwarves worship, it should be a friendly (interruptible) green instead of a dire (uninterruptible) purple.

fix/noexert-exhaustion
fix/noexert-exhaustion fixes an issue with assigning necromancers, vampires, and intelligent undead to military training. These kinds of units aren't supposed to ever get exhausted -- in game RAW language, they have the NOEXERT token. However, military training ignores that token and makes them tired anyway. Unfortunately, because of NOEXERT, these units also never [u]recover[/u] from being tired, which gets them stuck in an exhausted state. With this fix running, they are properly kept free of exhaustion, even when training in the military.fix/ownership
fix/ownership detects and fixes the case where multiple citizens claim the same item, preventing "Store owned item" job loops as each "owner" takes turns at stealing the item back from the other owner's room.All three are enabled by default, so you don't have to do anything special to benefit from them. You should just see your forts working a little bit smoother now.
Instrument component lookup
Instruments. How do they work?Well, nobody really knows (except maybe Tarn), but now at least you can follow a recipe to get their parts assembled.
The new instruments command provides information on how to craft the instruments used by the player civilization. Each component is listed along with the required raw materials. Moreover, you can see which instruments are hand held and which need to be "built" as stationary buildings, in case you're looking for a specific type for your taverns and temples.

Automatically retrain partially trained livestock
This one is for those who like to domesticate wild animals. A newborn animal inherits the training level of its parents. If the parents were not yet fully domesticated, the newborn won't be either. If you don't notice that the animal was born and that it doesn't have a trainer assigned, the partial training will decay over time. Eventually the animal will revert to wild, possibly attacking your dwarves or other livestock.The autoretrainer watches for newborn partially-trained livestock and assigns a trainer. That's it.
You can enable it from the Pets/Livestock screen (under "Creatures"), or you can autostart it for new forts in gui/control-panel.


Skill level and labor type restrictions for workshops

This is a new overlay for workshop and furnace buildings where you can configure the workshop to only accept general work orders that pertain to specific labors. For example, if you have general manager workorders set up to produce weapons and armor, you can configure one forge to only accept armoring jobs and a different forge to only accept Weaponsmithing jobs. General workorder jobs for armor will only be distributed to the one specialized in Armoring, and general workorder jobs for weapons will only be distributed to the one specialized in Weaponsmithing. Then you can assign a master armorer and a master weaponsmith to the respective forges to make more productive use of their abilities.
As an alternative to assigning specific workshop masters, you can leave the workshop at "This workshop is free for anybody to use" and instead set limits for the worker's skill level. Then, only citizens that have a skill level within that range will come to do jobs at that workshop. For example, if you have many highly skilled armorers, you can set the labor restriction to Armoring and the skill limits to Master and above. Then, [u]any[/u] of your available skilled armorers can come to complete jobs at that forge. When one armorer needs rest, falls in the well, or gets eaten by a forgotten beast, the others can immediately take up the slack without requiring micromanagement from the player.

Veteran players may remember this as a vanilla feature in pre-v50 Dwarf Fortress. This is actually still the case. The DFHack overlay simply provides a UI for the vanilla feature hiding beneath the surface, just like the civilian alert.
The labor and skill restrictions can also be set from quickfort blueprints. The four Craftsdwarf's workshops on the Dreamfort industry level, for example, are now automatically specialized for Stonecrafting, Woodcrafting, Bone Carving, and miscellaneous tasks, respectively.
Announcements
New Linux Steam launch behavior
This one's just for the Linux folks. It's important that playtime metrics get to both DF and DFHack, so we updated our launcher on Linux to ensure that both DFHack and DF get marked as "running" when you're playing the game from the Steam client, regardless of which "game" you selected to launch.This brings the Linux launcher in line with what we have for the Windows launcher and should ensure that both DF and DFHack have proper accounting for playtime for Linux players.
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- agitation-rebalance: alter mechanics of irriation-related attacks so they are less constant and are more responsive to recent player bahavior[/*]
- devel/block-borders: (reinstated) highlights boundaries of map blocks or embark tile blocks[/*]
- fix/noexert-exhaustion: fix "Tired" NOEXERT units. Enabling via gui/control-panel prevents NOEXERT units from getting stuck in a "Tired" state[/*]
- fix/ownership: fix instances of multiple citizens claiming the same items, resulting in "Store owned item" job loops[/*]
- fix/stuck-worship: fix prayer so units don't get stuck in uninterruptible "Worship!" states[/*]
- instruments: provides information on how to craft the instruments used by the player civilization[/*]
- modtools/if-entity: (reinstated) modder's resource for triggering scripted content depending on the race of the loaded fort[/*]
- modtools/item-trigger: (reinstated) modder's resource for triggering scripted content when specific items are used[/*]
New Features
- exterminate: new "disintegrate" kill method that additionally destroys carried items[/*]
- gui/settings-manager: add import, export, and autoload for work details[/*]
- logistics: autoretrain will automatically assign trainers to your partially-trained (but not yet domesticated) livestock. this prevents children of partially-trained parents from reverting to wild if you don't notice they were born[/*]
- orders: add overlay for configuring labor and skill level restrictions for workshops[/*]
- quickfort: allow setting of workshop profile properties (e.g. labor, skill restrictions) from build blueprints[/*]
- sort: updated and reinstated military status/squad membership/burrow membership filter for work animal assignment screen[/*]
- stocks: add button/hotkey for removing empty categories from the stocks list[/*]
Fixes
- autochop: fix underestimation of log yield for cavern mushrooms[/*]
- autoclothing: don't produce clothes for dead units[/*]
- caravan: fix trade price calculations when the same item was requested for both import and export[/*]
- catsplosion: only cause pregnancies in adults[/*]
- control-panel: fix filtering not filtering when running the list command[/*]
- gui/launcher:[list]
- fix detection on Shift-Enter for running commands and autoclosing the launcher[/*]
- fix history scanning (Up/Down arrow keys) being slow to respond when in minimal mode[/*]
Misc Improvements
- Dreamfort:[list]
- the four Craftsdwarf's workshops on the industry level are now specialized for Stonecrafting, Woodcrafting, Bone Carving, and miscellaneous tasks, respectively[/*]
- update embark profile recommendations and example embark profile[/*]
API
- Units :: getCitizens: now includes residents by default[/*]
- Units :: isForgottenBeast: property check for forgotten beasts[/*]
- Units :: isGreatDanger: now includes forgotten beasts[/*]
- Units :: isResident: property check for residents (as opposed to citizens)[/*]
Lua
- helpdb: search_entries now returns a match if [u]all[/u] filters in the include list are matched. previous behavior was to match if [u]any[/u] include filter matched.[/*]
- dfhack.units.getCitizens: now includes residents by default[/*]
- dfhack.units.isForgottenBeast: make new units method available to Lua[/*]
- matinfo.decode: now directly handles plant objects[/*]
- widgets.Label: *pen attributes can now either be a pen or a function that dynamically returns a pen[/*]
Structures
- activity_event: identify fields and type values[/*]
- plant_tree_info: define tree body and branch flags[/*]
- plotinfo.hauling: name fields related to the hauling route panel[/*]
- unit: identify and define many previously unknown fields, types, and enums[/*]
Documentation
- introduction: refresh getting started content[/*]
- overlay-dev-guide: updated examples and troubleshooting steps[/*]
- quickstart: refresh quickstart guide[/*]
We're running a poll on Reddit for which DFHack features you'd like to see next! Please vote here:
https://www.reddit.com/r/dwarffortress/comments/1bj5bjs/poll_what_big_feature_should_dfhack_tackle_next/
This beta release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
What needs testing?
agitation-rebalance updates
agitation-rebalance has seen significant internal improvements, especially around the calculations of chance of invasion. In the previous beta, after a cavern invasion, you'd see the cavern danger level immediately drop to None and then, after sufficient subsequent irritation, it would jump to High in one go.Now, after clearing an invasion, you'll see your chances of a subsequent invasion smoothly increase from Low to High as you chop more trees and make more noise, which is much closer to the behavior `agitation-rebalance` provides on the surface for agitated wildlife attacks. Moreover, if you have the monitor panel visible, you will not see the danger level of the caverns update until you clear the current invasion. This is to avoid spoiling exactly when and where a cavern invasion has occurred. This mod is supposed to fix the mechanics of irritation -- it's not supposed to spoil the surprise when it happens!
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- fix/ownership: fix instances of multiple citizens claiming the same items, resulting in "Store owned item" job loops[/*]
- modtools/if-entity: (reinstated) modder's resource for triggering scripted content depending on the race of the loaded fort[/*]
Fixes
- autoclothing: don't produce clothes for dead units[/*]
- caravan: fix trade price calculations when the same item was requested for both import and export[/*]
Misc Improvements
- Many tools that previously only worked for citizens or only for dwarves now work for all citizens and residents, e.g. fastdwarf, rejuvenate, etc.[/*]
- allneeds:[list]
- select a dwarf in the UI to see a summary of needs for just that dwarf[/*]
- provide options for sorting the cumulative needs by different criteria[/*]
API
- Units :: getCitizens: now includes residents by default[/*]
- Units :: isResident: property check for residents (as opposed to citizens)[/*]
Lua
- dfhack.units.getCitizens: now includes residents by default[/*]
Structures
- activity_event: identify fields and type values[/*]
- unit: identify and define many previously unknown fields, types, and enums[/*]
This beta release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
What needs testing?
There are several large new features for this release that could use testing and feedback.agitation-rebalance smooths out agitated creature attacks and cavern invasions

This is the one that needs the most feedback, especially from people who have found the cavern invasions to be frustrating. The basic question is: after you turn this mod on, do you still find the caverns frustrating? Do you feel like the caverns are more fun to explore and utilize?
If you're just confused by the whole agitated animal and cavern invasion thing, there is an overview of how the vanilla system works here: https://docs.dfhack.org/en/latest/docs/tools/agitation-rebalance.html#how-the-df-agitation-system-works
The tl;dr is that your actions annoy nature, and nature retaliates..endlessly. Many people find the constant nature of the retaliation to be overwhelming. This mod tempers the retaliation so once you get attacked, you won't get attacked again until you specifically provoke nature further.
How to use

Open up gui/control-panel and go to the "Gameplay" tab. Turn on agitation-rebalance. If your difficulty settings are at any of the vanilla presets, that's all you have to do. If you have customized the difficulty settings, say to disable cavern invaders, run this command in gui/launcher:
agitation-rebalance preset lenient
If you want a tougher experience, you can instead run:
agitation-rebalance preset strict
If you want the visible monitor that shows your current chances of being attacked by nature, run:
agitation-rebalance enable monitor
fix/stuck-worship

You may have noticed that some dwarves can never satisfy their need to worship. They get stuck praying to the same god over and over, but they never seem to get enough. Their job is listed as a purple "Worship!", which means that the need is so strong that they are unable to do anything else. The issue is that despite having needs to pray to several [u]different[/u] gods, the dwarf only prays to [u]one[/u], even if they have already satisfied their need for that particular god. This fix ensures that each god gets their fair share of prayer time.
The fix is on by default -- it will start up as soon as you install this beta and load a fort -- but we'd like some verification that it works well in a wide variety of fort setups. If you have dwarves that are already stuck in a Worship! loop and have a backlog of gods they need to pray to, it may still take them a few days to pray themselves out of that hole. However, after a month or so, does your fort seem more productive than it was before? When your dwarves worship, is is now a friendly green instead of a dire purple?
work details import/export

If you go to the Work Details screen (under "Labor"), you'll now see buttons for exporting, importing, and auto-importing your work details for new forts. Try it out! does it make setting up new forts easier?
autoretrain livestock

This one is for those who like to domesticate wild animals. A newborn animal inherits the training level of its parents. If the parents were not yet fully domesticated, the newborn won't be either. If you don't notice that the animal was born and that it doesn't have a trainer assigned, the partial training will decay over time, and eventually the animal will revert to wild, possibly attacking your dwarves or other livestock.
The autoretrainer watches for newborn partially-trained livestock and assigns a trainer. That's it.
You can enable it from the Pets/Livestock screen (under "Creatures")
labor and skill restrictions for workshops

This is a new overlay for workshop and furnace buildings where you can configure the workshop to only accept general work orders that pertain to specific labors (the list of allowed labors is different for every workshop).
For example, by default, all weapon, armor, and blacksmithing general manager orders get sent to all forges. With labor restrictions, you can designate specific forges to handle just weapons, just armor, or just metalsmithing. Then, you can assign appropriate legendary masters to each forge, and they will only receive orders for appropriate products.
Or, instead of assigning a workshop master, you can restrict the skill level to Master and above and leave the workshop at "This workshop is free for anybody to use.". This will allow any citizen that is at least a master of armorsmithing to use the workshop to complete the jobs there.
With labor and skill restrictions, you can simplify your work orders, leaving them generalized and not tied to specific shops. The restrictions will self-organize the orders so they get completed at the right places with the right pool of people, even if one or two masters meet an untimely demise.
Veteran players may remember this as a vanilla feature in pre-v50 Dwarf Fortress. This is actually still the case. The DFHack overlay simply provides a UI for the vanilla feature hiding beneath the surface, just like the civilian alert. There was a previous announcement and discussion of this feature here .
New Linux Steam launch behavior
This one's just for the Linux folks. It's important that DF playtime metrics get to DF, so we updated our launcher on Linux to ensure that both DFHack and DF get marked as "running" when you're playing the game from the Steam client. If you're on Linux, could you try:
- Launching DFHack from the Steam client[/*]
- Launching DF from the Steam client[/*]
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- agitation-rebalance: alter mechanics of irriation-related attacks so they are less constant and are more responsive to recent player bahavior[/*]
- fix/stuck-worship: fix prayer so units don't get stuck in uninterruptible "Worship!" states[/*]
- instruments: provides information on how to craft the instruments used by the player civilization.[/*]
- modtools/item-trigger: (reinstated) modder's resource for triggering scripted content when specific items are used[/*]
New Features
- exterminate: new "disintegrate" kill method that additionally destroys carried items[/*]
- gui/settings-manager: add import, export, and autoload for work details[/*]
- logistics: autoretrain will automatically assign trainers to your partially-trained (but not yet domesticated) livestock. this prevents children of partially-trained parents from reverting to wild if you don't notice they were born[/*]
- orders: add overlay for configuring labor and skill level restrictions for workshops[/*]
- quickfort: allow setting of workshop profile properties (e.g. labor, skill restrictions) from build blueprints[/*]
- sort: updated and reinstated military status/squad membership/burrow membership filter for work animal assignment screen[/*]
- stocks: add button/hotkey for removing empty categories from the stocks list[/*]
Fixes
- autochop: fix underestimation of log yield for cavern mushrooms[/*]
- catsplosion: only cause pregnancies in adults[/*]
- control-panel: fix filtering not filtering when running the list command[/*]
- gui/launcher:[list]
- fix detection on Shift-Enter for running commands and autoclosing the launcher[/*]
- fix history scanning (Up/Down arrow keys) being slow to respond when in minimal mode[/*]
Misc Improvements
- Dreamfort: the four Craftsdwarf's workshops on the industry level are now specialized for Stonecrafting, Woodcrafting, Bone Carving, and miscellaneous tasks, respectively[/*]
- When launched from the Steam client on Linux, both Dwarf Fortress and DFHack will be shown as "Running". This ensures that DF has proper accounting for Linux player usage.[/*]
- autobutcher: prefer butchering partially trained animals and save fully domesticated animals to assist in wildlife domestication programs[/*]
- autodump: can now teleport items loosely stored in buildings (clutter)[/*]
- clean: protect farm plots when cleaning mud[/*]
- control-panel: enable tweaks quietly on fort load so we don't spam the console[/*]
- devel/tile-browser: simplify interface now that SDL automatically normalizes texture scale[/*]
- exterminate: make race name matching case and space insensitive[/*]
- gui/gm-editor: support opening engraved art for inspection[/*]
- gui/launcher:[list]
- add interface for browsing and filtering commands by tags[/*]
- add support for history search (Alt-s hotkey) when in minimal mode[/*]
- add support for the clear command and clearing the scrollback buffer[/*]
API
- Units :: isForgottenBeast: property check for forgotten beasts[/*]
- Units :: isGreatDanger: now includes forgotten beasts[/*]
Lua
- helpdb: search_entries now returns a match if [u]all[/u] filters in the include list are matched. previous behavior was to match if [u]any[/u] include filter matched.[/*]
- dfhack.units.isForgottenBeast: make new units method available to Lua[/*]
- matinfo.decode: now directly handles plant objects[/*]
- widgets.Label: *pen attributes can now either be a pen or a function that dynamically returns a pen[/*]
Structures
- plant_tree_info: define tree body and branch flags[/*]
- plotinfo.hauling: name fields related to the hauling route panel[/*]
Documentation
- introduction: refresh getting started content[/*]
- overlay-dev-guide: updated examples and troubleshooting steps[/*]
- quickstart: refresh quickstart guide[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
Fixes
- gui/design: no longer comes up when Ctrl-D is pressed but other DFHack windows have focus[/*]
- gui/notify: persist notification settings when toggled in the UI[/*]
Misc Improvements
- gui/launcher: developer mode hotkey restored to Ctrl-D[/*]
- sort: squad assignment overlay rewritten for compatiblity with new vanilla data structures and screen layouts[/*]
Removed
- burrow: removed overlay 3D box select since it is now provided by the vanilla UI[/*]
- sort: removed Search widgets for screens that now have vanilla search[/*]
API
- Gui :: getWidget: retrieve a vanilla DF widget by name or index[/*]
Lua
- dfhack.gui.getWidgetChildren: retrieve a list of child widgets for a given widget container[/*]
- dfhack.gui.getWidget: retrieve a vanilla DF widget by hierarchy path, with each step specified by a widget name or index[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Extended notification and quick-zoom panel

There are some things that the game doesn't notify you about, despite being very useful to know. The DFHack notification panel fills in those gaps. A small panel will now appear in the lower left corner when you're on the main map and specific conditions are met:
- When agitated creatures enter the map. Clicking on the notification will zoom you to the first one. You can zoom to each agitated creature in turn by repeatedly clicking on the notification (or hitting the Enter key).[/*]
- When invaders (or other hostiles) enter the map. You can zoom to each individual hostile just like you can for agitated creatures.[/*]
- When a production mandate is nearing its deadline and someone will soon be punished for violating the mandate. Clicking on the notification will open the nobles screen so you can see what you're supposed to be producing. It will be the icon in angry red.[/*]
- When a dwarf is in a strange mood. The notification will tell you what stage of the mood they are in (finding workshop, gathering materials, working on artifact) and will tell you if they can't find what they are looking for or are otherwise stuck.[/*]
- When you have agreed to build a guildhall or temple, but have not yet done so. Clicking on the notification will give you details about what it was that you agreed to build.[/*]
- When a merchant finishes unloading goods and is ready to trade. Clicking on the notification will zoom you to the trade depot.[/*]
- When a unit is starving or stranded. Clicking on the notification will zoom you to the unit(s).[/*]
- When a "curious" creature enters the map that will seek to steal your stuff.[/*]

Tweak's bugfixes

The tweak tool has been reinstated, along with its library of small tweaks that improve the UI or fix bugs from the DF bug tracker. These tweaks are on by default, but can be disabled (if you so wish) on the "Bug Fixes" tab of gui/control-panel.
It includes the following tweaks/fixes:
- adamantine-cloth-wear: Prevents adamantine clothing from wearing out while being worn (Bug 6481 ).[/*]
- craft-age-wear: Fixes crafted items not wearing out over time (Bug 6003 ). With this tweak, items made from cloth and leather will gain a level of wear every 20 in-game years.[/*]
- eggs-fertile: Displays an indicator on fertile eggs.[/*]
- fast-heat: Improves temperature update performance by ensuring that 1 degree of item temperature is crossed in no more than 100 ticks when updating from the environment temperature. This reduces the time it takes for temperature to reach equilibrium and improves FPS when there are many items.[/*]
- flask-contents: Names filled waterskins, flasks, and vials according to their contents, the same way other containers such as barrels, bins, and cages are named. (Bug 4914 )[/*]
- partial-items: Displays percentages on partially-consumed items such as hospital cloth.[/*]
- reaction-gloves: Fixes reactions to produce gloves in sets with correct handedness (Bug 6273 ).[/*]

Animal assignment UI improvements

The DFHack animal assignment screen now displays the distance the creature is from the selected pasture/pit/cage/restraint. You can now also sort by distance.
There is now also an indicator for how many creatures you have assigned to the pasture/pit/cage/restraint.
Toggle animal designations from the animal info sheet

When viewing the info sheet for an animal, you'll now get a small panel that allows you to mark (or unmark) the animal for butchering, gelding, or adoption. If the animal is not already domesticated, you'll also get a toggle for whether a trainer is assigned.

Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- add-thought: (reinstated) add custom thoughts to a dwarf[/*]
- combat-harden: (reinstated) set a dwarf's resistence to being affected by visible corpses[/*]
- devel/input-monitor: interactive UI for debugging input issues[/*]
- gui/notify: display important notifications that vanilla doesn't support yet and provide quick zoom links to notification targets.[/*]
- gui/petitions: (reinstated) show outstanding (or all historical) petition agreements for guildhalls and temples[/*]
- list-waves: (reinstated) show migration wave information[/*]
- make-legendary: (reinstated) make a dwarf legendary in specified skills[/*]
- pet-uncapper: (reinstated, renamed from petcapRemover) allow pets to breed beyond the default population cap of 50[/*]
- tweak: (reinstated) a collection of small bugfixes and gameplay tweaks[/*]
- undump-buildings: (reinstated) remove dump designation from in-use building materials[/*]
New Features
- cleanowned: Add a "nodump" option to allow for confiscating items without dumping[/*]
- tweak: Add "flask-contents", makes flasks/vials/waterskins be named according to their contents[/*]
Fixes
- autoclothing: Fix enabled behavior[/*]
- caravan: display book and scroll titles in the goods and trade dialogs instead of generic scroll descriptions[/*]
- dig-now: fix digging stairs in the surface sometimes creating underworld gates.[/*]
- dig: overlay that shows damp designations in ASCII mode now propertly highlights tiles that are damp because of an aquifer in the layer above[/*]
- fix/retrieve-units: prevent pulling in duplicate units from offscreen[/*]
- gui/blueprint: changed hotkey for setting blueprint origin tile so it doesn't conflict with default map movement keys[/*]
- gui/control-panel: fix error when toggling autostart settings[/*]
- gui/design: clicking the center point when there is a design mark behind it will no longer simultaneously enter both mark dragging and center dragging modes. Now you can click once to move the shape, and click twice to move only the mark behind the center point.[/*]
- gui/launcher: developer mode hotkey changed from Ctrl-D to Alt-D so as not to conflict with the hotkey for gui/design[/*]
- item: avoid error when scanning items that have no quality rating (like bars and other construction materials)[/*]
- source: fix issue where removing sources would make some other sources inactive[/*]
- strangemood: correctly recognize Stonecutter and Stone Carver as moodable skills, move the Mason's boosted mood chance to the Stone Carver, and select Fell/Macabre based on long-term stress[/*]
- warn-stranded:[list]
- don't complain about units that aren't on the map (e.g. soldiers out on raids)[/*]
- when there was at least one truly stuck unit and miners were actively mining, the miners were also confusingly shown in the stuck units list[/*]
Misc Improvements
- autonestbox: assign egg layers to the nestbox they have chosen if they have already chosen a nestbox[/*]
- buildingplan: use closest matching item rather than newest matching item[/*]
- caravan: move goods to trade depot dialog now allocates more space for the display of the value of very expensive items[/*]
- exportlegends: make progress increase smoothly over the entire export and increase precision of progress percentage[/*]
- extinguish: allow selecting units/items/buildings in the UI to target them for extinguishing; keyboard cursor is only required for extinguishing map tiles that cannot be selected any other way[/*]
- gui/autobutcher: ask for confirmation before zeroing out targets for all races[/*]
- gui/mod-manager: will automatically unmark the default mod profile from being the default if it fails to load (due to missing or incompatible mods)[/*]
- gui/quickfort:[list]
- can now dynamically adjust the dig priority of tiles designated by dig blueprints[/*]
- can now opt to apply dig blueprints in marker mode[/*]
Removed
- gui/create-tree: replaced by gui/sandbox[/*]
- gui/manager-quantity: the vanilla UI can now modify manager order quantities after creation[/*]
- warn-starving: combined into gui/notify[/*]
- warn-stealers: combined into gui/notify[/*]
API
- Gui focus strings will now include dwarfmode/Default if the only other panel open is the Squads panel[/*]
- Gui module Announcement functions now use DF's new announcement alert system[/*]
- Gui:: addCombatReport, Gui:: addCombatReportAuto: add versions that take report * instead of report vector index[/*]
- Gui:: MTB_clean, Gui:: MTB_parse, Gui:: MTB_set_width: new functions for manipulating markup_text_boxst[/*]
- Gui:: revealInDwarfmodeMap: unfollow any currently followed units/items so the viewport doesn't just jump back to where it was[/*]
- toupper_cp437(char), tolower_cp437(char): new MiscUtils functions, return a char with case changed, respecting CP437[/*]
- toUpper, toLower: MiscUtils functions renamed to toUpper_cp437 and toLower_cp437, CP437 compliant[/*]
Lua
- Overlay framework now respects active and visible widget attributes[/*]
- dfhack.gui announcement functions use default arguments when omitted[/*]
- dfhack.units.getCitizens now only returns units that are on the map[/*]
- dfhack.upperCp437(string), dfhack.lowerCp437(string): new functions, return string with all chars changed, respecting CP437 code page[/*]
Structures
- buildings_other: add correct types for civzone building vectors[/*]
- job_skill: correct moodable property for several professions[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
The end-of-year holidays have brought a surge of DFHack development! There are many new features and tools to play with. In order to keep these highlights to a reasonable length, we can't even go through them all in detail -- see the Changelog section for a full list.Be master of your domain with gui/embark-anywhere

By popular request, you can now ask Armok to allow you to embark wherever you please!
If you run gui/embark-anywhere when youre choosing a site for embark, you can bypass any warnings the game gives you about potential embark locations. Want to embark in an inaccessible location on top of a mountain range? Go for it! Want to try a brief existence in the middle of the ocean? Nobody can stop you! Want to tempt fate by embarking [u]inside of[/u] a necromancer tower? !!FUN!!
Any and all consequences of embarking in strange locations are up to you to handle (possibly with other armok tools).
The DFHack logo isn't shown on the embark screen (since it would cover the vanilla embark size adjustment widgets), but DFHack hotkeys still work, so you can still bring up the logo menu with Ctrl-Shift-C. There is also a convenience hotkey for running gui/embark-anywhere directly: Ctrl-A, which is only active when on the site choosing screen.
Note that this command (and its hotkey) will not be shown for those who have DFHack's "Mortal Mode" enabled in the gui/control-panel Preferences tab.

Bulk item management

The new item commandline tool allows you to filter items in you fort by various properties (item type, material, wear-level, quality, etc.), and perform bulk operations like forbid, dump, melt, and their inverses. With one command, you can hide all boulders that are not in stockpiles, or mark all metal items that are less than masterwork quality for melting!
This tool also provides the underlying logic for a planned (but not yet written) GUI-based item management screen.


Squad equipment assignment fixing tool

When you look at your squad equipment, there will be a new button that says "Detect conflicts". This will bring up a report of squad equipment issues, like:
- squad members assigned to labors that cause issues with military uniforms: mining, hunting, and tree chopping[/*]
- a single piece of equipment assigned to multiple squad members[/*]
- citizens retaining squad membership (and equipment configuration) from previous forts (this can happen with migrants from forts that you have retired)[/*]
It may take a few tries (give your dwarves some time to go get their new gear before you try again), but your forever-yellow equipment icons should finally turn green!

Visualize biome boundaries with gui/biomes

If you have embarked at the intersection of two or more biomes, you may have trouble finding a place for your farm plots so that you can grow the crops you want. gui/biomes can show you where the boundaries are, and will also give you information about the biomes themselves, such as their savagery rating.

Bulk building management with gui/mass-remove

gui/mass-remove has been around for a while, but has received a significant overhaul. You can box select a region and schedule all buildings, constructions, stockpiles, and/or zones for removal. Planned and fully built buildings/constructions can be selected independently. No need to rage quit if you accidentally plan a solid block of 400 walls instead of flooring! Clear it all away in a few clicks!
It can easily cancel removal of buildings or constructions that you have marked for removal as well.
Bring it up when on the main map with the Ctrl-M hotkey.

Auto-restore difficulty settings and standing orders for new embarks

Do you find yourself having to remember to go turn corpse hauling off for your dear, bearded, impressionable children? Now, you can set it once, export, and have your settings automatically restored when you start a new embark. It's seamless, and is a huge time-saver for people with highly customized settings!
Both difficulty settings (in the pre-embark setup screen or the Settings screen when a fort is loaded) and standing orders (Labor -> Standing orders) can be saved and restored independently. When on those configuration screens, look for a DFHack overlay toggle where you can enable auto-restore for new embarks.

Announcements
DFHack control panel changes

The DFHack gui/control-panel interface received a significant overhaul. Tools are now categorized into subtabs, gathering the automation, bugfix, and gameplay tools into sublists. The file format for storing control panel configuration has changed as well. When you load this release of DFHack, your previous control panel settings will be seamlessly migrated to the new format. Other than the layout changes, which should make the tools you want easier to find, the primary behavior change is that some things that were only configured globally (like the tools on the now-gone "Maintenance" tab) are now configurable per-fort. There is also more information about what things are and what they do. For example, each overlay now has a short description.
Plugin ABI version bump
If you are developing an external plugin for DFHack, be aware that the plugin binary interface (ABI) has changed in this version to support the new site-local persistence model. See changes to the sample code in https://github.com/DFHack/dfhack/tree/develop/plugins/examples for details. Any external plugins that target DF 50.11 will need to be recompiled against DFHack 50.11-r5 sources.PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- control-panel: new commandline interface for control panel functions[/*]
- gui/biomes: visualize and inspect biome regions on the map[/*]
- gui/embark-anywhere:[list]
- new keybinding (active when choosing an embark site): Ctrl-A[/*]
- bypass those pesky warnings and embark anywhere you want to[/*]
New Features
- gui/mass-remove: new global keybinding: Ctrl-M while on the fort map[/*]
- gui/settings-manager: save and load embark difficulty settings and standing orders; options for auto-load on new embark[/*]
- sort: search and sort for the "choose unit to elevate to the barony" screen. units are sorted by the number of item preferences they have and the units are annotated with the items that they have preferences for[/*]
- uniform-unstick: add overlay to the squad equipment screen to show a equipment conflict report and give you a one-click button to (attempt to) fix[/*]
- zone: add button to location details page for retiring unused locations[/*]
Fixes
- DFHack tabs (e.g. in gui/control-panel) are now rendered correctly when there are certain vanilla screen elements behind them[/*]
- Dreamfort: fix holes in the "Inside+" burrow on the farming level (burrow autoexpand is interrupted by the pre-dug miasma vents to the surface)[/*]
- When passing map movement keys through to the map from DFHack tool windows, also pass fast z movements (shift-scroll by default)[/*]
- ban-cooking: fix banning creature alcohols resulting in error[/*]
- buildingplan:[list]
- when you save a game and load it again, newly planned buildings are now correctly placed in line after existing planned buildings of the same type[/*]
- treat items in wheelbarrows as unavailable, just as vanilla DF does. Make sure the fix/empty-wheelbarrows fix is enabled so those items aren't permanently unavailable![/*]
- show correct number of materials required when laying down areas of constructions and some of those constructions are on invalid tiles[/*]
Misc Improvements
- Dreamfort: put more chairs adjacent to each other to make the tavern more "social"[/*]
- The "PAUSE FORCED" badge will blink briefly to draw attention if the player attempts to unpause when a DFHack tool window requires the game to be paused[/*]
- wherever units are listed in DFHack tools, properties like "agitated" or (-trained-) are now shown[/*]
- autochop: better error output when target burrows are not specified on the commandline[/*]
- autoclothing : now does not consider worn (x) clothing as usable/available; reduces overproduction when using tailor at same time[/*]
- buildingplan: add option for preventing constructions from being planned on top of existing constructions (e.g. don't build floors on top of floors)[/*]
- burrow: flood fill now requires an explicit toggle before it is enabled to help prevent accidental flood fills[/*]
- confirm:[list]
- updated confirmation dialogs to use clickable widgets and draggable windows[/*]
- added confirmation prompt for right clicking out of the trade agreement screen (so your trade agreement selections aren't lost)[/*]
- added confirmation prompts for irreversible actions on the trade screen[/*]
- added confirmation prompt for deleting a uniform[/*]
- added confirmation prompt for convicting a criminal[/*]
- added confirmation prompt for re-running the embark site finder[/*]
- added confirmation prompt for reassigning or clearing zoom hotkeys[/*]
- added confirmation prompt for exiting the uniform customization page without saving[/*]
Removed
- channel-safely: (temporarily) removed due to stability issues with the underlying DF API[/*]
- persist-table: replaced by new dfhack.persistent API[/*]
API
- New plugin API for saving and loading persistent data. See plugins/examples/skeleton.cpp and plugins/examples/persistent_per_save_example.cpp for details[/*]
- Plugin ABI (binary interface) version bump! Any external plugins must be recompiled against this version of DFHack source code in order to load.[/*]
- capitalize_string_words: new MiscUtils function, returns string with all words capitalized[/*]
- Constructions::designateRemove: no longer designates the non-removable "pseudo" construtions that represent the top of walls[/*]
- grab_token_string_pos: new MiscUtils function, used for parsing tokens[/*]
- Items: add item melting logic canMelt(item), markForMelting(item), and cancelMelting(item)[/*]
- Persistence:[list]
- persistent keys are now namespaced by an entity_id (e.g. a player fort site ID)[/*]
- data is now stored one file per entity ID (plus one for the global world) in the DF savegame directory[/*]
Lua
- dfhack.capitalizeStringWords: new function, returns string with all words capitalized[/*]
- dfhack.isSiteLoaded: returns whether a site (e.g. a player fort) is loaded[/*]
- dfhack.items: access to canMelt(item), markForMelting(item), and cancelMelting(item) from Items module[/*]
- dfhack.persistent: new, table-driven API for easier world- and site-associated persistent storage. See the Lua API docs for details.[/*]
- dfhack.world.getCurrentSite: returns the df.world_site instance of the currently loaded fort[/*]
- widgets.Divider: linear divider to split an existing frame; configurable T-junction edges and frame style matching[/*]
Structures
- alert_button_announcement_id: now int32_t vector (contains report ids)[/*]
- announcement_alertst: defined[/*]
- announcement_alert_type: enum defined[/*]
- announcement_type: added alert_type enum attribute[/*]
- feature_init_flags: more enum values defined[/*]
- markup_text_boxst: updated based on information from Bay12[/*]
- markup_text_linkst, markup_text_wordst, script_environmentst: defined[/*]
- occupation: realigned[/*]
- plotinfost: unk23c8_flags renamed to flags, updated based on information from Bay12[/*]
- service_orderst: type defined[/*]
- service_order_type: enum defined[/*]
- soundst: defined[/*]
- viewscreen_choose_start_sitest: fix structure of warning flags -- convert series of bools to a proper bitmask[/*]
- world_raws: unk_v50_1, unk_v50_2, unk_v50_3 renamed to text_set, music, sound[/*]
Documentation
- DFHack developer's guide updated, with refreshed architectural-diagrams[/*]
- UTF-8 text in tool docs is now properly displayed in-game in gui/launcher (assuming that it can be converted to cp-437)[/*]
- installing: Add installation instructions for wineskin on Mac[/*]
- modding-guide: Add examples for script-only and blueprint-only mods that you can upload to DF's Steam Workshop[/*]
This BETA release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
New features in need of feedback and testing
Embark wherever you please
By popular request, you can now laugh at Armok and embark wherever you please.If you run gui/embark-anywhere when youre choosing a site for embark, you can bypass any warnings the game gives you about potential embark locations. Want to embark in an inaccessible location on top of a mountain range? Go for it! Want to try a brief existence in the middle of the ocean? Nobody can stop you! Want to tempt fate by embarking inside of a necromancer tower? !!FUN!!
Any and all consequences of embarking in strange locations are up to you to handle (possibly with other armok tools).
Item bulk management
The item commandline tool allows you to filter items in you fort by various properties (e.g., item type, material, wear-level, quality, ), and perform bulk operations like forbid, dump, melt, and their inverses. With one command, you can hide all boulders that are not in stockpiles, or mark all metal items that are less than masterwork quality for melting!This tool also provides the underlying logic for a planned (but not yet written) GUI-based item management screen.
Difficulty settings and standing orders auto-restore
If you have preferred custom settings for difficulty or standing orders, it is toilsome to have to go in and manually set them for every embark. Do you find yourself having to remember to go turn corpse hauling off for your children? Now, you can set it once, export, and have your settings automatically restored when you start a new embark. It's seamless, and is a huge time-saver for people with highly customized settings!Retire unused locations
If you have locations (taverns, libraries, hospitals, temples) you don't need anymore, they just hang around and clutter up your list. Now, there's a button on the location details screen that you can click to retire the location and get it out of the way.Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- control-panel: new commandline interface for control panel functions[/*]
- gui/biomes: visualize and inspect biome regions on the map[/*]
- gui/embark-anywhere: bypass those pesky warnings and embark anywhere you want to[/*]
- gui/reveal: temporarily unhide terrain and then automatically hide it again when you're ready to unpause[/*]
- gui/teleport: mouse-driven interface for selecting and teleporting units[/*]
- item: perform bulk operations on groups of items.[/*]
- uniform-unstick: (reinstated) force squad members to drop items that they picked up in the wrong order so they can get everything equipped properly[/*]
New Features
- gui/mass-remove: new global keybinding: Ctrl-M while on the fort map[/*]
- gui/settings-manager: save and load (optionally automatically) embark difficulty settings and standing orders[/*]
- sort: search and sort for the "choose unit to elevate to the barony" screen. units are sorted by the number of item preferences they have and the units are annotated with the items that they have preferences for[/*]
- uniform-unstick: add overlay to the squad equipment screen to show a equipment conflict report and give you a one-click button to fix[/*]
- zone: add button to location details page for retiring unused locations[/*]
Fixes
- DFHack tabs (e.g. in gui/control-panel) are now rendered correctly when there are certain vanilla screen elements behind them[/*]
- Dreamfort: fix holes in the "Inside+" burrow on the farming level (burrow autoexpand is interrupted by the pre-dug miasma vents to the surface)[/*]
- When passing map movement keys through to the map from DFHack tool windows, also pass fast z movements (shift-scroll by default)[/*]
- ban-cooking: fix banning creature alcohols resulting in error[/*]
- buildingplan:[list]
- when you save a game and load it again, newly planned buildings are now correctly placed in line after existing planned buildings of the same type[/*]
- show correct number of materials required when laying down areas of constructions and some of those constructions are on invalid tiles[/*]
Misc Improvements
- Dreamfort: put more chairs adjacent to each other to make the tavern more "social"[/*]
- The "PAUSE FORCED" badge will blink briefly to draw attention if the player attempts to unpause when a DFHack tool window requires the game to be paused[/*]
- wherever units are listed in DFHack tools, properties like "agitated" or (-trained-) are now shown[/*]
- autochop: better error output when target burrows are not specified on the commandline[/*]
- autoclothing : now does not consider worn (x) clothing as usable/available, should help with using with tailor at same time[/*]
- buildingplan: add option for preventing constructions from being planned on top of existing constructions[/*]
- burrow: flood fill now requires an explicit toggle before it is enabled to help prevent accidental flood fills[/*]
- confirm:[list]
- updated confirmation dialogs to use clickable widgets and draggable windows[/*]
- added confirmation prompt for right clicking out of the trade agreement screen (so your trade agreement selections aren't lost)[/*]
- added confirmation prompts for irreversible actions on the trade screen[/*]
- added confirmation prompt for deleting a uniform[/*]
- added confirmation prompt for convicting a criminal[/*]
- added confirmation prompt for re-running the embark site finder[/*]
- added confirmation prompt for reassigning or clearing zoom hotkeys[/*]
- added confirmation prompt for exiting the uniform customization page without saving[/*]
Removed
- channel-safely: (temporarily) removed due to stability issues with the underlying DF API[/*]
- persist-table: replaced by new dfhack.persistent API[/*]
API
- New plugin API for saving and loading persistent data. See plugins/examples/skeleton.cpp and plugins/examples/persistent_per_save_example.cpp for details[/*]
- Plugin ABI (binary interface) version bump! Any external plugins must be recompiled against this version of DFHack source code in order to load.[/*]
- capitalize_string_words: new MiscUtils function, returns string with all words capitalized[/*]
- grab_token_string_pos: new MiscUtils function, used for parsing tokens[/*]
- Items: add item melting logic canMelt(item), markForMelting(item), and cancelMelting(item)[/*]
- Persistence:[list]
- persistent keys are now namespaced by an entity_id (e.g. a player fort site ID)[/*]
- data is now stored one file per entity ID (plus one for the global world) in the DF savegame directory[/*]
Lua
- dfhack.capitalizeStringWords: new function, returns string with all words capitalized[/*]
- dfhack.isSiteLoaded: returns whether a site (e.g. a player fort) is loaded[/*]
- dfhack.items: access to canMelt(item), markForMelting(item), and cancelMelting(item) from Items module[/*]
- dfhack.persistent: new, table-driven API for easier world- and site-associated persistent storage. See the Lua API docs for details.[/*]
- dfhack.world.getCurrentSite: returns the df.world_site instance of the currently loaded fort[/*]
- widgets.Divider: linear divider to split an existing frame; configurable T-junction edges and frame style matching[/*]
Structures
- alert_button_announcement_id: now int32_t vector (contains report ids)[/*]
- announcement_alertst: defined[/*]
- announcement_alert_type: enum defined[/*]
- announcement_type: added alert_type enum attribute[/*]
- markup_text_boxst: updated based on information from Bay12[/*]
- markup_text_linkst, markup_text_wordst, script_environmentst: defined[/*]
- occupation: realigned[/*]
- plotinfost: unk23c8_flags renamed to flags, updated based on information from Bay12[/*]
- service_orderst: type defined[/*]
- service_order_type: enum defined[/*]
- soundst: defined[/*]
- viewscreen_choose_start_sitest: fix structure of warning flags -- convert series of bools to a proper bitmask[/*]
- world_raws: unk_v50_1, unk_v50_2, unk_v50_3 renamed to text_set, music, sound[/*]
Documentation
- UTF-8 text in tool docs is now properly displayed in-game in gui/launcher (assuming that it can be converted to cp-437)[/*]
- installing: Add installation instructions for wineskin on Mac[/*]
- modding-guide: Add examples for script-only and blueprint-only mods that you can upload to DF's Steam Workshop[/*]
This BETA release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
New features in need of feedback and testing
gui/control-panel layout overhaul
The control panel received a significant overhaul. Tools are now categorized into subtabs, gathering the automation, bugfix, and gameplay tools into sublists. The file format for storing control panel configuration has changed as well. When you load this release of DFHack, your previous control panel settings should be seamlessly migrated to the new format. The main behavior change is that some things that were only configured globally (like the tools on the now-gone "Maintenance" tab) are now configurable per-fort. There is also more information about what things are. For example, each overlay now has a short description.What do you think of the new layout and tab structure? Is it easier to find the tools you're looking for? Do you feel more confident about enabling new things?
gui/autobutcher mousification
gui/autobutcher finally got updated with modern widgets and mouse gestures. You can now select fields to edit by double clicking on them. The list of livestock now also shows you the total counts per race, and the list of race targets is sortable and filterable. What do you think? Is it easier to use than the previous version? Pro tip: to unmark the slaughter tag from all animals of a particular race, double click on the number in the "Butchering ordered" column.confirm rewrite and new prompts
The confirm framework has been completely rewritten, and thanks to many good suggestions on Reddit , there are now a wide variety of new confirmation prompts that protect you from accidentally invoking irreversible and highly impactful UI operations (like disbanding a squad or deconstructing the trade depot while merchants are using it). Is there anything you think we've missed? What do you think of the new confirmation prompts? Is it easy to pause them when you want to (e.g. when deleting a bunch of manager orders)?uniform-unstick uniform fixing tool
When you look at your squad equipment, there will be a new button that says "Detect conflicts". This will bring up a report of squad equipment problems, such as squad members being assigned to conflicting labors like mining or hunting, or the same piece of equipment being assigned to multiple squad members, or even citizens being members of squads from different forts (this can happen with migrants from forts that you have retired). There's a button at the top of the report that attempts to fix all the problems. Does it work for you? Do your forever-yellow equipment icons finally turn green? Remember to click "Update equipment" after running the fixer so that new equipment gets assigned to units that need it.gui/mass-remove now easier to use
gui/mass-remove is our tool for easily removing multiple buildings and other things. It gained much more configurability, so you can now, for example, have it just remove planned buildings and ignore fully built ones. It can also [u]cancel removal[/u] of buildings and constructions via area select. It has a global hotkey for quick access: Ctrl-M while on the main fort map. Give it a try and tell us if it works well for you when you need to remove a bunch of stuff.gui/reveal for temporary xray vision
I've seen people talk on Reddit and the Discord servers about how to plan your fort layout after you embark but before you unpause. Frequently, I see people advising use of reveal to see where the caverns are so you can plan your fort around them. This is always followed by the warning "Remember to run unreveal before you unpause! Otherwise the caverns get "discovered" early and then if you unreveal later then parts that you dug out will be hidden again and things get weird."To make this process less error-prone, we now have gui/reveal. It reveals the map when it comes up and forces the game to pause while the gui/reveal window is open. You can scan around the map and designate digging for your fort. When you right click on the little gui/reveal window to close it, the map is hidden again, and you can play the game as normal.
You can choose to keep the map revealed, of course, but the more common case where only a temporary reveal is desired is much easier to handle now.
gui/biomes for biome boundary visualization
If you have embarked at the intersection of two or more biomes, you may have trouble finding a place for your farm plots so that you can grow the crops you want. gui/biomes can show you where the boundaries are, and will also give you information about the biomes themselves, such as their wildness rating.gui/teleport for mouse-driven unit teleporting
Another painful process I've seen discussed on Reddit relates to when a unit gets into an impossible situation, like when they dodge into a wall or (sometimes) into the unexplored regions of a cavern and they can't get out. This tends to tank your FPS and make the game unplayable. The commandline teleport command does exist, but it's a multi-step process. You have to find the unit ID of the rogue unit, enable the keyboard cursor, get the position of where to teleport the unit to, and feed all that information into the teleport command. Now, with gui/teleport, it's point and click. It also comes with some handy filters for when you're trying to rescue friendly units from among hostiles. You can area select and only pick out the citizens and friendly units.Announcements
Plugin ABI version bump
If you are developing an external plugin for DFHack, be aware that the plugin binary interface (ABI) has changed to support the new site-local persistence model. See changes to the sample code in https://github.com/DFHack/dfhack/tree/develop/plugins/examples for details.PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- control-panel: new commandline interface for control panel functions[/*]
- gui/biomes: visualize and inspect biome regions on the map[/*]
- gui/reveal: temporarily unhide terrain and then automatically hide it again when you're ready to unpause[/*]
- gui/teleport: mouse-driven interface for selecting and teleporting units[/*]
- uniform-unstick: (reinstated) force squad members to drop items that they picked up in the wrong order so they can get everything equipped properly[/*]
New Features
- gui/mass-remove: new global keybinding: Ctrl-M while on the fort map[/*]
- sort: search and sort for the "choose unit to elevate to the barony" screen. units are sorted by the number of item preferences they have and the units are annotated with the items that they have preferences for[/*]
- uniform-unstick: add overlay to the squad equipment screen to show a equipment conflict report and give you a one-click button to fix[/*]
Fixes
- When passing map movement keys through to the map from DFHack tool windows, also pass fast z movements (shift-scroll by default)[/*]
- ban-cooking: fix banning creature alcohols resulting in error[/*]
- confirm: properly detect clicks on the remove zone button even when the unit selection screen is also open (e.g. the vanilla assign animal to pasture panel)[/*]
- getplants: fix crash when processing mod-added plants with invalid materials[/*]
- misery: fix error when changing the misery factor[/*]
- quickfort: if a blueprint specifies an up/down stair, but the tile the blueprint is applied to cannot make an up stair (e.g. it has already been dug out), still designate a down stair if possible[/*]
- reveal: now avoids revealing blocks that contain divine treasures, encased horrors, and deep vein hollows (so the surprise triggers are not triggered prematurely)[/*]
- sort:[list]
- fix mouse clicks falling through the squad assignment overlay panel when clicking on the panel but not on a clickable widget[/*]
- fix potential crash when removing jobs directly from the Tasks info screen[/*]
Misc Improvements
- The "PAUSE FORCED" badge will blink briefly to draw attention if the player attempts to unpause when a DFHack tool window requires the game to be paused[/*]
- wherever units are listed in DFHack tools, properties like "agitated" or (-trained-) are now shown[/*]
- autochop: better error output when target burrows are not specified on the commandline[/*]
- autoclothing : now does not consider worn (x) clothing as usable/available, should help with using with tailor at same time[/*]
- burrow: flood fill now requires an explicit toggle before it is enabled to help prevent accidental flood fills[/*]
- confirm:[list]
- updated confirmation dialogs to use clickable widgets and draggable windows[/*]
- added confirmation prompt for right clicking out of the trade agreement screen (so your trade agreement selections aren't lost)[/*]
- added confirmation prompts for irreversible actions on the trade screen[/*]
- added confirmation prompt for deleting a uniform[/*]
- added confirmation prompt for convicting a criminal[/*]
- added confirmation prompt for re-running the embark site finder[/*]
- added confirmation prompt for reassigning or clearing zoom hotkeys[/*]
- added confirmation prompt for exiting the uniform customization page without saving[/*]
Removed
- channel-safely: (temporarily) removed due to stability issues with the underlying DF API[/*]
- persist-table: replaced by new dfhack.persistent API[/*]
API
- New plugin API for saving and loading persistent data. See plugins/examples/skeleton.cpp and plugins/examples/persistent_per_save_example.cpp for details[/*]
- Plugin ABI (binary interface) version bump! Any external plugins must be recompiled against this version of DFHack source code in order to load.[/*]
- capitalize_string_words: new MiscUtils function, returns string with all words capitalized[/*]
- grab_token_string_pos: new MiscUtils function, used for parsing tokens[/*]
- Items: add item melting logic canMelt(item), markForMelting(item), and cancelMelting(item)[/*]
- Persistence:[list]
- persistent keys are now namespaced by an entity_id (e.g. a player fort site ID)[/*]
- data is now stored one file per entity ID (plus one for the global world) in the DF savegame directory[/*]
Lua
- dfhack.capitalizeStringWords: new function, returns string with all words capitalized[/*]
- dfhack.isSiteLoaded: returns whether a site (e.g. a player fort) is loaded[/*]
- dfhack.items: access to canMelt(item), markForMelting(item), and cancelMelting(item) from Items module[/*]
- dfhack.persistent: new, table-driven API for easier world- and site-associated persistent storage. See the Lua API docs for details.[/*]
- dfhack.world.getCurrentSite: returns the df.world_site instance of the currently loaded fort[/*]
- widgets.Divider: linear divider to split an existing frame; configurable T-junction edges and frame style matching[/*]
Structures
- alert_button_announcement_id: now int32_t vector (contains report ids)[/*]
- announcement_alertst: defined[/*]
- announcement_alert_type: enum defined[/*]
- announcement_type: added alert_type enum attribute[/*]
- markup_text_boxst: updated based on information from Bay12[/*]
- markup_text_linkst, markup_text_wordst, script_environmentst: defined[/*]
- occupation: realigned[/*]
- plotinfost: unk23c8_flags renamed to flags, updated based on information from Bay12[/*]
- service_orderst: type defined[/*]
- service_order_type: enum defined[/*]
- soundst: defined[/*]
- world_raws: unk_v50_1, unk_v50_2, unk_v50_3 renamed to text_set, music, sound[/*]
Documentation
- UTF-8 text in tool docs is now properly displayed in-game in gui/launcher (assuming that it can be converted to cp-437)[/*]
- installing: Add installation instructions for wineskin on Mac[/*]
- modding-guide: Add examples for script-only and blueprint-only mods that you can upload to DF's Steam Workshop[/*]
This BETA release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
New features in need of feedback and testing
gui/control-panel layout overhaul
The control panel received a significant overhaul. Tools are now categorized into subtabs, gathering the automation, bugfix, and gameplay tools into sublists. The file format for storing control panel configuration has changed as well. When you load this release of DFHack, your previous control panel settings should be seamlessly migrated to the new format.What do you think of the new layout and tab structure? Is it easier to find the tools you're looking for? Do you feel more confident about enabling new things?
gui/autobutcher mousification
gui/autobutcher finally got updated with modern widgets and mouse gestures. You can now select fields to edit by double clicking on them. The list of livestock now also shows you the total counts per race, and the list of race targets is sortable and filterable. What do you think? Is it easier to use than the previous version? Pro tip: to unmark the slaughter tag from all animals of a particular race, double click on the number in the "Butchering ordered" column.confirm rewrite and new prompts
The confirm framework has been completely rewritten, and thanks to many good suggestions on Reddit , there are now a wide variety of new confirmation prompts that protect you from accidentally invoking irreversible and highly impactful UI operations (like disbanding a squad or deconstructing the trade depot while merchants are using it). Is there anything you think we've missed? What do you think of the new confirmation prompts? Is it easy to pause them when you want to (e.g. when deleting a bunch of manager orders)?uniform-unstick uniform fixing tool
When you look at your squad equipment, there will be a new button that says "Detect conflicts". This will bring up a report of squad equipment problems, such as squad members being assigned to conflicting labors like mining or hunting, or the same piece of equipment being assigned to multiple squad members. There's a button at the top of the report that attempts to fix all the problems. Does it work for you? Do your forever-yellow equipment icons finally turn green? Remember to click "Update equipment" after running the fixer so that new equipment gets assigned to units that need it.gui/mass-remove now easier to use
gui/mass-remove is our tool for easily removing multiple buildings and other things. It gained much more configurability, so you can now, for example, have it just remove planned buildings and ignore fully built ones. It now also has a global hotkey for quick access: Ctrl-M while on the main fort map. Give it a try and tell us if it works well for you when you need to remove a bunch of stuff.Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New Tools
- control-panel: new commandline interface for control panel functions[/*]
- uniform-unstick: (reinstated) force squad members to drop items that they picked up in the wrong order so they can get everything equipped properly[/*]
New Features
- gui/mass-remove: new global keybinding: Ctrl-M while on the fort map[/*]
- sort: search and sort for the "choose unit to elevate to the barony" screen. units are sorted by the number of item preferences they have and the units are annotated with the items that they have preferences for[/*]
- uniform-unstick: add overlay to the squad equipment screen to show a equipment conflict report and give you a one-click button to fix[/*]
Fixes
- ban-cooking: fix banning creature alcohols resulting in error[/*]
- confirm: properly detect clicks on the remove zone button even when the unit selection screen is also open (e.g. the vanilla assign animal to pasture panel)[/*]
- misery: fix error when changing the misery factor[/*]
- reveal: now avoids revealing blocks that contain divine treasures, encased horrors, and deep vein hollows (so the surprise triggers are not triggered prematurely)[/*]
- sort:[list]
- fix mouse clicks falling through the squad assignment overlay panel when clicking on the panel but not on a clickable widget[/*]
- fix potential crash when removing jobs directly from the Tasks info screen[/*]
Misc Improvements
- wherever units are listed in DFHack tools, properties like "agitated" or (-trained-) are now shown[/*]
- autochop: better error output when target burrows are not specified on the commandline[/*]
- confirm:[list]
- updated confirmation dialogs to use clickable widgets and draggable windows[/*]
- added confirmation prompt for right clicking out of the trade agreement screen (so your trade agreement selections aren't lost)[/*]
- added confirmation prompts for irreversible actions on the trade screen[/*]
- added confirmation prompt for deleting a uniform[/*]
- added confirmation prompt for convicting a criminal[/*]
- added confirmation prompt for re-running the embark site finder[/*]
- added confirmation prompt for reassigning or clearing zoom hotkeys[/*]
- added confirmation prompt for exiting the uniform customization page without saving[/*]
Structures
- alert_button_announcement_id: now int32_t vector (contains report ids)[/*]
- announcement_alertst: defined[/*]
- announcement_alert_type: enum defined[/*]
- announcement_type: added alert_type enum attribute[/*]
- markup_text_boxst: updated based on information from Bay12[/*]
- markup_text_linkst, markup_text_wordst, script_environmentst: defined[/*]
- plotinfost: unk23c8_flags renamed to flags, updated based on information from Bay12[/*]
- soundst: defined[/*]
- world_raws: unk_v50_1, unk_v50_2, unk_v50_3 renamed to text_set, music, sound[/*]
Documentation
- UTF-8 text in tool docs is now properly displayed in-game in gui/launcher (assuming that it can be converted to cp-437)[/*]
- installing: Add installation instructions for winskin on Mac[/*]
- modding-guide: Add examples for script-only and blueprint-only mods that you can upload to DF's Steam Workshop[/*]
This release is compatible with all 50.11 distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
This is a quick release that addresses some small but important bug fixes and quality of life improvements. See the Changelog below for details.
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Changelog
New tools
- build-now: (reinstated) instantly complete unsuspended buildings that are ready to be built[/*]
Fixes
- RemoteServer: don't shut down the socket prematurely, allowing continuing connections from, for example, dfhack-run[/*]
- buildingplan: fix choosing the wrong mechanism (or something that isn't a mechanism) when linking a lever and manually choosing a mechanism, but then canceling the selection[/*]
- combine: prevent stack sizes from growing beyond quantities that you would normally see in vanilla gameplay[/*]
- sort:[list]
- fix potential crash when exiting and re-entering a creatures subtab with a search active[/*]
- prevent keyboard keys from affecting the UI when search is active and multiple keys are hit at once[/*]
Misc Improvements
- buildingplan:[list]
- save magma safe mechanisms for when magma safety is requested when linking levers and pressure plates to targets[/*]
- when choosing mechanisms for linking levers/pressure plates, filter out unreachable mechanisms[/*]
New Tools
- build-now: (reinstated) instantly complete unsuspended buildings that are ready to be built[/*]
Fixes
- RemoteServer: don't shut down the socket prematurely, allowing continuing connections from, for example, dfhack-run[/*]
- buildingplan: fix choosing the wrong mechanism (or something that isn't a mechanism) when linking a lever and manually choosing a mechanism, but then canceling the selection[/*]
- sort:[list]
- fix potential crash when exiting and re-entering a creatures subtab with a search active[/*]
- prevent keyboard keys from affecting the UI when search is active and multiple keys are hit at once[/*]
Misc Improvements
- buildingplan:[list]
- save magma safe mechanisms for when magma safety is requested when linking levers and pressure plates to targets[/*]
- when choosing mechanisms for linking levers/pressure plates, filter out unreachable mechanisms[/*]
This release is compatible with all distributions of Dwarf Fortress v50.11: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Selection dimension indicator

At long last, we have a measurement tooltip that follows the cursor when you are designating an area, for example when painting burrows, stockpiles, or digging designations.

Choose mechanisms for linking

Have you ever needed to link a lever to a floodgate or bridge that will be holding back magma, and then been frustrated when you found you had no control over whether a magma-safe mechanism was chosen to make the link?
The mechanism linking dialog is now integrated with buildingplan, giving you quick filters for autoselecting a mechanism based on how much heat it will need to withstand or letting you choose a specific mechanism from your stock. This feature is available for linking both levers and pressure plates.

Burrows!
Burrows got a lot of attention in this release. In DF, burrows are useful for defining areas that limit:- where assigned units perform tasks[/*]
- where civilians can go for protection during an emergency (using gui/civ-alert)[/*]
- where woodcutters harvest (or clearcut) trees (using gui/autochop)[/*]
- where squad members gather to defend against threats[/*]
Also, if you have your units assigned to burrows for job purposes, it's also difficult to manage who is assigned where. Notably, if a unit dies while assigned to a burrow, you can't [u]unassign[/u] that (dead) unit from the burrow and your count of assigned units will be inaccurate.
In light of all this, DFHack now provides a wide range of new burrow-related capabilities that should make them more fun and efficient to use.
Special thanks to Black-Talon for excellent suggestions and significant help with testing these features!
3D box select

First of all, the vanilla box select that was limited to painting a single z-level at a time is replaced with a 3D selection box that can paint a burrow across your fort's z-levels at once!

Flood fill

Second, if you double click on a tile, you'll get a handy flood fill. This means that if you double click on the floor inside of your fort, the selection will flood to your entire fort on that level. The selection will include the adjacent walls so they can be smoothed and engraved by units that are assigned to the burrow itself.

Hold down Shift when you double click and you'll allow the flood to expand across z-levels. You can define a burrow for your entire fort with one shift-double click! The flood stops at forbidden doors and closed bridges, so it won't include the caverns if you have them blocked off. If you do accidentally include the caverns, erase a boundary between your fort and the caverns and shift-double click on the cavern side to remove just the cavern tiles from your burrow, just like the bucket tool in a painting app.

Auto-expanding burrows

Third, you can set a burrow to auto-expand as you dig. If you name a burrow with a trailing plus symbol (+), like "Inside+", then as your miners dig, the burrow will automatically expand to include the newly exposed tiles. Make sure to include the surrounding walls in your original burrow designation so the auto expansion checks know which wall tiles to monitor.

Search filters

Fourth, there are updated unit search and filters for easier unit burrow assignment. The search widgets on the burrow assignment screen have gained the ability to filter by burrow membership, so you can easily add or remove one burrow's members when working with another burrow.

Supporting tools

There are also supporting tools that make burrows more useful. If you turn on dead-units-burrow in the gui/control-panel "Maintenance" tab, then units will automatically be removed from your burrows when they die. The quickfort blueprinting tool can now create new burrows and add tiles to existing ones. It can even register a burrow with gui/civ-alert or autochop, saving you some manual steps when you are laying down plans for your fortress. The Dreamfort set of quickfort blueprints takes advantage of this to set up more of your fort for you automatically.

Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor). We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Generated release notes
New Tools
- burrow: (reinstated) automatically expand burrows as you dig[/*]
- sync-windmills: synchronize or randomize movement of active windmills[/*]
- trackstop: (reimplemented) integrated overlay for changing track stop and roller settings after construction[/*]
New Features
- buildingplan: allow specific mechanisms to be selected when linking levers or pressure plates[/*]
- burrow: integrated 3d box fill and 2d/3d flood fill extensions for burrow painting mode[/*]
- fix/dead-units: gained ability to scrub dead units from burrow membership lists[/*]
- gui/design: show selected dimensions next to the mouse cursor when designating with vanilla tools, for example when painting a burrow or designating digging[/*]
- prospect: can now give you an estimate of resources from the embark screen. hover the mouse over a potential embark area and run prospect.[/*]
- quickfort: new burrow blueprint mode for designating or manipulating burrows[/*]
- sort: military and burrow membership filters for the burrow assignment screen[/*]
- unforbid: now ignores worn and tattered items by default (X/XX), use -X to bypass[/*]
Fixes
- RemoteServer: continue to accept connections as long as the listening socket is valid instead of closing the socket after the first disconnect[/*]
- buildingplan: edit filter interface now uses ctrl-x to reset the filter to avoid conflict with increasing the filter's minimum quality (shift-x)[/*]
- caravan: price of vermin swarms correctly adjusted down. a stack of 10000 bees is worth 10, not 10000[/*]
- emigration: fix clearing of work details assigned to units that leave the fort[/*]
- gui/unit-syndromes: show the syndrome names properly in the UI[/*]
- sort: when filtering out already-established temples in the location assignment screen, also filter out the "No specific deity" option if a non-denominational temple has already been established[/*]
- stockpiles: hide configure and help buttons when the overlay panel is minimized[/*]
- tailor: fix crash on Linux where scanned unit is wearing damaged non-clothing (e.g. a crown)[/*]
Misc Improvements
- buildingplan:[list]
- display how many items are available on the planner panel[/*]
- make it easier to build single-tile staircases of any shape (up, down, or up/down)[/*]
Removed
- gui/control-panel:[list]
- removed always-on system services from the System tab: buildingplan, confirm, logistics, and overlay. The base services should not be turned off by the player. Individual confirmation prompts can be managed via gui/confirm, and overlays (including those for buildingplan and logistics) are managed on the control panel Overlays tab.[/*]
- removed autolabor from the Fort and Autostart tabs. The tool does not function correctly with the new labor types, and is causing confusion. You can still enable autolabor from the commandline with enable autolabor if you understand and accept its limitations.[/*]
API
- Buildings:: completebuild: used to link a newly created building into the world[/*]
- Burrows:: setAssignedUnit: now properly handles inactive burrows[/*]
- Gui:: getMousePos: now takes an optional allow_out_of_bounds parameter so coordinates can be returned for mouse positions outside of the game map (i.e. in the blank space around the map)[/*]
- Gui:: revealInDwarfmodeMap: gained highlight parameter to control setting the tile highlight on the zoom target[/*]
- Maps:: getWalkableGroup: get the walkability group of a tile[/*]
- Units:: getReadableName: now returns the [u]untranslated[/u] name[/*]
Lua
- dfhack.buildings.completebuild: expose new module API[/*]
- dfhack.gui.getMousePos: support new optional allow_out_of_bounds parameter[/*]
- dfhack.gui.revealInDwarfmodeMap: gained highlight parameter to control setting the tile highlight on the zoom target[/*]
- dfhack.maps.getWalkableGroup: get the walkability group of a tile[/*]
- gui.FRAME_THIN: a panel frame suitable for floating tooltips[/*]
Structures
- burrow: add new graphics mode texture and color fields[/*]
- job_item_flags3: identify additional flags[/*]
Documentation
- Document the Lua API for the dfhack.world module[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Search! Search! Search!
We finally have search widgets for many of the screens with long lists. No longer will you need to scroll endlessly to find Bim Zasitisos, Cook. You can just type "bim", or "cook", or maybe "knifedales", since that's what "Zasitisos" translates to and it's the name you see in some contexts. You can also search by the name of the job they're currently doing. Or hey, search for "forgotten" on the "Others" tab to see which forgotten beasts you've actually forgotten about in the caverns:

For each screen, you can click on the search field to focus it or hit the keyboard hotkey (Alt-s) and start typing. Just like all DFHack text entry fields, you can hit Ctrl-x to clear the text or Ctrl-v to paste from your operating system clipboard.
Remember that you can search for more than just the name. Some examples:
- Search for "steel short sword" when choosing artifacts to send a raid for[/*]
- Search for "appraisal" when choosing a broker[/*]
The Justice tabs in particular received the most filtering capabilities. You can now easily see just the high-risk visitors you should be paying attention to (e.g. intelligent undead or professional criminals).
In all, DFHack has added search widgets to more than 30 screens/lists:
- Info -> Creatures -> Citizens[/*]
- Info -> Creatures -> Pets/Livestock[/*]
- Info -> Creatures -> Pets/Livestock -> Overall Training[/*]
- Info -> Creatures -> Pets/Livestock -> Assign Trainer[/*]
- Info -> Creatures -> Others[/*]
- Info -> Creatures -> Dead/Missing[/*]
- Info -> Tasks[/*]
- Info -> Labor -> Work details[/*]
- Info -> Nobles -> Choose candidate[/*]
- Info -> Objects -> Artifacts[/*]
- Info -> Objects -> Symbols[/*]
- Info -> Objects -> Named objects[/*]
- Info -> Objects -> Written content[/*]
- Info -> Justice -> * -> Interrogate[/*]
- Info -> Justice -> * -> Convict[/*]
- Location selector -> Temple[/*]
- Location selector -> Guildhall[/*]
- Unit selector -> Bedroom[/*]
- Unit selector -> Office[/*]
- Unit selector -> Dining hall[/*]
- Unit selector -> Tomb[/*]
- Unit selector -> Workshop worker[/*]
- Unit selector -> Occupation[/*]
- Unit selector -> Burrow[/*]
- Unit selector -> Squad kill order[/*]
- Unit selector -> Squad assignment[/*]
- Stoneworker's workshop -> Engrave slab -> Choose unit to memorialize[/*]
- Zone -> Pasture -> Assignment[/*]
- Zone -> Pit -> Assignment[/*]
- Cage -> Assignment[/*]
- Restraint -> Assignment[/*]
- Pedestal -> Choose item for display[/*]
- Trade depot -> Bring items to depot[/*]
- Trade depot -> Trade[/*]
Preserve tomb assignments
Have you noticed that your nobles don't actually get buried in the nice tombs you assigned to them while they were alive and demanding nice tombs? This is because DF loses track of that assignment when they die, which is amusingly and tragically ironic.
Enable preserve-tombs in the DFHack gui/control-panel ("Fort" and "Autostart" tabs) to keep track of those tomb assignments and ensure they are actually used for their intended purposes.
Single click collapse all for stocks screen
Often, you just want to know how many of each category of thing you have. The group info bars have that information, but you need to click on each of them to collapse them to see more than one of them at a time. Now there is a solution to collapse all visible groups with one click. There is now a button off the right side of the stocks panel that says "collapse all". Click that button or hit the hotkey (Ctrl-x) to collapse everything down to a single line each.

Automatic tomb zone creation
Setting up tombs is a chore. You have to place the coffins, and then for each coffin, you have to declare a Tomb zone. With the burial command, you can get those Tomb zones created for you automatically. Just run the command after you place the coffins to get the Tomb zones for free. No extra clicks!
Get notified for stranded citizens
Have you ever closed off the caverns and only later noticed that you had dwarves trapped down there? With warn-stranded, you can get notified quickly that you have citizens that can't reach their peers. You'll then have enough time to organize a rescue mission before they start starving. It also catches units stuck in trees or in pits.
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor. We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Generated release notes
New Tools
- add-recipe: (reinstated) add reactions to your civ (e.g. for high boots if your civ didn't start with the ability to make high boots)[/*]
- burial: (reinstated) create tomb zones for unzoned coffins[/*]
- fix/corrupt-jobs: prevents crashes by automatically removing corrupted jobs[/*]
- preserve-tombs: keep tombs assigned to units when they die[/*]
- spectate: (reinstated) automatically follow dwarves, cycling among interesting ones[/*]
New Scripts
- warn-stranded: new repeatable maintenance script to check for stranded units, similar to warn-starving[/*]
New Features
- burial: new options to configure automatic burial and limit scope to the current z-level[/*]
- drain-aquifer:[list]
- gained ability to drain just above or below a certain z-level[/*]
- new option to drain all layers except for the first N aquifer layers, in case you want some aquifer layers but not too many[/*]
Fixes
- buildingplan:[list]
- remove bars of ash, coal, and soap as valid building materials to match v50 rules[/*]
- fix incorrect required items being displayed sometimes when switching the planner overlay on and off[/*]
Misc Improvements
- Help icons added to several complex overlays. clicking the icon runs gui/launcher with the help text in the help area[/*]
- buildingplan:[list]
- support filtering cages by whether they are occupied[/*]
- show how many items you need to make when planning buildings[/*]
Removed
- FILTER_FULL_TEXT: moved from gui.widgets to utils; if your full text search preference is lost, please reset it in gui/control-panel[/*]
API
- added Items::getCapacity, returns the capacity of an item as a container (reverse-engineered), needed for combine[/*]
Lua
- added dfhack.items.getCapacity to expose the new module API[/*]
- added GRAY color aliases for GREY colors[/*]
- utils.search_text: text search routine (generalized from internal widgets.FilteredList logic)[/*]
Structures
- add new globals: translate_name, buildingst_completebuild[/*]
- artifact_rumor_locationst: defined[/*]
- viewscreen_worldst: defined types for view_mode and artifacts_arl fields[/*]
- world_view_mode_type: defined[/*]
Documentation
- unavailable tools are no longer listed in the tag indices in the online docs[/*]
Q: How do I download DFHack?
A: Either add to your Steam library from our Steam page or scroll to the latest release on our GitHub releases page , expand the "Assets" list, and download the file for your platform (e.g. dfhack-XX.XX-rX-Windows-64bit.zip.This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Search! Search! Search!
We finally have search widgets for many of the screens with long lists. No longer will you need to scroll endlessly to find Bim Zasitisos, Cook. You can just type "bim", or "cook", or maybe "knifedales", since that's what "Zasitisos" translates to and it's the name you see in some contexts.Search units on the Citizens tab:

Search (and filter) interview candidates on the Justice tab:

Search artifacts on the world screen (for raids):

Search religions for dedicating a new temple:

So far, here are the screens that are covered:
- Info -> Creatures -> Citizens[/*]
- Info -> Creatures -> Pets/Livestock[/*]
- Info -> Creatures -> Pets/Livestock -> Overall Training[/*]
- Info -> Creatures -> Pets/Livestock -> Assign Trainer[/*]
- Info -> Creatures -> Others[/*]
- Info -> Creatures -> Dead/Missing[/*]
- Info -> Tasks[/*]
- Info -> Labor -> Work details[/*]
- Info -> Objects -> Artifacts[/*]
- Info -> Objects -> Symbols[/*]
- Info -> Objects -> Named objects[/*]
- Info -> Objects -> Written content[/*]
- Info -> Justice -> * -> Interrogate[/*]
- Info -> Justice -> * -> Convict[/*]
- Location selector -> Temple[/*]
- Location selector -> Guildhall[/*]
- Unit selector -> Bedroom[/*]
- Unit selector -> Office[/*]
- Unit selector -> Dining hall[/*]
- Unit selector -> Tomb[/*]
- Unit selector -> Workshop worker[/*]
- Unit selector -> Occupation[/*]
- Unit selector -> Burrow[/*]
- Unit selector -> Squad kill order[/*]
- Unit selector -> Squad assignment[/*]
- Zone -> Pasture -> Animal assignment[/*]
- Zone -> Pit -> Animal assignment[/*]
- Building -> Cage -> Animal assignment[/*]
- Building -> Restraint -> Animal assignment[/*]
Preserve tomb assignments
Have you noticed that your nobles don't actually get buried in the nice tombs you assigned to them while they were alive and demanding nice tombs? This is because DF loses track of that assignment when they die, which is amusingly and tragically ironic.Enable preserve-tombs in the DFHack gui/control-panel ("Fort" and "Autostart" tabs) to keep track of those tomb assignments and ensure they are actually used for their intended purposes.
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor. We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Generated release notes
New Tools
- add-recipe: (reinstated) add reactions to your civ (e.g. for high boots if your civ didn't start with the ability to make high boots)[/*]
- preserve-tombs: keep tombs assigned to units when they die[/*]
- spectate: (reinstated) automatically follow dwarves, cycling among interesting ones[/*]
New Features
- drain-aquifer:[list]
- gained ability to drain just above or below a certain z-level[/*]
- new option to drain all layers except for the first N aquifer layers, in case you want some aquifer layers but not too many[/*]
Fixes
- gui/sandbox: fix scrollbar moving double distance on click[/*]
- hide-tutorials: fix the embark tutorial prompt sometimes not being skipped[/*]
- suspendmanager: fix errors when constructing near the map edge[/*]
- zone: don't show animal assignment link for cages and restraints linked to dungeon zones (which aren't normally assignable)[/*]
Misc Improvements
- orders: recheck command now only resets orders that have conditions that can be rechecked[/*]
- overlay: allow overlay_onupdate_max_freq_seconds to be dynamically set to 0 for a burst of high-frequency updates[/*]
- sort: added help button for squad assignment search/filter/sort[/*]
- zone: animals trained for war or hunting are now labeled as such in animal assignment screens[/*]
Removed
- FILTER_FULL_TEXT: moved from gui.widgets to utils; if your full text search preference is lost, please reset it in gui/control-panel[/*]
Lua
- added GRAY color aliases for GREY colors[/*]
- utils.search_text: text search routine (generalized from internal widgets.FilteredList logic)[/*]
Structures
- add new global: translate_name[/*]
- artifact_rumor_locationst: defined[/*]
- viewscreen_worldst: defined types for view_mode and artifacts_arl fields[/*]
- world_view_mode_type: defined[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Highlights
Display furniture item selector

The vanilla screen for choosing which items you want to display on a pedestal or display case requires quite a bit of scrolling and clicking to use. It is also hard to figure out how the items you have assigned will affect the value of the room. There is now an alternate dialog that should make the process much easier and less opaque:

You can search items by name (including book titles), filter by quality (e.g. see only artifacts), and sort by name, value, or where the item is currently assigned for display.
If the pedestal is in a guildhall or temple, there is also a convenient indicator for whether you've added enough value to bump the guildhall or temple to the next tier. For example, if you need to provide your citizens with a grand guildhall, the indicator will change from "Guildhall" to "Grand guildhall" when you've assigned items with enough value.
Scrolling for the unit list when embarking

Some people have already experimented with the newly re-added startdwarf script, which allows you to change the number of dwarves you embark with, and have found that the DF embark screen doesn't support scrolling for the unit list. This means that if you embark with more dwarves than can fit on your screen, you cannot select them to configure their skills.
We now have a DFHack-added scrollbar so you can scroll up and down through the list and configure each of your extra dwarves:

Note that the vanilla screen was not intended to be scrolled, so the behavior of the list is a little odd. When you select a dwarf to configure, the list will jump so that the dwarf you selected is at the top of the screen. This can be a little disorienting, but the dwarf is still configurable, and all dwarves are accessible.
Announcements
Mouse event definitions have changed for scripts
This only affects modders and players who are writing their own DFHack scripts and who react to mouse events like _MOUSE_L or _MOUSE_L_DOWN. Everyone else can skip reading this.Back in the pre-v50 days, when the mouse was much less used in DF, I made a mistake in how I interpreted DF's handling of mouse button state. The result is that DFHack has been representing mouse state incorrectly to the Lua scripts. This hasn't been much of a problem since all the scripts were written to misinterpret the state the same way. However, now that DFHack tools are integrating more closely with the vanilla DF UI, the difference in interpretation of mouse state is causing conflicts.
The _MOUSE_L event now correctly fires when the mouse button has just been clicked, and the _MOUSE_L_DOWN event now correctly fires when the mouse button is held down. The previous definitions were backwards.
If you have written your own script and you refer to mouse events in your onInput(keys) function, you can update to the new definitions by swapping references to _MOUSE_L with _MOUSE_L_DOWN and vice versa. Similarly for _MOUSE_R and _MOUSE_M, if you happen to use them. My apologies for breaking scripts. This is something we try not to do very often, though hopefully this change will make up for the hassle by allowing scripts to integrate more smoothly with vanilla DF widgets. Thanks!
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor. We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Generated release notes
New Tools
- startdwarf: (reinstated) set number of starting dwarves[/*]
- tubefill: (reinstated) replenishes mined-out adamantine[/*]
New Features
- A new searchable, sortable, filterable dialog for selecting items for display on pedestals and display cases[/*]
- startdwarf: overlay scrollbar so you can scroll through your starting dwarves if they don't all fit on the screen[/*]
Fixes
- EventManager: Unit death event no longer misfires on units leaving the map[/*]
- autolabor: ensure vanilla work details are reinstated when the fort or the plugin is unloaded[/*]
- suspendmanager: fixed a bug where floor grates, bars, bridges etc. wouldn't be recognised as walkable, leading to unnecessary suspensions in certain cases.[/*]
- dfhack.TranslateName(): fixed crash on certain invalid names, which affected warn-starving[/*]
Misc Improvements
- EventManager:[list]
- guard against potential iterator invalidation if one of the event listeners were to modify the global data structure being iterated over[/*]
- for onBuildingCreatedDestroyed events, changed firing order of events so destroyed events come before created events[/*]
Lua
- mouse key events are now aligned with internal DF semantics: _MOUSE_L indicates that the left mouse button has just been pressed and _MOUSE_L_DOWN indicates that the left mouse button is being held down. similarly for _MOUSE_R and _MOUSE_M. 3rd party scripts may have to adjust.[/*]
Structures
- add new global: start_dwarf_count[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Announcements
Linux support
As of DF 50.10, both DF and DFHack can run natively on Linux. If you're subscribed to DF and DFHack on Steam, here's how to switch over:- In the Steam client, open the properties for Dwarf Fortress[/*]
- Select the "Compatibility" section and deselect "Force the use of a specific Steam Play compatibility tool"[/*]
- DF should update with the Linux native version[/*]
Then, turn off the compatibility layer for DFHack. dfhooks.dll will disappear and you'll get libdfhooks.so and the dfhack script in its place.
Sometimes, Steam says you've got the Linux version, but when you look you see you still have Dwarf Fortress.exe instead of dwarfort. Try re-enabling the Proton compatibility layer and then turning off the compatibility layer again until it "sticks".
The DFHack terminal console works differently on Linux
You can run DF with DFHack from the Steam client without issues. However, if you want an external DFHack terminal console, you have to run from the commandline with the ./dfhack launcher script.
On Windows (or in Windows emulation), you could use the show command to pop up an external DFHack terminal console. You would use this for running DFHack commands from outside the game window, and the external terminal is the only way to run commandline-interactive DFHack commands like tiletypes and the interactive mode of the lua interpreter.
Linux has a different method of providing a terminal console. You can't spawn it dynamically like you can on Windows. You have to start DF from the commandline, and the terminal from which you ran ./dfhack [u]becomes[/u] the terminal console. This should be a familiar process to many Linux users (most Linux commands work this way), but the change is jarring if you're not expecting it. We're also looking into providing a virtual console that doesn't depend on an existing system console so you can still get a console even if you run from Steam, but that work is far from being completed.
You can still launch from Steam if you want to. Many tools log information and errors to the console, though, so if you run into strange issues, it might be useful to try running from the commandline to see if there is diagnostic output there that can help you.
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor. We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Highlights
This is just a compatibility release; please see the release notes for 50.09-r3 and 50.09-r4 for significant recent changes to DFHack.Generated release notes
Fixes
- 'fix/general-strike: fix issue where too many seeds were getting planted in farm plots[/*]
- Linux launcher: allow Steam Overlay and game streaming to function[/*]
- autobutcher: don't ignore semi-wild units when marking units for slaughter[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
For Linux support, please configure your Steam client to subscribe to the DF beta release branch and the DFHack 50.10-beta release branch.
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Announcements
Please see the release notes for DFHack 50.09-r3 for extensive information on Linux support.PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor. We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Highlights
Squad assignment sort improvements


Units now have a rating displayed next to them. The ratings are the values used for the current sort, and are colored based on how "good" the unit is according to the sort option. The "stress face" graphics are used for the "stress" and "need for training" sorts to indicate how dire the need is.
In addition to the new "need for training" sort, there are also a few new filters. You can now choose whether mothers with infants, units with weak mental fortitude (who would then become unduly stressed by military service), and critically injured units are shown as candidates.
Smooth/carve designation indicators for ASCII mode


ASCII mode has been missing any indication of smoothing/engraving/track carving/fortification carving designations. DFHack will now automatically add in visual indicators so you can see what you have designated. They will flash between an icon indicating the designation type and the priority you have set the designation for, similar to how the information was displayed in older versions of DF.
Generated release notes
New Features
- dig: new overlay for ASCII mode that visualizes designations for smoothing, engraving, carving tracks, and carving fortifications[/*]
Fixes
- buildingplan: make the construction dimensions readout visible again[/*]
- gui/mod-manager: don't continue to display overlay after the raws loading progress bar appears[/*]
- seedwatch: fix a crash when reading data saved by very very old versions of the plugin[/*]
Misc Improvements
- autofish: changed --raw argument format to allow explicit setting to on or off[/*]
- caravan: move goods to depot screen can now see/search/trade items inside of barrels and pots[/*]
- gui/launcher: show tagged tools in the autocomplete list when a tag name is typed[/*]
- sort:[list]
- add sort option for training need on squad assignment screen[/*]
- filter mothers with infants, units with weak mental fortitude, and critically injured units on the squad assignment screen[/*]
- display a rating relative to the current sort order next to the visible units on the squad assignment screen[/*]
API
- overlay: overlay widgets can now declare a version attribute. changing the version of a widget will reset its settings to defaults. this is useful when changing the overlay layout and old saved positions will no longer be valid.[/*]
Lua
- argparse.boolean: convert arguments to lua boolean values.[/*]
Structures
- Identified a number of previously anonymous virtual methods in itemst[/*]
Documentation
- add instructions for downloading development builds to the Installing page[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
For the Dwarf Fortress beta branch on Steam, this release works with the Linux version (50.09-linux1) but NOT the Windows version. Windows users have to move to the DF default branch to be able to use DFHack. Note that the Windows version currently on the beta branch has no new features compared to the default branch, so you won't be missing out on anything.
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Announcements
Linux support!

Both DF and DFHack now run natively on Linux. If you're on Linux, we encourage you to try it out! The interface is noticeably snappier, FPS is up, and load times are reduced. If you're subscribed to DF and DFHack on Steam, here's how to switch over:
- In the Steam client, open the properties for Dwarf Fortress[/*]
- In the "Betas" section, switch to the "beta" branch[/*]
- Let that finish updating[/*]
- Select the "Compatibility" section and deselect "Force the use of a specific Steam Play compatibility tool"[/*]
- DF should update again with the Linux native version[/*]
Then, turn off the compatibility layer for DFHack. dfhooks.dll will disappear and you'll get libdfhooks.so and the dfhack script in its place.
Sometimes, Steam says you've got the Linux version, but when you look you see you still have Dwarf Fortress.exe instead of dwarfort. Try re-enabling the Proton compatibility layer and then turning off the compatibility layer again until it "sticks".
Major caveat for DF 50.09-linux1
This particular beta release of Dwarf Fortress has address layout randomization enabled. This causes some trouble for DFHack since DFHack needs to know the memory addresses of several key data structures. For this release only, be sure to start DF by launching DFHack from the Steam client or by running the ./dfhack commandline startup script. That will normalize the address space and allow DF to run with DFHack. Otherwise, DF will crash on startup. Again, this is only for this release. Future releases will not need this workaround and should go back to allowing you to start DF from either the Dwarf Fortress or DFHack Steam client entries, or from either the ./dwarfort or ./dfhack commandline commands.
The DFHack terminal console works differently on Linux
You can run DF with DFHack by starting DFHack in the Steam client. However, if you want an external DFHack terminal console, you have to run from the commandline.
On Windows, you could use the show command to pop up an external DFHack terminal console. You could use this for running DFHack commands from outside the game window, and the external terminal is the only way to run commandline-interactive DFHack commands like tiletypes and the interactive mode of the lua interpreter.
Linux has a different method of providing a terminal console. You can't spawn it dynamically like you can on Windows. You have to start DF from the commandline, and the terminal from which you ran ./dwarfort [u]becomes[/u] the terminal console. This should be a familiar process to many Linux users (most Linux commands work this way), but the change is jarring if you're not expecting it. We're also looking into providing a virtual console that doesn't depend on an existing system console so you can still get a console even if you run from Steam, but that work is far from being completed.
You can still launch DFHack from Steam if you want to. Many tools log information and errors to the console, though, so if you run into strange issues, it might be useful to try running from the commandline to see if there is diagnostic output there that can help you.
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor. We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Highlights
Hide tutorial popups

Once you've played a few forts, you probably don't need the tutorial popups that
Search and sort for squad assignment screen


When you bring up the screen to assign units to squads, there are now widgets for searching, sorting, and filtering. The default sort is by "melee effectiveness", which takes both weapon skill and physical attributes into account, but you can choose from a variety of relevant ascending or descending sorting orders.
Thanks to research into combat mechanics by community contributor Halifay, you can also sort by melee and ranged "potential", which predicts how effective a unit could become in the future, given adequate training.
There are also configurable filters to show or hide units in other squads, appointed/elected officials (like your manager, high priests, and doctors), and nobility.
Of course, if you know exactly who you're looking for, you can also search for units by name.
Animal assignment


The "Assign to pasture" screen released in the previous DFHack version has been expanded and generalized to support cages, restraints, and pits/ponds. Please tell us if you have any additional needs for animal assignment that those screens don't meet!
Trade good selection


The "Bring goods to trade depot" screen can now see inside bins, and you can select individual items within bins for trade instead of the entire bin, if you so choose. You can also search for contents within bins, even when in "bring the bin" mode. For example, you can find the "Gem bin"s that contain rubies by searching for "ruby".
One-click UI integration for exportlegends


exportlegends now sports a new integration with the vanilla "Export XML" button. Now you can generate both the vanilla export and the extended data export with a single click!
Onscreen HUD getting in your way? Hide it!


hide-interface hides all the vanilla UI elements for clean screenshots or distraction-free fortress watching. Even with the interface hidden, you can still pause/unpause the game with spacebar and move around the map with the keyboard or mouse. Hide that cluster of urgent notifications bubbles for a while and just enjoy watching your citizens scurry around for a while : )
Generated release notes
New Tools
- devel/scan-vtables: scan and dump likely vtable addresses (for memory research)[/*]
- hide-interface: hide the vanilla UI elements for clean screenshots or laid-back fortress observing[/*]
- hide-tutorials: hide the DF tutorial popups; enable in the System tab of gui/control-panel[/*]
- set-orientation: tinker with romantic inclinations (reinstated from back catalog of tools)[/*]
New Features
- buildingplan: one-click magma/fire safety filter for planned buildings[/*]
- exportlegends: new overlay that integrates with the vanilla "Export XML" button. Now you can generate both the vanilla export and the extended data export with a single click![/*]
- sort: search, sort, and filter for squad assignment screen[/*]
- zone: advanced unit assignment screens for cages, restraints, and pits/ponds[/*]
Fixes
- Core:[list]
- reload scripts in mods when a world is unloaded and immediately loaded again[/*]
- fix text getting added to DFHack text entry widgets when Alt- or Ctrl- keys are hit[/*]
Misc Improvements
- Surround DFHack-specific UI elements with square brackets instead of red-yellow blocks for better readability[/*]
- autobutcher: don't mark animals for butchering if they are already marked for some kind of training (war, hunt)[/*]
- caravan: optionally display items within bins in bring goods to depot screen[/*]
- createitem: support creating items inside of bags[/*]
- devel/lsmem: added support for filtering by memory addresses and filenames[/*]
- gui/design: change "auto commit" hotkey from c to Alt-c to avoid conflict with the default keybinding for z-level down[/*]
- gui/gm-editor:[list]
- hold down shift and right click to exit, regardless of how many substructures deep you are[/*]
- display in the title bar whether the editor window is scanning for live updates[/*]
API
- RemoteFortressReader: add a force_reload option to the GetBlockList RPC API to return blocks regardless of whether they have changed since the last request[/*]
- Gui: getAnyStockpile and getAnyCivzone (along with their getSelected variants) now work through layers of ZScreens. This means that they will still return valid results even if a DFHack tool window is in the foereground.[/*]
- Items::getValue(): remove caravan_buying parameter since the identity of the selling party doesn't actually affect the item value[/*]
- Units: new animal propery check functions isMarkedForTraining(unit), isMarkedForTaming(unit), isMarkedForWarTraining(unit), and isMarkedForHuntTraining(unit)[/*]
Lua
- dfhack.gui: new getAnyCivZone and getAnyStockpile functions; also behavior of getSelectedCivZone and getSelectedStockpile functions has changes as per the related API notes[/*]
- dfhack.items.getValue(): remove caravan_buying param as per C++ API change[/*]
- dfhack.screen.readTile(): now populates extended tile property fields (like top_of_text) in the returned Pen object[/*]
- dfhack.units: new animal propery check functions isMarkedForTraining(unit), isMarkedForTaming(unit), isMarkedForWarTraining(unit), and isMarkedForHuntTraining(unit)[/*]
- new(): improved error handling so that certain errors that were previously uncatchable (creating objects with members with unknown vtables) are now catchable with pcall()[/*]
- widgets.BannerPanel: panel with distinctive border for marking DFHack UI elements on otherwise vanilla screens[/*]
- widgets.Panel: new functions to override instead of setting corresponding properties (useful when subclassing instead of just setting attributes): onDragBegin, onDragEnd, onResizeBegin, onResizeEnd[/*]
Structures
- Added global_table global and corresponding global_table_entry type[/*]
- help_context_type: fix typo in enum name: EMBARK_TUTORIAL_CHICE -> EMBARK_TUTORIAL_CHOICE[/*]
- plotinfo: name the fields related to tutorial popups[/*]
- viewscreen_legendsst: realign structure[/*]
- viewscreen_new_arenast: added (first appeared in 50.06)[/*]
This beta is compatible with DF 50.09 for Windows (Dwarf Fortress Steam default branch, Itch , and Classic ) and DF 50.09-linux1 for Linux (Dwarf Fortress beta branch). It does not support the Windows version of DF deployed on the DF beta branch (which is currently nearly identical to the Windows version on the default branch).
Announcements
Both DF and DFHack now run natively on Linux. If you're on Linux, we encourage you to try it! The interface is noticeably snappier, FPS is up, and load times are reduced. If you're subscribed to DF and DFHack on Steam, here's how to switch over:- In the Steam client, open the properties for Dwarf Fortress[/*]
- In the "Betas" section, switch to the "beta" branch[/*]
- Let that finish updating[/*]
- Select the "Compatibility" section and deselect "Force the use of a specific Steam Play compatibility tool"[/*]
- DF should update again with the Linux native version[/*]
Then, do the same thing for DFHack. switching to the "beta" branch (if you're not there already) and turning off the compatibility layer.
Sometimes, Steam says you've got the Linux version, but when you look you see you still have Dwarf Fortress.exe instead of dwarfort. Try re-enabling the Proton compatibility layer and then turning off the compatibility layer again.
Major caveat for this beta release
This particular beta release of Dwarf Fortress has address layout randomization enabled. This causes some trouble for DFHack since DFHack needs to know the memory addresses of several key data structures. For this release only, be sure to start DF by launching DFHack from the Steam client or by running the ./dfhack commandline startup script. That will normalize the address space and allow DF to run with DFHack. Otherwise, DF will crash on startup. Again, this is only for this release. Future releases will not need this workaround and should go back to allowing you to start DF from either the Dwarf Fortress or DFHack Steam client entries, or from either the ./dwarfort or ./dfhack commandline commands.
The DFHack terminal console works differently on Linux
You can run DF with DFHack by starting DFHack in the Steam client. However, if you want an external DFHack terminal console, you have to run from the commandline.
On Windows, you could use the show command to pop up an external DFHack terminal console. You could use this for running DFHack commands from outside the game window, and the external terminal is the only way to run commandline-interactive DFHack commands like tiletypes and the interactive mode of the lua interpreter.
Linux has a different method of providing a terminal console. You can't spawn it dynamically like you can on Windows. You have to start DF from the commandline, and the terminal from which you ran ./dwarfort [u]becomes[/u] the terminal console. This should be a familiar process to many Linux users (most Linux commands work this way), but the change is jarring if you're not expecting it. We're also looking into providing a virtual console that doesn't depend on an existing system console so you can still get a console even if you run from Steam, but that work is far from being completed.
You can still launch DFHack from Steam if you want to. Many tools log information and errors to the console, though, so if you run into strange issues, it might be useful to try running from the commandline to see if there is diagnostic output there that can help you.
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor. We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Highlights
Hide tutorial popups
Once you've played a few forts, you probably don't need the tutorial popups that assault you when you open certain screens. Enable hide-tutorials in the System tab of gui/control-panel and never be bothered by them again!See inside bins when selecting trade goods
The "Bring goods to trade depot" screen can now see inside bins, and you can select individual items within bins for trade instead of the entire bin, if you so choose. You can also search for contents within bins, even when in "bring the bin" mode. For example, you can find the "Gem bin"s that contain rubies by searching for "ruby".Search and sort for squad assignment screen
The squad assignment screen was overhauled since the last beta in response to lots of great feedback. Thank you to all who responded with opinions and suggestions and helped us make this screen better!The default sort is now "melee effectiveness", which takes both weapon skill and physical attributes into account.
Thanks to research into combat mechanics by community contributor Halifay, you can also sort by melee and ranged "potential", which predicts how effective a unit could become in the future, given adequate training.
There are also configurable filters to show or hide units in other squads, appointed/elected officials (like your manager, high priests, and doctors), and nobility.
Of course, if you know exactly who you're looking for, you can also search for units by name. Searching for skills was removed because it was too confusing. Sorting by skills is still available, though.
Generated release notes
(These notes are cumulative with the previous beta and represent all changes since the last stable release)New Tools
- devel/scan-vtables: Scan and dump likely vtable addresses (for memory research)[/*]
- hide-interface: hide the vanilla UI elements for clean screenshots or laid-back fortress observing[/*]
- hide-tutorials: hide the DF tutorial popups; enable in the System tab of gui/control-panel[/*]
New Features
- exportlegends: new overlay that integrates with the vanilla "Export XML" button. Now you can generate both the vanilla export and the extended data export with a single click![/*]
- sort: search and sort for squad assignment screen[/*]
- zone: advanced unit assignment screens for cages, restraints, and pits/ponds[/*]
Fixes
- Core:[list]
- reload scripts in mods when a world is unloaded and immediately loaded again[/*]
- fix text getting added to DFHack text entry widgets when Alt- or Ctrl- keys are hit[/*]
Misc Improvements
- Surround DFHack-specific UI elements with square brackets instead of red-yellow blocks for better readability[/*]
- autobutcher: don't mark animals for butchering if they are already marked for some kind of training (war, hunt)[/*]
- caravan: optionally display items within bins in bring goods to depot screen[/*]
- devel/lsmem: added support for filtering by memory addresses and filenames[/*]
- gui/gm-editor:[list]
- hold down shift and right click to exit, regardless of how many substructures deep you are[/*]
- display in the title bar whether the editor window is scanning for live updates[/*]
API
- RemoteFortressReader: add a force_reload option to the GetBlockList RPC API to return blocks regardless of whether they have changed since the last request[/*]
- Gui: getAnyStockpile and getAnyCivzone (along with their getSelected variants) now work through layers of ZScreens. This means that they will still return valid results even if a DFHack tool window is in the foereground.[/*]
- Items::getValue(): remove caravan_buying parameter since the identity of the selling party doesn't actually affect the item value[/*]
- Units: new animal propery check functions isMarkedForTraining(unit), isMarkedForTaming(unit), isMarkedForWarTraining(unit), and isMarkedForHuntTraining(unit)[/*]
Lua
- dfhack.gui: new getAnyCivZone and getAnyStockpile functions; also behavior of getSelectedCivZone and getSelectedStockpile functions has changes as per the related API notes[/*]
- dfhack.items.getValue(): remove caravan_buying param as per C++ API change[/*]
- dfhack.screen.readTile(): now populates extended tile property fields (like top_of_text) in the returned Pen object[/*]
- dfhack.units: new animal propery check functions isMarkedForTraining(unit), isMarkedForTaming(unit), isMarkedForWarTraining(unit), and isMarkedForHuntTraining(unit)[/*]
- new(): improved error handling so that certain errors that were previously uncatchable (creating objects with members with unknown vtables) are now catchable with pcall()[/*]
- widgets.BannerPanel: panel with distinctive border for marking DFHack UI elements on otherwise vanilla screens[/*]
- widgets.Panel: new functions to override instead of setting corresponding properties (useful when subclassing instead of just setting attributes): onDragBegin, onDragEnd, onResizeBegin, onResizeEnd[/*]
Structures
- Added global_table global and corresponding global_table_entry type[/*]
- help_context_type: fix typo in enum name: EMBARK_TUTORIAL_CHICE -> EMBARK_TUTORIAL_CHOICE[/*]
- plotinfo: name the fields related to tutorial popups[/*]
- viewscreen_legendsst: realign structure[/*]
- viewscreen_new_arenast: added (first appeared in 50.06, probably)[/*]
The Windows build attached to the DF beta branch (build 11941433) is a mixture of 50.09 and a few unspecified low-level changes. There are no new features for players to use, but the internal structure differences make this particular version difficult to support at the same time as other, more popular builds (i.e. the default Windows 50.09 build and the beta Linux 50.09 build).
This update just removes support for the Windows version in the DF beta branch. The Linux version in the DF beta branch is still supported, and we still encourage Linux players to switch to the DF beta to try it. Windows players should stay on the default public DF branch for now (regardless of whether they use DFHack).
Also there's a small update to `autobutcher` that protects animals that you have marked for war or hunt training from butchering. Before, if you had marked an animal for war/hunt training, but it hadn't been trained yet, then `autobutcher` considered it available for slaughtering.
This update works with DF 50.09 on both the Dwarf Fortress default and beta branches. The DF beta branch includes native support for Linux, which this DFHack update also supports.
Highlights
Linux support!
Both DF and DFHack now run natively on Linux. If you're on Linux, we encourage you to try it! The interface is noticeably snappier, FPS is up, and load times are reduced. If you're subscribed to DF and DFHack on Steam, here's how to switch over:- In the Steam client, open the properties for Dwarf Fortress[/*]
- In the "Betas" section, switch to the "beta" branch[/*]
- Let that finish updating[/*]
- Select the "Compatibility" section and deselect "Force the use of a specific Steam Play compatibility tool"[/*]
- DF should update again with the Linux native version[/*]
Then, do the same thing for DFHack. switching to the "beta" branch (if you're not there already) and turning off the compatibility layer.
Major caveat for this beta release
This particular beta release of Dwarf Fortress has address layout randomization enabled. This causes some trouble for DFHack since DFHack needs to know the memory addresses of several key data structures. For this release only, be sure to start DF by launching DFHack from the Steam client or by running the ./dfhack commandline startup script. That will normalize the address space and allow DF to run with DFHack. Otherwise, DF will crash on startup. Again, this is only for this release. Future releases will not need this workaround and should go back to allowing you to start DF from either the Dwarf Fortress or DFHack Steam client entries, or from either the ./dwarfort or ./dfhack commandline commands.
The DFHack terminal console works differently on Linux
You can run DF with DFHack by starting DFHack in the Steam client. However, if you want an external DFHack terminal console, you have to run from the commandline.
On Windows, you could use the show command to pop up an external DFHack terminal console. You could use this for running DFHack commands from outside the game window, and the external terminal is the only way to run commandline-interactive DFHack commands like tiletypes and the interactive mode of the lua interpreter.
Linux has a different method of providing a terminal console. You can't spawn it dynamically like you can on Windows. You have to start DF from the commandline, and the terminal from which you ran ./dwarfort [u]becomes[/u] the terminal console. This should be a familiar process to many Linux users (most Linux commands work this way), but the change is jarring if you're not expecting it. We're also looking into providing a virtual console that doesn't depend on an existing system console so you can still get a console even if you run from Steam, but that work is far from being completed.
You can still launch DFHack from Steam if you want to. Many tools log information and errors to the console, though, so if you run into strange issues, it might be useful to try running from the commandline to see if there is diagnostic output there that can help you.
Search and sort for squad assignment screen
When you bring up the screen to assign units to squads, there are now widgets for searching and sorting. The default sort is by "best melee skill", but you can choose from a variety of relevant ascending or descending sorting orders.You can also search. Searching matches either the unit name or a skill that the unit has. Sorting by "leadership" shows units that have any leadership-related abilities, like teaching and military tactics training, but if you [u]just[/u] want to see dwarves with military tactics training, search for "tactics".
There have already been many good suggestions for additional sorting options, which we'll try to get into a future beta/release.
Animal assignment
The "Assign to pasture" screen released in the previous DFHack version has been expanded and generalized to support cages, restraints, and pits/ponds. Please tell us if you have any additional needs for animal assignment that those screens don't meet!One-click UI integration for exportlegends
exportlegends now sports a new integration with the vanilla "Export XML" button. Now you can generate both the vanilla export and the extended data export with a single click!Onscreen HUD getting in your way? Hide it!
hide-interface hides all the vanilla UI elements for clean screenshots or distraction-free fortress watching. Even with the interface hidden, you can still pause/unpause the game with spacebar and move around the map with the keyboard or mouse. Hide that cluster of urgent notifications bubbles for a while and just enjoy watching your citizens scurry around : )Generated release notes
New Tools
- devel/scan-vtables: Scan and dump likely vtable addresses (for memory research)[/*]
- hide-interface: hide the vanilla UI elements for clean screenshots or laid-back fortress observing[/*]
New Features
- exportlegends: new overlay that integrates with the vanilla "Export XML" button. Now you can generate both the vanilla export and the extended data export with a single click![/*]
- sort: search and sort for squad assignment screen[/*]
- zone: advanced unit assignment screens for cages, restraints, and pits/ponds[/*]
Fixes
- Core:[list]
- reload scripts in mods when a world is unloaded and immediately loaded again[/*]
- fix text getting added to DFHack text entry widgets when Alt- or Ctrl- keys are hit[/*]
Misc Improvements
- Surround DFHack-specific UI elements with square brackets instead of red-yellow blocks for better readability[/*]
- devel/lsmem: added support for filtering by memory addresses and filenames[/*]
- hotkeys: don't display DFHack logo in legends mode since it covers up important interface elements. the Ctrl-Shift-C hotkey to bring up the menu and the mouseover hotspot still function, though.[/*]
- suspendmanager: display a different color for jobs suspended by suspendmanager[/*]
API
- RemoteFortressReader: add a force_reload option to the GetBlockList RPC API to return blocks regardless of whether they have changed since the last request[/*]
- Items::getValue(): remove caravan_buying parameter since the identity of the selling party doesn't actually affect the item value[/*]
Lua
- dfhack.items.getValue(): remove caravan_buying param as per C++ API change[/*]
- dfhack.screen.readTile(): now populates extended tile property fields (like top_of_text) in the returned Pen object[/*]
- new(): improved error handling so that certain errors that were previously uncatchable (creating objects with members with unknown vtables) are now catchable with pcall()[/*]
- widgets.BannerPanel: panel with distinctive border for marking DFHack UI elements on otherwise vanilla screens[/*]
- widgets.Panel: new functions to override instead of setting corresponding properties (useful when subclassing instead of just setting attributes): onDragBegin, onDragEnd, onResizeBegin, onResizeEnd[/*]
Structures
- Added global_table global and corresponding global_table_entry type[/*]
- viewscreen_legendsst: realign structure[/*]
- viewscreen_new_arenast: added (first appeared in 50.06, probably)[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Announcements
You can now distribute your quickfort blueprints in mods!

Think you have a cool fortress design that you want to share with the community? The effort required to share your designs has now been cut down significantly. DFHack quickfort now supports blueprints that have been distributed with mods!
The blueprint in the screenshot comes from a mod with only two files:
- mods/myk002 blueprints/info.txt[/*]
- mods/myk002 blueprints/blueprints/from_mod.csv[/*]
How do you make blueprints of your fort to distribute? DFHack's gui/blueprint will take a snapshot of your fort and create a series of blueprints for you. You can also make edits with a text editor or online spreadsheet app to do some really advanced stuff .
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor. We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Highlights
Initial screens for search and sort
The first few screens are done for search/filter/sort support! For starters, we decided to tackle the animal assignment to pasture screen and the trade screens, both of which are a frequent source of frustration for players. There is generally not enough room to add vanilla-sized buttons, so DFHack screen links will appear surrounded with red and yellow bars to to distinguish them from vanilla widgets.
The screen that comes up can be filtered and sorted by whether and where the animals are pastured/caged, by their friendliness or tame status, and by various other properties. All animals of a particular species are now listed next to each other so you can find them easily.

The trade screens got a similar treatment. There are two new screens, one for bringing trade goods to the depot, and one for doing the actual trading. In both, items that are ethically unacceptable to the traders that you are trading with and items that are forbidden to export by your nobles are automatically filtered out, though you can change the filters if you like. Both screens also make bins safe and easy to work with.


The bring goods to depot screen allows you to find the items that you want to sell and mark them for trading. For example, you can move the "condition" slider to only show damaged items and then mark them all for trade with a single click.

The trade screen provides similar filter and selection support for items being bought and sold. By default, only the contents of bins are listed and traded and the bins themselves aren't traded. You can toggle this behavior and trade bins if you like, though.

Copy/paste support
With the move to SDL2 comes new clipboard integration capabilities. DFHack's text entry fields, such as the command editing field in gui/launcher, now support copy, paste, and cut. Ctrl-V will paste from the system clipboard into the DFHack text field. This is especially useful when pasting in DFHack commands that you find on the internet! Ctrl-C will copy text out that you can paste into another application, and Ctrl-X will copy the text and also clear the field (so it's a convenient way of just clearing the text quickly even if you don't need to copy it).Note that there is no way to just select a portion of the text, though, so all copy and cut operations apply to all text in the field.

Warm and damp indicators in ASCII mode
DF does not distinguish damp or warm tiles when in ASCII mode. This can be very frustrating for ASCII-mode players that have to play without this information.DFHack now automatically highlights damp tiles in blue and warm tiles in red when in ASCII mode and a mining operation is selected. In other words, the visual feedback in ASCII now matches what premium players get in graphics mode.




Other new tools
Some long-standing requests were finally fulfilled in this release, with the return of a few fan-favorite tools and one new game fix.- 3dveins replaces vanilla DF's blobby vein generation with veins that flow smoothly and naturally between z-levels. Want a more natural looking geology? Try running this command right after a new embark![/*]
- dwarfvet allows your animals to have their wounds treated at hospitals, prolonging their life and usefulness.[/*]
- fix/empty-wheelbarrows dislodges rocks that get stuck in your wheelbarrows when a hauling dwarf gets distracted and the full wheelbarrow gets abandoned somewhere. This makes those wheelbarrows useful for hauling again. Enable this tool in the "Maintenance" tab of gui/control-panel to automatically keep your wheelbarrows usable![/*]
Generated release notes
New Tools
- 3dveins: reinstated for v50, this plugin replaces vanilla DF's blobby vein generation with veins that flow smoothly and naturally between z-levels[/*]
- caravan: new trade screen UI replacements for bringing goods to trade depot and trading[/*]
- dig: new dig.asciiwarmdamp overlay that highlights warm and damp tiles when in ASCII mode. there is no effect in graphics mode since the tiles are already highlighted there[/*]
- dwarfvet: reinstated and updated for v50's new hospital mechanics; allow your animals to have their wounds treated at hospitals[/*]
- fix/empty-wheelbarrows: new script to empty stuck rocks from all wheelbarrows on the map[/*]
- zone: new searchable, sortable, filterable screen for assigning units to pastures[/*]
Fixes
- Fix extra keys appearing in DFHack text boxes when shift (or any other modifier) is released before the other key you were pressing[/*]
- gui/autodump: when "include items claimed by jobs" is on, actually cancel the job so the item can be teleported[/*]
- gui/create-item: when choosing a citizen to create the chosen items, avoid choosing a dead citizen[/*]
- gui/gm-unit: fix commandline processing when a unit id is specified[/*]
- logistics:[list]
- don't autotrain domestic animals brought by invaders (they'll get attacked by friendly creatures as soon as you let them out of their cage)[/*]
- don't bring trade goods to depot if the only caravans present are tribute caravans[/*]
- fix potential crash when removing stockpiles or turning off stockpile features[/*]
Misc Improvements
- Dreamfort: give noble suites double-thick walls and add apartment doors[/*]
- Suppress DF keyboard events when a DFHack keybinding is matched. This prevents, for example, a backtick from appearing in a textbox as text when you launch gui/launcher from the backtick keybinding.[/*]
- autonick: add more variety to nicknames based on famous literary dwarves[/*]
- gui/unit-syndromes: make lists searchable[/*]
- logistics: bring an autotraded bin to the depot if any item inside is tradeable instead of marking all items within the bin as untradeable if any individual item is untradeable[/*]
- quickfort: blueprint libraries are now moddable -- add a blueprints/ directory to your mod and they'll show up in quickfort and gui/quickfort![/*]
- stockpiles: include exotic pets in the "tameable" filter[/*]
- suspendmanager: display the suspension reason when viewing a suspended building[/*]
- widgets.EditField: DFHack edit fields now support cut/copy/paste with the system clipboard with Ctrl-X/Ctrl-C/Ctrl-V[/*]
API
- Items::markForTrade(), Items::isRequestedTradeGood(), Items::getValue: see Lua notes below[/*]
- Units::getUnitByNobleRole, Units::getUnitsByNobleRole: unit lookup API by role[/*]
Internals
- Price calculations fixed for many item types[/*]
Lua
- dfhack.items.getValue: gained optional caravan and caravan_buying parameters for prices that take trader races and agreements into account[/*]
- dfhack.items.isRequestedTradeGood: discover whether an item is named in a trade agreement with an active caravan[/*]
- dfhack.items.markForTrade: mark items for trade[/*]
- dfhack.units.getUnitByNobleRole, dfhack.units.getUnitsByNobleRole: unit lookup API by role[/*]
- widgets.TextButton: wraps a HotkeyLabel and decorates it to look more like a button[/*]
Structures
- build_req_choicest: realign structure and fix vmethods[/*]
- squad_orderst: fix vmethods[/*]
Documentation
- misery: rewrite the documentation to clarify the actual effects of the plugin[/*]
Initial bugfixes for the new trading screens:
- Trade screen now refuses to launch if the traders are not ready to trade
- Trade screen now initializes correctly when the traders *are* ready to trade
- Items in buildings are now correctly marked for trade when selected in the "Bring trade goods to depot" screen
New trade screens!!
The focus of this beta release is the trade workflow. There are two new DFHack screens to play with, one for selecting items to bring to the depot and one for selecting caravan and fort items for the actual trade transaction.We need your feedback on these! Are they easy to use? Can you get all the items you want to the trade depot in a "reasonable" number of clicks? Are there more filters you'd like to see?
Note that while the "Bring goods to depot" screen is separate from the vanilla screen, the "Trade" screen can be used simultaneously with the vanilla interface. The checkboxes on the vanilla screen are updated "live" as you use the DFHack selection interface, and vice versa. Also, the vanilla screen trade summary at the bottom that shows whether the trader is likely to accept the deal is updated in realtime.
The DFHack "Bring goods to depot" screen is accessible by clicking on the text button that is just above the vanilla "Bring goods to depot" button (shown when you click on the trade depot). It also has the hotkey Ctrl-T
The DFHack trade screen is accessible from the vanilla trade screen, again by clicking on the text button on the right side of the screen or by pressing Ctrl-T.
Hopefully the screencaps attached to this post make everything clear. Suggestions for further usability improvements are always welcome!
Getting these screens done was truly a team effort, requiring significant reverse engineering for information on how export agreements affect price calculations, the logic behind export mandates, and the details regarding ethical trade restrictions, plus thousands of lines of business logic. Very heartfelt thanks to DFHack resident reverse engineers Quietust and ab9rf (rome of oxtrot), without whom none of this would have been possible!




System clipboard copy and paste
Now that DF is on SDL2, we get much better integration with operating system services. Edit fields, like the commandline text line in gui/launcher, now supports copy and paste. Ctrl-C to copy, Ctrl-X to cut, and Ctrl-V to paste. This means that you can find a sample commandline online, open up gui/launcher, and hit Ctrl-V to paste it in. No more manually copying it word by word!We don't have a way to select ranges of text, so Ctrl-C will copy the entire line and Ctrl-X will cut the entire line. On the plus side, this means Ctrl-X is now a convenient way to clear any DFHack text field : )
Generated release notes
New Plugins
- 3dveins: reinstated for v50, this plugin replaces vanilla DF's blobby vein generation with veins that flow smoothly and naturally between z-levels[/*]
New Scripts
- caravan: new trade screen UI replacements for bringing goods to trade depot and trading[/*]
Fixes
- Fix extra keys appearing in DFHack text boxes when shift (or any other modifier) is released before the other key you were pressing[/*]
- gui/autodump: when "include items claimed by jobs" is on, actually cancel the job so the item can be teleported[/*]
- gui/gm-unit: fix commandline processing when a unit id is specified[/*]
- suspendmanager: take in account already built blocking buildings[/*]
Misc Improvements
- widgets.EditField: DFHack edit fields now support cut/copy/paste with the system clipboard with Ctrl-X/Ctrl-C/Ctrl-V[/*]
API
- Items :: markForTrade(), Items :: isRequestedTradeGood(), Items :: getValue: see Lua notes below[/*]
- Units :: getUnitByNobleRole, Units :: getUnitsByNobleRole: unit lookup API by role[/*]
Internals
- Price calculations fixed for many item types[/*]
Lua
- dfhack.items.getValue: gained optional caravan and caravan_buying parameters for prices that take trader races and agreements into account[/*]
- dfhack.items.isRequestedTradeGood: discover whether an item is named in a trade agreement with an active caravan[/*]
- dfhack.items.markForTrade: mark items for trade[/*]
- dfhack.units.getUnitByNobleRole, dfhack.units.getUnitsByNobleRole: unit lookup API by role[/*]
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch (note: as of this announcement, Bay12 has not yet updated their store on itch), and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor. We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Highlights
Most changes in this release have to do with migrating to SDL2 and are not visible to the player.Generated release notes
Misc Improvements
- `caravan`: new overlay for selecting all/none on trade request screen[/*]
- `suspendmanager`: don't suspend constructions that are built over open space[/*]
Structures
- ``tiletype_shape``: changed RAMP_TOP and ENDLESS_PIT to not walkable to reflect how scripts actually need these types to be treated[/*]
This release is identical to DFHack 50.09sdl2-2-rc1 except for compatibility with DF 50.09sdl2-3.
Please see https://steamcommunity.com/games/2346660/announcements/detail/3681177834687015555 for additional details.
As with the previous experimental release, if you have trouble typing symbols into DFHack text boxes, please reset your DF keybindings to defaults and try again. This is due to changes in how the new version of DF interprets keyboard input.
Feature set is identical to DFHack 50.08-r4. Please see https://steamcommunity.com/games/2346660/announcements/detail/3681177834687015555 for details.
If you have trouble typing symbols into DFHack text boxes, please reset your DF keybindings to defaults and try again. This is due to changes in how the new version of DF interprets keyboard input.
This release is compatible with all distributions of Dwarf Fortress: Steam , Itch , and Classic .
- Install DFHack from Steam [/*]
- Manual install [/*]
- Quickstart guide (for players) [/*]
- Modding guide (for modders) [/*]
Announcements
PSAs
As always, remember that, just like the vanilla DF game, DFHack tools can also have bugs. It is a good idea to save often and keep backups of the forts that you care about.Many DFHack tools that worked in previous (pre-Steam) versions of DF have not been updated yet and are marked with the "unavailable" tag in their docs. If you try to run them, they will show a warning and exit immediately. You can run the command again to override the warning (though of course the tools may not work). We make no guarantees of reliability for the tools that are marked as "unavailable".
The in-game interface for running DFHack commands (gui/launcher) will not show "unavailable" tools by default. You can still run them if you know their names, or you can turn on dev mode by hitting Ctrl-D while in gui/launcher and they will be added to the autocomplete list. Some tools do not compile yet and are not available at all, even when in dev mode.
If you see a tool complaining about the lack of a cursor, know that it's referring to the keyboard cursor (which used to be the only real option in Dwarf Fortress). You can enable the keyboard cursor by entering mining mode or selecting the dump/forbid tool and hitting Alt-K (the DFHack keybinding for toggle-kbd-cursor. We're working on making DFHack tools more mouse-aware and accessible so this step isn't necessary in the future.
Highlights
logistics

When you select a stockpile, you'll now see a panel that will let you toggle its automation features. Items and animals brought to that stockpile can be automatically marked for melting, trading, dumping, and/or training.
For example, you can set up cage traps for catching wild game. When you catch something, your dwarves will bring the caged animal to your Animals stockpile. If you enable automatic training on that stockpile, the animals will automatically get a trainer assigned to them. Combine this with autobutcher, which can mark the trained animals for butchering, and you now have a low-toil food supply chain for your kitchens!
Similarly, if you enable automatic trading for your trade goods stockpile, all items in the stockpile will be marked for trading and automatically brought to the trade depot when a merchant caravan arrives.
Dreamfort

Dreamfort is the result of over a decade of experimentation and revision from some of Dwarf Fortress's most experienced players. It is a fully functional, pre-designed fortress you can build yourself from gui/quickfort blueprints. If you're having trouble with getting your forts to work smoothly, try building Dreamfort. The blueprints walk you through the process of creating the fortress so you can learn from its design, progression, and configuration. You can even reuse individual blueprints for the parts you especially like to extend your own designs.
The Dreamfort walkthroughs and blueprints bring you from embark all the way through to a 200-strong mountainhome. Screenshots for all the levels and links to more information here: https://docs.dfhack.org/en/stable/docs/guides/quickfort-library-guide.html#dreamfort .
If you want to explore it interactively, you can download a pre-built Dreamfort from DFFD: https://dffd.bay12games.com/file.php?id=15434 .
suspendmanager

Logic for when to suspend building jobs has been upgraded. Now suspendmanager is much smarter when you're building in areas with limited access paths. For example, if you fill a corridor or build a high wall, it will now correctly realize that a wall tile can block access to a another tile farther away.
Moreover, suspendmanager now also considers smoothing and engraving jobs. For example, if you attempt to build a statue on top of flooring that is designated for smoothing, it will now allow the smoothing job to be completed first before the statue blocks it.
Generated release notes
New Plugins
- logistics: automatically mark and route items or animals that come to monitored stockpiles. options are toggleable on an overlay that comes up when you have a stockpile selected.[/*]
Fixes
- buildingplan: don't include artifacts when max quality is masterful[/*]
- dig-now: clear item occupancy flags for channeled tiles that had items on them[/*]
- emigration: reassign home site for emigrating units so they don't just come right back to the fort[/*]
- gui/create-item: allow blocks to be made out of wood when using the restrictive filters[/*]
- gui/liquids: ensure tile temperature is set correctly when painting water or magma[/*]
- gui/quickfort:[list]
- allow traffic designations to be applied over buildings[/*]
- protect against meta blueprints recursing infinitely if they include themselves[/*]
Misc Improvements
- Blueprint library:[list]
- dreamfort: full rewrite and update for DF v50[/*]
- pump_stack: updated walkthrough and separated dig and channel steps so boulders can be cleared[/*]
- aquifer_tap: updated walkthrough[/*]
Removed
- gui/automelt: replaced by an overlay panel that appears when you click on a stockpile[/*]
Structures
- abstract_building_libraryst: initialize unknown variables as DF does[/*]
- misc_trait_type: realign[/*]
Documentation
- blueprint-library-guide: update Dreamfort screenshots and links, add aquifer_tap screenshot[/*]
The DF SDL2 experimental branch brings some fundamental changes to game architecture, in particular around keyboard/mouse input and graphics output.
If you are using a non-QWERTY keyboard layout, and especially a non-English locale, please test to see if you can type normally in DFHack windows (such as gui/launcher). In particular, test to see if you can type punctuation symbols and underscores.
Thanks!
Minimum Setup
- Processor: Dual Core CPU - 2.4GHz+Memory: 4 GB RAM
- Memory: 4 GB RAM
- Graphics: 1GB of VRAM: Intel HD 3000 GPU / AMD HD 5450 / Nvidia 9400 GT
- Storage: 50 MB available spaceAdditional Notes: Must be installed to the same Steam library and drive as Dwarf Fortress
Recommended Setup
- Processor: Dual Core CPU - 4GHz+Memory: 16 GB RAM
[ 6419 ]
[ 2200 ]
[ 4325 ]