• Fix bug preventing use of Netlify base URL
  • Properly use page themes for asset functions
  • Fixes issue linking to sourcedoc elements in signature



  • Experimental sourcedocs are now enabled by default
  • Adds collectionPages menu item, which matches the same lookup behavior as the findAll() function. See Menus for usage.
  • Use 0.5 as default sitemap entry priority and always add priority to sitemap entries
  • Updates Kodiak version to 0.5.0, with several bugfixes for Dokka output, and preparation for generation of class hierarchy diagrams (still WIP)
  • Sourcedocs modules can now link to one another. Projects such as multi-module Java libraries or Kotlin multiplatform projects can now associate Orchid's documentation modules to one another, cross-linking to base classes or packages. See docs here
  • Deprecation messages are now only shown in diagnose mode. A warning notifying of detected deprecation usage or diagnosed problems is now shown on normal builds.
  • Major improvements to asset management, external asset downloading, and asset inlining
    • Extra CSS/JS can now be configured as objects, and options like download and inline are available in extra CSS
    • A regression causing external assets to not download has been fixed
    • See docs here
  • New config DSL for setting up the config.yml in integration tests, and dramatically improved diagnostics for page html assertion failures

Bug Fixes

  • Fixes bugs with orchidSearch component
    • homepage is now included in search results
    • SourceDocs element names and comments are now included in search results
  • Improves diagnostic output of OrchidTest APIs
  • Support various different lettercasing for homepage file
  • Fixes several cosmetic issues with Copper theme
  • Fixes issue of -SNAPSHOT being included in the Orchid version logs
  • Formatting issues with Kotlindocs have been fixed

Breaking Changes

This release includes 1 major breaking change to end-users, and the deprecation of several other end-user features which will be removed in a future release:

  • The --experimentalSourceDoc is no longer needed, as experiemental SourceDocs are now the default functionality. If you are still using the legacy sourcedocs, you can still use them for a short time longer, but you must now add the --legacySourceDoc flag to Orchid. Sites still building docs on legacy SourceDocs will not work without that flag, but you must now migrate to the new SourceDocs. Legacy sourcedocs will be removed entirely in the next major release.
  • {% styles %} is now included within the {% head %} template tag. The {% styles %} tag now does nothing, and in the next major version will be removed, causing template errors.
  • {% scripts %} has been replaced by the {% body %} and {% endbody %} template tags. {% scripts %} will be removed in the next major version, causing template errors.

In additional, there are several changes to both internal and public code APIs. The following are only of importance to developers making custom Orchid plugins, but can be ignored by anyone else as they do not impact end-user functionality.

  • The signature for fun loadAssets() in themes, pages, and components has been changed to loadAssets(delegate: AssetManagerDelegate).
    • In loadAssets, calls to addCss and addJs should now be made on that delegate: delegate.addCss("..."), delegate.addJs("..."). You can also use with(delegate) { ... } in Kotlin to reduce the boilerplate.
    • Previously, custom code needed to be written to prevent some external assets from being downloaded, but now the addCss and addJs methods accept a configuration lambda or object with these available options. They are the same options available to extraCss and extraJs, so there is now difference between assets loaded in loadAssets() or attached from the extra assets.
  • OrchidTest methods for directly selecting and testing HTML have been removed. Instead, you should use the htmlHeadMatches and htmlBodyMatches methods to build DOM subtrees. However, diagnostic output is greatly improved for these matchers.
  • Meta-components can now render content to the page head, or the start or end of the HTML body. This is currently only reserved for future use with official Orchid plugins, but may be of interest to develoers making custom plugins in the Orchid community.
  • Methods from ResourceService for locating assets has been significantly improved. Rather than calling methods like getResourceEntry() and locateLocalResource() on the context, they have now been moved into dedicated OrchidResourceSources which can be gotten through the context. The ResourceService now only has methods to get the following types of resource sources:
    • getDefaultResourceSource() - Replaces getResourceEntry() and getResourceEntries(), which are now implemented on this default resource source. This will delegate the actual resource lookup to the site resources, theme, and registered plugins. They are also cached to improve lookup performance.
    • getFlexibleResourceSource() - Wraps the default resource source to add more flexible resource-lookup logic to it. Normal lookups must match both filename and extension, but flexible lookups will be abel to match by filename only, selecting a resource of any file extension. Replaces call to locateLocalResourceEntry() and findClosestFile(). Note that findClosestFile() is deprecated as it does not delegate to the default resource source, and so should be avoided.
    • getTemplateResourceSource() - Wraps the default resource source to add template-locating logic to it. Replaces call to locateTemplate().
    • getDataResourceSource() - Wraps the default resource source to add functionality for loading data markup into a Map. Replaces call to getDatafile and getDatafiles().


  • New Snippets plugin allows you to lookup and embed snippets from code, files, and even external webpages!
  • Improvements to Admin Panel styling. Forms and snippets located during the site build are care listed and can be previewed in the admin panel.
  • Allows Forms to be embedded with a new form tag, instead of only as Components as before. See docs here
  • Replaces default accordion markup with details/summary tag for best usage in all themes
  • Tabbed TemplateTags can now be rendered dynamically! You can now use loops and conditionals to add individual tabs to the body of tabbed tags. See docs here.
  • Both the base URL and your theme can now be set in config.yml, instead of needing to be set in your Gradle or Maven build scripts. See docs here.

