
Lavender is tool allowing modders, modpack makers and everybody else to create player guides and other in-game documentation in the form of easy-to-read, intuitive guide books.
Everything is written using easy to learn, familiar and, most importantly, readable markdown with a bunch of special syntax to seamlessly integrate with the game. This is augmented with support for powerful macros and the entirety of the owo-ui framework at your fingertips
Further, for the first time in any guidebook mod (we believe), all books can be viewed in-game when placed in the offhand - extremely useful for referencing an entry while carrying out its instructions

Features
- Fully data-driven book authoring with near-instant hot reloading
- Optional grouping of entries into categories for easy discovery
- Deep linking between entries and categories
- Structure/Multiblock visualization and building assistance
- Gradual content unlocking, backed by the game's advancement system
- Built-in support for visualizing all vanilla recipe types and an easy framework for implementing custom ones
- Localization support
- Individual bookmarks for each save
- Support for extending another mod's books, extremely useful for seamlessly integrating your addon's documentation
Getting started
To start making your own Lavender book right now, complete the setup and then follow Getting Started in the comprehensive documentation over at https://docs.wispforest.io.
For reference, it might be helpful to check out Affinity's Wispen Testament as a solid example book made using Lavender
Credits
- The Patchouli team for making the original mod that inspired Lavender
- chyzman for inspiring a range of features, notably offhand viewing
All Versions
+ Add Version- Refer to the changelog of [0.1.15 for 1.21](https://modrinth.com/mod/lavender/version/0.1.15+1.21)
## Fixes
- Recipes with empty slots in their subgrid (eg. the vanilla clock or stairs recipes) no longer cause a crash when displayed in a book
- Lavender can now display toasts when a new entry is unlocked in a book (backported by enjarai). To configure this for a book, add a
new_entries_toastobject to the book definition and populate it as follows:
json
"new_entries_toast": {
"icon_stack": "mymod:my_book_item",
"book_name": "A Book Title",
"background_sprite": "mymod:a_sprite_id" // this is optional, lavender supplies a unique texture by default
}
`
- Entries now support declaring extra search terms in an array under
additional_search_terms` in the entry frontmatter (implemented by enjarai) - Wrapping of the entry index on the landing page should now work correctly in the presence of nested categories
- Lavender now bundles a newer version of the
lavender-mdmarkdown library to fix parsing of multiple parameters in the owo-ui template syntax
- Lavender book items now check for invalid book IDs on the client, removing the constant "<Player> tried to open unknown book with id <id>" logging on servers
- The
get-lavender-bookcommand is now client-side (to make it work properly when playing on a dedicated server) and expands to an appropriate invocation of the vanilla/givecommand when executed
- Resource condition matching for book contents (entries and categories), which was disabled during the port to 1.21, has been readded
- This build uses a somewhat more robust method of tracking the which the ALT key has been pressed when trying to open an item's associated entry - this should lead to better compatibility with mods like EMI
- Offhand book rendering should now work properly with Iris shaderpacks
- Navigating to the associated entry of an item no longer crashes if that entry is not visible to the player
- Referencing an invalid item in the icon of an entry/category no longer crashes the game
- More edge cases with page wrapping in the entry have been resolved
- Exceptions which occur during compilation of an embedded owo-ui model no longer crash the game
- Categories which contain only other categories and no entries no longer incorrectly display as empty
- Nested markdown which starts with a formatting syntax (eg. a keybind at the beginning of a list item) no longer applies its formatting to the entire nested section
- The name displayed by the dynamic book can now be changed from the default "Book" by specifying the
dynamic_book_nameproperty in the book's definition. This property expects a [Minecraft text object](https://minecraft.wiki/w/Raw_JSON_text_format#Appending) (which includes literal strings)
- Categories can now be nested into each other by specifying a
parentidentifier in their frontmatter
- Entries which the player did not read yet are now highlighted in the book to improve discovery
- Categories and entries can now use a GUI sprite instead of an item for their icon through the
icon_spritefrontmatter property - Translation keys can now be embedded into entries and categories using the new
%{translation.key.here}%syntax
## Fixes
- Page-wrapping of the elements in entry indices is now fixed, stopping entries with multiline titles from pushing others off the page
- The size at which the offhand book preview is rendered no longer depends on the GUI scale
- When clicking on a link and then going back to the book, the navigation history (including, importantly, the landing page) is no longer lost
- Zero-arg macros which expand into other zero-arg macros now properly apply
- Macros with arguments longer than one character now properly apply
- Books are only loaded once the player has joined a world in order to properly load entries with associated tags