Breaking Changes

This release contains no breaking changes or deprecations of public, end-user features. Read on for important changes

There have been some minor changes to the internal APIs. Most notable is that the ModularList primary constructor no longer accepts an injected OrchidContext. The context should instead be provided lazily when calling .get() to get the modular items from the list. In addition, I'm working on removing the requirement of an OrchidContext when creating OrchidReference objects. While it's still there for now, many of its public methods, like getServerPath() and toJSON(), and toString(), must be provided with a context when called instead of using the Context set in its constructor.

In addition, Orchid is getting more strict on places where a non-null OrchidPage must be provided. ModularPageList.get() requires a non-null page, and Themes must have a page for each time it is pushed to the ThemeService with theme.doWithCurrentPage(). This also means that Generators do not globally set Themes any more, and it is the responsibility of the Generator to wrap context.render calls with theme.doWithCurrentPage() using its default ThemeRelation. If you do not override startGeneration(), this will be done automatically, but if you are overriding startGeneration() you must make sure to add this functionality.

Finally, the base URL is no longer available anytime during Orchid's lifetime. It is set at the start of each build, and thus is only available after indexing has started and when idle between builds. Attempting to get the base URL during Orchid startup will throw a NullPointerException.


  • Improve Asciidoc formatting. Specifically, other files relative to the source file can now be included. See caveats here.
  • Automatically add CNAME files to GithubPages deploys, if not already present in the deployed site. The CNAME value will be inferred from the base URL of the site during the deploy. See docs here.
  • Adds feedLinks metaComponent to Posts plugin, which adds <link rel='alternate'> tags to page heads, pointing to the generated feed pages. See docs here.
  • Partial support for JDK 12+. Note that changes to the Javadoc since JDK 12 make the OrchidJavadoc plugin incompatible with JDK 12+. This will resolved in a future release, but for now you will have to run Orchid on a JDK less than 12 for it to work.
  • The dev server now dynamically renders indexed pages, instead of directly returning files from disk. This will prevent pages from old builds from being rendered, makimg the dev server experience closer to what would actually be rendered in production. This is still a work in progres, and if you encounter issues, you can go back to the old functionality by adding the --legacyFileServer CLI flag.
  • Copy over images uploaded and referenced from GitLab wikis
  • Various bugfixes for Kotlindoc plugin

Breaking Changes

This version includes the removal of several features that were deprecated since 0.18.0, outlined below:

  • Themes will no longer add search functionality automatically through the use of the legacySearch option. You must now migrate to the orchidSearch or algoliaDocsearch meta-component config instead, as described in the OrchidSearch docs.
  • Usage of index.queryPages, introduced as a deprecated feature for backward-compatibility in 0.18.0, has now been removed. You must set up custom taxonomies now.

In addition, there has been a moderate reworking of the resource APIs that are not backward-compatible. This is part of an ongoing effort to extract this functionality into a reusable library outside of Orchid, which will eventually live in the copper-leaf/arcana repo. The rest of these release notes are only relevant to folks writing custom plugins, and in particular, custom OrchidGenerators. Custom Components, Menus, Tags, and Functions are unaffected by these changes.

Below is a summary of the changes to Orchid's OrchidResource, OrchidPage, and OrchidGenerator APIs:

  • Collections created by OrchidGenerators are now part of the model returned from startIndexing(), instead of being a discrete method on the Generator class itself.
  • Generators now run in 4 discrete stages instead of being ordered based on priority. This will enable future improvements to performance and greater clarity of the intention behind Generator ordering. There is a 1-1 mapping from older priority constants to new Generator Stages. The priority constants remain in place by name, but are now instances of OrchidGenerator.Stage enums instead of integer priorities. The stages are as follows:
    • Stage.WARM_UP (previously `PRIORITY_INIT): A Stage for Generators that produce pages that Content pages depend on, like registering global assets and warming up other caches which improve overall build performance.
    • Stage.CONTENT (previously `PRIORITY_EARLY): A Stage for Generators that produce content pages. These are pages that are generally standalone pages, only having relationships to other pages from the same Generator.
    • Stage.COLLECTION (previously `PRIORITY_DEFAULT): A Stage for Generators that collect Content pages into groups, taxonomies, etc, and optionally generate additional Content pages displaying those collections of pages.
    • Stage.META (previously `PRIORITY_LATE): A Stage for Generators that produce metadata about your site. These are not Content pages, and are usually intended for computers to read, not humans, such as sitemaps, search indices, etc.
  • OrchidPages must now be constructed with an additional RenderService.RenderMode constant in their constructor. This constant replaces calls to context.render*() calls, typically done from the OrchidGenerator.startGenerating() callback, and enables Orchid to determine how to render each page automatically without needing to override that method. Orchid will also render pages on-the-fly when running the dev server, which will eventually be able to significantly improve the development experience. The mapping of context.render*() calls to the new constants are as follows:
    • context.renderString() -> Removed, as it was a development-only API.
    • context.renderTemplate() -> RenderService.RenderMode.TEMPLATE
    • context.renderRaw() -> RenderService.RenderMode.RAW
    • context.renderBinary() -> RenderService.RenderMode.BINARY
  • The APIs for creating Resources has been partially rewritten. All of these classes have been rewritten in Kotlin and are now null-safe in Kotlin, and the contract is expected to be followed when used from Java. These APIs will continue to evolve as I continue to extract them to a separate library. The following are the main differences from the old APIs to the new ones:
    • All resources are now considered "freeable", but this is much more of an implementation detail now instead of something developers must think about. Resources now simply return an InputStream describing their contents, and the framework will take care of the rest, including caching and freeing that content as appropriate.
    • The interfaces for LocalResourceSource, ThemeResourceSource, and PluginResourceSource are now singleton scope objects. Internally, resource sources are now initialized with one of these markers. Instead of having separate context.get*ResourceEntry() or get*ResourceEntries methods, there is a single context method for each that accepts one of these Scope objects to filer resource sources by.
    • AbstractTheme no longer implements the OrchidResourceSource interface. Themes now return a resource source instead.
    • OrchidIntegrationTest can now take any type of resource in its test methods, instead of only being able to create String resources. In particular, the new classpathResource() function in the testing DSL loads a resource from the classpath (especially useful for using binary resources in integration tests).
    • Resources should now be passed to context.compile(). This allows compilers to know the source location of a resource they are processing, and can then import other resources relative to their source, such as when resolving includes from Asciidoc markup.
  • OrchidCompiler.compile() now writes to an OutputStream passed to it, instead of returning compiled String content.


  • Enables single-file Changelogs such as the Keep A Changelog format. See docs here.
  • Enables include directives in Asciidoc markup and changing SafeMode settings. Thanks to @tomb50 for help getting this set up!


  • Removes bible() function, since the API it used underneath has been shut down and the function was unusable
  • Adds Faithlife Reftagger meta-component
  • Improves YouTube tag to support full-width aspect ratios, with help from @DanySK
  • Adds Mermaid JS component to OrchidDiagrams plugin
  • Allows customization of sourcedoc module slug independently of module name


Orchid 0.18.0 contains many new and breaking changes, which are briefly outlined in these release notes. Be sure to review the Migration Guide for a complete list of breaking changes and how to address them.

New Features

  • New OrchidTest library, for running integration tests of custom Orchid components.
  • Diagnosis Mode for detecting broken links in your site.
  • Meta Components improve workflow for adding asset-only components and other metadata to pages.
  • Algolia Docsearch native integration
  • Introduction of experimental OrchidSourceDoc, to replace existing code documentation plugins (currently an opt-in feature).
  • Addition of Predefined Collection Archives for easier creation of archives based on familiar page collections.

Improvements and Bugfixes

  • Components are now rendered using the Pebble embed tag by default, making it easier for themes to add wrapper markup
  • Orchid is now being tested on JDKs 8, 9, 10, and 11
  • itemId is now a static property of pages and can be viewed from the Admin Panel
  • Completely redesigned documentation site, with a new logo and a new domain
  • Repo has been moved to the @orchidhd Github organization


  • New Spotify tag added OrchidWritersBlocks plugin, to embed a Spotify track or playlist. Thanks @singularsyntax for the great addition!
  • Great news for Scala users, you can now run Orchid from an SBT build! Thanks to the incredible work by @swaldman, adding the orchidSbtPlugin will allow you to run and serve Orchid builds directly from your existing SBT projects. Full setup instructions and commands can be found on the Quick-Start page.


  • Removes restrictions on filenames that can be used for assets. CSS assets no longer requires a .css extension, and likewise JavaScript assets no longer require a .js extension. It's up to you to make sure an asset is valid or not before it gets added to the page.
  • When creating a Reference to a file that is not a child of the base dir, remove relative path segments so that it will be copied properly to the rendered site, and not outside of the build dir.
  • Adds kotlinPlayground component to the OrchidSyntaxHighlighter artifact, for converting Kotlin code snippets into runnable playgrounds.


  • Fixed bug #312: Orchid terminates entire Maven build process when it completes
  • Fixed bug #308: missing source directory prevents app from being served locally


  • Allows to specify the target_commitish for GithubReleasesPublisher with commitish in the publisher config
  • Tweak CSS to make images fit page content boundaries in FutureImperfect theme


  • Adds siteCopyright option to site.about object in config.yml, which defaults to site.about.siteName


  • Fixes issue with null CLI parameters when running Orchid with maven plugin


  • Fixes Gradle plugin to stay compatible with versions of Gradle before 5.x. Fixes #281


Orchid 0.17.0 contains many new and breaking changes, which are briefly outlined in these relase notes. Be sure to review the Migration Guide for a complete list of breaking changes and how to address them.

New Features

  • New "integrations" projects
  • Wiki sections can now be imported from Github and Gitlab project wikis (see integrations above)
  • Sites can now be published to Bitbucket and Gitlab (see integrations above)
  • New Shared Configurations allow user-defined archetype option groups. See full documentation here

Improvements and Bugfixes

  • Netlify Publisher
    • Now handles uploads of really large sites. Previously, deploys of more than a couple thousand pages or so would time out and fail.
    • It can infer the Netlify siteId from the Orchid base URL, and is now an optional property
  • Wikis
    • PDF ebooks generated by Wiki plugin are now included in a Collection, so they can be linked to with the linking functions and in menus
    • Fixed bug creating PDF ebooks for multiple sections
  • Changelogs
    • Adds Archetype to Changelog entries from changelog.allVersions in config.yml
    • Version bumps are inferred from changelog entries, and no longer need to be manually entered
    • Improves formatting of meta/versions.json file. Release notes can now be embedded in this JSON file
  • Other
    • Improves console output of Git-based publishers and Swiftdoc plugin
    • Swiftdoc plugin now accepts a list of source roots to find Swift sources, rather than a single directory
    • .puml file extension is now recognized as a PlantUML file by default
    • Fixed NPE calling a TemplateFunction as a Clog-formatted string
    • Fixes formatting of dates in sitemap XML files so as to not cause warnings from Google indices


  • Allows use of relative URLs as a base URL
  • Update Pebble to 3.0.9, with support for embed tag


  • Allows "/" to be properly used as a base URL
  • Adds baseUrl and homepageUrl filters to avoid directly using site.baseUrl in templates, which doesn't work correctly with URLs ending with "/"
  • improves error-reporting for syntax errors in Pebble templates and YAML config files


  • "Delombok" entire project (#249, thank you @Sumo99!)
  • Makes Gradle tasks discoverable with gradlew --tasks (#256)
  • Properly render link tags from Javadoc comment text (#251)
  • Build pipeline now fails if GithubPagesPublisher fails to push to remote (#238)


  • Fixes issues rendering PlantUML diagrams


  • Allows Changelog entries to be annotated with additional data referencable from templates
  • Removed Google Plus from social model since the service is shutting down


  • Use correct email social icon (thanks @alejandrohdezma!)


  • Fixes a couple issues with wiki sidebar


  • Adds wiki layout to Copper theme with sidebar menu


  • Adds responsive content classes for Copper theme


  • Makes some styling tweaks to Copper theme
  • allows changelog entries to be loaded recursively
  • Fixes issue of favicons getting mangled


New Features

  • Adds new Copper theme! See a demo here.
  • Adds new OrchidDocs bundle, for easier setup when using Orchid for project documentation. See a full docs here. It includes the following plugins:
    • Orchid Editorial
    • Orchid Pages
    • Orchid Wiki
    • Orchid Forms
    • Orchid Changelog
    • Orchid Search
    • Orchid Diagrams
    • Orchid Syntax Highlighter
  • Adds new Groovydoc plugin for documenting Groovy/Java source code. See full docs here

Bug Fixes

  • Improves importing and compiling of SASS/SCSS files
    • Sass (indented) syntax is now partially supported. JSass is limited in that it does not allow indented-style imports, so Orchid will fully compile all indented-style imports at the import site, essentially copying the compiled CSS to the import site. This means that you can import indented-style Sass code, but variables, functions, mixins etc. will not be imported from indented-style Sass files, and already-declared variables, functions, mixins etc. will not be accessible to the file being imported.
    • Relative imports are now supported. The first file is expected to be loaded from assets/css as normal, but subsequent relative imports will be imported relative to the existing file location.
    • Absolute imports are now supported, by prefixing an import path with /. These files are then located absolute to your site's resources directory, rathern than the normal assets/css directory. Files imported from within the absolutely-imported file follow the new directory as the context for further relative imports.
  • Fixes issue using default favicons. Now, sites that do not specify a favicon will use Orchid's default one, rather than showing an empty/broken image as the favicon.
  • Fixes Krow table display in Windows terminals. As windows terminals do not support many UTF-8 characters, the borders used for the summary table displayed poorly. Now, standard ASCII characters are used to draw the borders of the results table on Windows so that it is readable.

Potentially-Breaking Changes

There were no major updates to the Orchid framework in this release, but many of its dependencies have been updated to newer versions which might cause issues.


  • Updates docs in admin panel, adds code samples for template function and tags
  • Verifies Orchid works in JRE 9
  • Compiles multiple plantuml groups in a template into multiple diagrams
  • Javadoc and Kotlindoc runners now embed the formatters and work offline, no more runtime dependency resolution


  • Updates OrchidBible dependency to hit correct endpoints and improves usability
  • Parses external URLs better
  • Passes command line args directly through to Dokka so Gradle can supply the proper documentation classpath


  • Updates dependency versions


  • Fixes issue of CLI args not using env vars when run via Gradle or Maven
  • Improves display of build summary


  • Fixes Archetype ordering for Static Pages, Posts, and Wikis, so that the archtype data overrides correctly according to intended priority

Breaking Changes

  • Archetypes for Static Page groups are no longer nested under staticPages in config.yml. The new Archetype location is simply pages.{pageGroup}, instead of pages.staticPages.{pageGroup}.
  • Archetypes for Post Categories groups are no longer nested under postPages in config.yml. The new Archetype location is simply posts.{postCategory}, instead of posts.postPages.{postCategory}.
  • Archetypes for Wiki Sections groups are no longer nested under wikiPages in config.yml. The new Archetype location is simply wiki.{wikiSection}, instead of wiki.wikiPages.{wikiSection}.


Bug Fixes

  • Fixes broken excerpt function
  • Updates FutureImperfect theme to work with new Asset Manager
  • Improves asset functions to prevent collisions with AssetRelation assets
  • Updates to Kotlin 1.3! And updates other dependencies to match

Breaking Changes

  • Updates to Kotlin 1.3. You may need to update some of your Kotlin code to work properly with 1.3.
  • Pebble template syntax for set tag has been changed. The identifier must be a plain name, evaluated expressions are no longer supported. (e.g. {% set 'identifier' = 'value' %} is not longer valid, use {% set identifier = 'value' %} instead)


This is a major release which contains numerous breaking changes. Please review the following changes carefully to make sure your site is updated properly.

New Features

  • Adds Radio Buttons as available form field types.
  • Archetypes are now auto-documented in the admin panel alongside options fields.
  • .properties files can now be used as data files, or used as the Front Matter format.
  • Netlify CMS configs are now set up to generate modular list form definitions. When this PR on Netlify CMS is merged, Orchid will already be set up to work with it.
  • Wikis can now generate offline documentation! Add createPdf: true to each Wiki section's config that you want offline docs, and Orchid will compile all the content for that section into a PDF.
  • A new Asset Management API! You can use the asset() template function to load an asset dynamically load and render an asset. Asset rendering is lazy, which allows you to transform your assets, such as rotating, scaling, or resizing an image.
  • Added a parseAs function which works similarly to compileAs, but returns parsed data instead of a rendered String.

Bug Fixes

  • Menu items were not the most intuitive, especially when trying to render a submenu that also had an index page at its root. A single menu item can now have both a page it references itself, and a list of children menu items, leaving the theme to decide how to display such a situation.
  • Fixes issue setting asset directories as Strings in config.yml.
  • Makes option types linkable in admin panel again.
  • Fixed several issues with bad configurations in Netlify CMS config, and errors using it locally with Orchid's server.
  • Prevents assets from being rendered more than once, especially when added as extra CSS or JS. Orchid now tracks the assets rendered throughout the entire build cycle, and only renders whats necessary.
  • Assets attached to Posts (and other similar objects) now reference an actual asset rather than just being Strings. These assets are rendered lazily, and so can be transformed using the normal asset transformation functions.

Breaking Changes

  • Menu classes have been renamed and its public method signatures have changed significantly.
    • OrchidMenuItemImpl is now MenuItem. In addition, creating menu items now follows a Java-style Builder pattern rather then using overloaded constructors.
    • OrchidMenuItem is now OrchidMenuFactory.
  • Default assets directory is now assets/media rather than just assets.
  • Breadcrumbs APIs have been simplified, and many of its classes have been removed. Instead of the possibility of multiple breadcrumb types, there is just a single BreadcrumbStrategy, and Orchid expects plugins to manage the breadcrumb structure by setting parent pages appropriately.
  • The Forms plugin no longer creates its own pages, and forms are only loaded from data files (.yaml, etc.). A form should link to an arbitrary submission page using a PageReference at redirectionPage.
  • Updates Orchid Gradle plugin so extra args are passed directly, instead of split and reformatted.


  • Fixes issues starting Orchid when there are params that are null


  • Fixes deadlock when trying to run Javadoc
  • Adds port and githubToken to Gradle and Maven property objects, so they can be passed as command-line properties


  • Allows Maven plugin to pass parameters through system properties


  • Adds new Maven plugin to run Orchid (thanks, @bjansen!)


  • Removes logs accidentally left in
  • More tweaks to Wiki Pages menu item


  • Various bugfixes and theming improvements for Editorial theme, and wiki, pages, and posts plugins


  • Updates dependency versions to resolve Clog version conflict


  • Fixes bug parsing Front Matter when there is no page content
  • Fixes bug processing Editorial theme assets
  • Fixes issue of Gradle plugin released with incorrect version


  • Fixes bug parsing Front Matter which left unwanted whitespace at top of file
  • Moves Javadoc execution to external library, so the plugin no longer depends on Java tools.jar
  • Adds Github Releases publisher
  • Generally improves formatting of Javadoc and Kotlindoc plugins


  • Updates rendering of Kotlindocs to fix issue with param types, and adds comments to params, receivers, return values.


  • Moves tabs and accordion tags to Core.
  • Allows users to choose a custom template for tags, similar to pages and components
  • Updates docs tag to display the same on the front end as in the admin panel
  • Adds async and defer attributes to JsPage
  • Fixes issue in search widget in Firefox
  • Adds receiver info and richer signatures to Kotlindoc


  • Changes standard ordering of collection search params to ['itemId', 'collectionType', 'collectionId'], which is more natural to think about and better matches the order in which the params would be needed.
  • Adds changelog publisher to require a changelog entry for publishing.
  • Orchid now exits with a failure status code when the deploy task deployment fails for any reason.


  • Includes Kotlindoc primary comments in searchable content.
  • Makes OrchidView class extend OrchidPage.


  • Updates rendering of Kotlindoc signatures


  • Allows attaching additional properties directly to menu items, components, and social items


  • Fixes crash using Wiki plugin when a summary page is missing


  • Fixes crash creating Author pages
  • Ignores Mac .DS_Store files at the ResourceSource level


  • Fixes bugs in querying index, and makes more useful overall
  • Adds menu items to link to pages relative to the current page, or a page queried from the index
  • Allows CSS and JS to be placed inline in a page from Front Matter
  • Updates Netlify CMS to 2.0
  • Adds descriptions to all common plugins items, like components, menu items, etc. Descriptions are viewable from admin panel, to make it easier to understand what you can do to build your site.
  • Improves styling of admin panel to be more useful


  • Adds extension method docs to Kotlin classes, bare methods in packages
  • Updates docs for Kotlindoc plugin
  • Adds global collection for external index.


  • Adds Kotlin documentation with Dokka
  • Allows page previous, next, and parent links to be overridden in Front Matter configs
  • Makes Homepage URL "pretty"


  • Adds recentPosts function, adds social links to Authors
  • Adds server port as command line arg
  • Improves how flags are parsed


This is a major release, which contains several breaking changes. Read carefully, your site might not properly if you do not update you site in line with these changes.

Notable New Features

  • OrchidJavadoc no longer requires a separate Gradle plugin! The Orchid plugin will take care of starting and running the Javadoc program and does not rely on Gradle doing it for you. This means that the com.eden.orchidJavadocPlugin Gradle plugin has been removed, and you must remove it from your build.gradle scripts.
  • Parsing command line flags now uses the same Options extraction framework as the rest of Orchid, and so is much easier to add custom flags.
  • Refactors resource source APIs to be more extensible.

Breaking Changes for End-users

  • com.eden.orchidJavadocPlugin no longer exists in v0.10.0 and above, and must be removed from your build scripts
  • FastClasspathScanner APIs have been changed significantly, and the project renamed to ClassGraph. Refer to the new ClassGraph Wiki to see how to migrate your code.


  • Makes config and data immutable once loaded, fixing stackoverflow errors when rendering 404 and directory index pages
  • Allows user-configurable regex patterns for extracting front matter, useful for putting front matter data inside a comment block to not break IDE syntax highlighting
  • Orders changelog entries properly


  • fixes crash running Orchid when build directory doesn't previously exist


  • fixes issue rendering admin pages introduced with adding the page template functions and tags


This is a major release, which contains several breaking changes. Read carefully, your site might not properly if you do not update you site in line with these changes.

Notable New Features

  • Tags can now be easily set up to used tabbed content. The Writer's Blocks plugin includes implementations for Tabs and an Accordion
  • Publishing to Github Pages now has several publishing modes, which will allow you to publish without overwriting the old site. This is perfect for managing library documentation, as it will allow you to keep the docs around for every older version of your project.
  • The data directory has been changed to config to match the config.yml file it corresponds to. In addition, you can now create a data.yml and use datafiles in the data directory to host arbitrary data used in your site. The data in data is not included as options, so there is no fear of your data accidentally changing the configuration of your site in any way, it is just data and nothing more.
  • Layouts are now much easier to set up and are more prescriptive, with no more "magic" included you need to know. Anything that should be included in your layouts is automatically documented in your admin panel's TemplateTags.

All Changes

  • Makes TemplateTags and TemplateFunctions page-aware
  • Changes Parsers to return a Map rather than a JSONObject
  • Updates Pebble to 3.0.0 release version. Adds 'serialize' method to Parsers so we can write objects back into that representation if needed
  • Caches compiled page content in the Page, frees the page directly instead of just its resource
  • Adds accordion tabbed tag. Displays tabs in the order they are parsed
  • Updates dependency versions
  • Adds Tabs tabbed tag to WritersBlocks plugin
  • Changes API of TemplateTags to support tags with inner tabs
  • Adds multiple publishing modes for GithubPages publisher, adds bean validation to all Publishers
  • Changes signature of TemplateFunctions so that filtered input is just set as an Option
  • Makes all options extraction use Maps and Lists instead of JSONObjects and JSONArrays
  • Sets up Hibernate Validator for validating classes with Options
  • Implements scripts, styles, head, and page tags to remove the 'magic' includes previously used.
  • Fixes issue in docs where bundles landing pages were not linking to their plugin pages
  • Updates to Pebble 3.0, adds custom AttributeResolver to call a 'get' method with the String attribute, which allows for accessing front matter of pages and also for JSONObjects
  • Renames 'dropdown' menu item to 'submenu'
  • Changes name of data directory to config, changes templates parameter in OrchidPage, OrchidComponent, and FormField to template

Breaking Changes for End-users

  • Changes name of data directory to config
  • changes templates parameter in OrchidPage, OrchidComponent, and FormField to template (it still accepts either a String or an array of strings)
  • Renames dropdown menu item to submenu
  • Many classes and methods have been changed in a non-backwards-compatible way. Updating should be pretty straightforward, but you may need to view the changes in the commit history to know exactly what to change.
  • Updates to Pebble 3.0.0. Old templates will still work as they did previously, but there is some new functionality available, and some behavior might be different than it was. View the Pebble changelog to know more.


  • Increases timeout for OkHttpClient, adds caching.
  • Adds support auto-generated documentation for OrchidCollections within admin panel.


  • Fixes some bugs with homepages, makes searching collections from templates easier.


New Features

  • New Breadcrumbs API
  • New Menu Item types
    • pageIds in Pages plugin
  • Helpful Kotlin extensions for registering types in OrchidModule and for resolving objects or sets from OrchidContext.


  • Manually specifies UTF-8 rather than relying on Charset.defaultCharset()
  • Overall improvements to Javadoc templates

Breaking Changes

  • Wiki no longer adds section meus by default. You can easily add them to all Wiki pages if desired in the archetype.
  • OrchidCollection.find now returns a Stream<T> instead of a List<T>. Its base class constructors have also been changed so that a Generator is now no longer necessary.


  • Improves messaging with Netlify publisher
  • Moves all plugin documentation into the main Orchid build, rather than each having separate Orchid sites. This makes it easier to and faster to build the main Orchid docs, and also allows for greater customization and automatic menu generation for each plugin's docs pages.


New Features

  • Adds new publisher
    • ghPages - Push your site to GitHub Pages

Bug Fixes

  • Extracts options before every deploy
  • Removes the full build that was done before the interactive task. Adds orchidShell Gradle task to simplify running the Orchid interactive task.


New Features

  • Adds two new publishers
    • script - Execute arbitrary shell scripts
    • netlify - Upload your site to Netlify


New Features

  • Adds API for managing deployments within Orchid. API is set up and tested, but there are no Publisher implementations yet. See docs for OrchidPublisher for building custom publishers, and Publication for how to implement and use a deployment pipeline.


  • Fixes issue where an empty config.yml caused a crash. (#123)
  • Prevents Pebble from stripping whitespace. While this may increase the resulting size of your site, it prevents some issues it was causing when using Pebble for pre-compiling Markdown and other content that is sensitive to whitespace.


  • Adds plugin to document Swift source code, OrchidSwiftdoc


  • Allows fully custom directories to be used for Javadoc sources instead of only the module's main java sources.



  • Improves asset management
    • Allows adding arbitrary assets to AssetHolders
    • You can now set alt text and title on any AssetRelation
  • Adds debug comments to pages with useful information about the classes and resources used
  • Improves permalink formatting. You can now use bracketed placeholders as part of a path segment, instead of the entire segment.


  • Fixes bugs with Social icons, where linkedin used the wrong URL, and where custom icons were not being created
  • Fixes rendering issues with server directory listing and 404


  • Fixes regressions introduced by setting up the ModularList implementations
  • Adds external URL to JavaEden/Common Javadocs


  • Refactors options extraction into fully separate library (now managed in JavaEden/Common)
  • Refactors ComponentHolder, OrchidMenu and FormFields to all inherit from a common base class of ModularList


  • Splits Gradle plugin into a base a Javadoc plugin
    • Base: com.eden.orchidPlugin
    • Javadoc: com.eden.orchidJavadocPlugin
  • Gradle plugins now use the same version as the rest of Orchid
  • Refactored options framework to make it simpler to extend and easier to use


  • Splits Gradle plugin into a base a Javadoc plugin


  • Adds collections for Javadoc classes, packages, and external pages
  • Fixes bug where asset relation did not properly apply default configs
  • Updates BsDoc theme colors to be more flexible


  • In asset relation, only apply base URL is the source isn't already an absolute URL
  • Fixes bug where drafts still showed up in recent posts lists
  • Fixes bug where pages with tags would crash Netlify CMS


  • Replaces CoreUI as the admin framework with UIkit
  • Refactors admin UI to be easier to use and more helpful
  • Fixes crash in admin UI when the SyntaxHighlighter plugin was not installed by removing all instances of the highlight tag from the admin templates


  • Improvements to tag handling in NetlifyCMS
  • Updates dependency versions


  • Adds in lazy-loaded relations as an Option type
  • Improves integration with NetlifyCMS a bit


  • Fixes bug with new Page menu item
  • Adds Authors as a Folder Collection from the Posts generator


  • Moves index generator and search functionality out of Core and into a new plugin. It is still currently up to the theme to actually implement the search with the OrchidSearch plugin.


  • ConfigArchetype now broadcasts an event so we can configure an item through code as well as in config.yml
  • Set config archetypes so they are all namespaced under their Generator's key, making it less likely to have options collisions, and also makes it easier to pull all information relevant to a plugin into a single data/ file


  • Cleans up themes styling and layouts


  • Added a lot of documentation to User Manual and for each plugin's README
  • Fixed some bugs along the way
  • Adds initial support for Netlify CMS local backend with the Orchid development server


  • Makes BsDoc theme more flexible
  • Moves Lunr search JS to core, adds it as an option to BsDoc theme
  • Allows themes to be set with custom options for a specific Generator, and improves theme assets handling so the same theme with different assets don't overwrite each other
  • Sets up Orchid Search to be more contextual. Setting the searchIndices with an array of generator keys will restrict searches to only from those indices.
  • Fixed several other bugs with themes and precompiling


  • Fixes some more bugs with Forms plugin
  • Improves display of command-line flags so sensitive values can be hidden from console
  • Updates gradle wrapper and dependency versions


  • Fixes a couple bugs with Forms plugin, adds Bootstrap form styling to BsDoc theme


  • Fixes a couple regressions with BsDoc theme's JS and favicons


  • Improves self-documentation with a much-improved admin UI
  • Adds Orchid logo to documentation site and to admin UI
  • Improves styling and layout of BsDoc theme
  • Adds support for custom 404 page and favicon


  • Improves documentation
    • Updated several Wiki pages
    • Added descriptions for all Options in all plugins, themes, and core
    • Ensures all plugin and theme Orchid sites show options for every relevant class
    • Auto-generates Admin lists for every injected set
  • Improves several APIs
    • Allows Components and Menus to directly access their current Page
    • Allows the precompiler language to be customized with a Compiler service option, instead of always being Pebble
  • Fixes some bugs
    • Fixes issue where drafts weren't being rendered, but were still leaking through the index and being added to Taxonomy archives
    • Allows pages to request not being precompiled, even when they include Front Matter
  • Moves primary site hosting to Netlify. Github Pages will probably stick around to show the latest stable release, while Netlify will be updated much more frequently, be where plugin/theme submissions are added, and include the latest development features.


  • Waits to print them until after the build has completed, to make them more noticeable.
  • Adds security manager to ensure files are only written in the input, output, and temp directories.
  • Adds collections for taxonomies so we can generate links to post tags and categories.
  • Improves templates for FutureImperfect theme a bit.


  • Allows taxonomies to get terms from page methods as lists or as arrays, which fixes bug making hierarchical post categories' archives


  • clears template cache every build
  • Fully implements hierarchical categories in Posts plugin
  • Fixes several bugs in Core and in Posts plugin


  • Adds RSS and Atom feeds to Posts plugin


  • Improves Javadocs more, adds optional stylesheet for non-bootstrap themes
  • Ironically, converts Javadoc plugin entirely to Kotlin


  • Improves styling and usability of Javadocs plugin
  • More improvements to design of documentation site
  • Sets up all single-injected classes to be able to be overridden by 3rd-party plugins, so now there is nothing that cannot be customized or extended.


  • Updates design of docs site
  • Minor bugfixes


  • Adds tag to embed Twitter tweets or timelines
  • Adds tag to embed Instagram posts


  • Creates components and menu item types for Taxonomies plugin:
    • MenuItem to display all Taxonomies
    • MenuItem to link to a Taxonomy archive, or a dropdown of the terms in the Taxonomy
    • MenuItem to link to a Taxonomy Term archive, or a dropdown of the pages in the Taxonomy Term
    • Component to link to a Taxonomy archive, or a dropdown of the terms in the Taxonomy
    • Component to link to a Taxonomy Term archive, or a dropdown of the pages in the Taxonomy Term


  • Creates Taxonomies plugin, which makes it possible to manage custom taxonomies and archives across many plugins. It was inspired by and modelled after Hugo's custom taxonomies, but adds its own spin that makes it much more flexible and powerful with Orchid's content model.
  • Removes the Category and Tag archive pages from the Posts plugin. These archives are now created with the taxonomies plugin.
  • Adds generation sitemap.xml and robots.txt in Core.
  • Adds generation of author pages for the Posts plugin. Authors that are set in the config (as before) or that have pages in posts/authors/ will have pages generated for them. Authors added to individual posts are "guest authors".


  • Adds tags for Gist and Youtube in OrchidWritersBlocks plugin
  • Adds functions for Pluralize, nl2br, and EncodeSpaces in OrchidWritersBlocks plugin
  • Adds tags for Highlight via pygments in OrchidSyntaxHighlighter plugin
  • Adds function for Load in core
  • Adds Archetypes that target specific sections of pages in the Posts, Pages, and Wiki plugins


  • Creates a new Language Extension which will include various additional Components and TemplateTags for better composition
  • Creates basic structure for generating NetlifyCMS from Orchid configuration


  • Move site About to OrchidSite class to better define site-wide data
  • Adds better self-documentation with tables of options
  • Moves AdminTheme to PluginDocs plugin
  • Adds check to make sure a Page exists for every official plugin in OrchidCore docs


  • Completely removes jTiwg as a dependency, trims down Flexmark dependencies
  • Adds API to more easily add custom Pebble tags
  • Changes Alert from a function to a tag
  • Travis CI now deploys to gh-pages branch


  • Relaxes some task dependencies that weren't necessary
  • Fixes issue of docs from subprojects not being copied to final output directory
  • Bundles release notes in the docs archives


  • Fixes issue of Travis CI Github Pages plugin suddenly breaking


  • Adds publish and expiry dates, which are used to check for time-based draft status.
  • Runs orchidBuild task on subprojects with no Java source, so that we still have all subprojects generating Orchid documentation.
  • Adds short debounce to rebuilds.
  • Deep-merges config, environment-specific config, and datafiles.
  • Adds injectable template globals.
  • Improves user manual documentation.


  • Improves design of FutureImperfect theme
  • Adds Gravatar support in OrchidPosts
  • Fixes issue of post archives being reversed
  • Allows Homepage to choose own next and previous links


  • Adds APIs to RenderService to allow for dynamic rendering modes
  • Allows StaticPages to configure its own renderMode
  • Allows StaticPages to set whether it uses a pretty URL
  • AssetsGenerator now only loads assets from local resources
  • Fixes issue of Options in kotlin having different setter names than expected, causing Options Extraction to fail
  • Improves process of adding assets to themes, pages, and components which eliminates issue of assets being added more than once
  • Adds interface for Components declared on Themes to add their assets to the theme. Previously, only Components declared on Pages had their assets added to the page.


  • Archetype objects and arrays now get merged together instead of replacing one another. Useful for site- or generator-wide Components or Menus.
  • Hides Components based on 'hidden' flag.
  • Sorts Components according to order.
  • Allows OptionsExtractor to add entire Options object to its OptionsHolder with a new @OptionsData annotated field.
  • Posts generator now supports different pagination options for each category.


  • Adds basic concept of Options Archetypes, applies it to all OrchidPage types
  • Updates dependency versions


  • Updates all plugins to Kotlin
  • Minor bugfixes and behavior improvements across all plugins
  • Sets up all plugins to generate their own reference documentation