# Docsy 0.9.0 release report

Docsy [0.9.0] is a sizable[^1] release ([containing 65+ PRs][v0.8.0...v0.9.0])
that has some breaking and notable changes worth calling out, namely those
related to:

- [Footer improvements](#footer)
- [Repository links and other page info](#page-meta)
- [Look and feel](#look-and-feel)
- [Continuous integration testing](#ci)

Thank you to all [contributors][0.9.0]!

## Footer improvements {#footer}

For a list of all footer improvements and fixes included in this release, see
[#1818]. We mention a few in this section. More footer improvements, for even
easier customization, are planned for the next [major release][#1812] ([#1852]).

### Footer layout changes {#footer-layout}

In support of easier footer customization, the footer layout has been factored
into parts: _left_, _right_, and _center_ ([#1500]), with _copyright_ as a
subpart of center ([#1817]). Each part has its own class, such as
`td-footer__left`, for easy style customization. Note that the class
`td-footer__copyright-etc` has been renamed to `td-footer__center`.

### Footer copyright date-range and more {#footer-copyright}

> Oh my! We've closed [issue #2][#2]!

This release has resolved **_the_ longest standing and first ever issue
created** in Docsy!

- [The footer should allow a more flexible copyright statement (#2)][#2] by
  [@sarahmaddox]

The footer copyright now supports a date-range and the site-copyright as a
fallback:

- The Hugo config option `params.copyright`, previously a string, can now also
  be a map with the following optional fields: `authors`, `from_year`,
  `to_year`. When unset, `to_year` defaults to the year that the site built. The
  default `authors` is "<Site.Title> Authors" and this field is rendered as
  markdown.
- If `params.copyright` is unset, then the [site `copyright`] configuration
  option will be used and rendered as markdown "as is" &mdash; with no date(s)
  added.

[site `copyright`]: https://gohugo.io/methods/site/copyright/

### Footer streamlined

- The About-page footer link is now hidden by default. To enable this link, set
  `.params.ui.footer_about_enable` to true in your project's configuration file.
  Parameter `.params.ui.footer_about_disable` is deprecated.
- The All-rights-reserved text is hidden by default. To make it visible, add the
  following to your `_styles_project.scss` [project style file] (optionally with
  a `!important` modifier &mdash; not shown):
  ```scss
  .td-footer__all_rights_reserved {
    display: inline;
  }
  ```

[project style file]: /docs/content/lookandfeel/#project-style-files

## Repository links and other page info {#page-meta}

### Repository links

Getting [repository links] right has eluded Docsy maintainers and contributors
since 2019 ([#138]). The challenge is ensuring that repository links work for
all Docsy-based projects regardless of their setup for single- or multi-language
support, or whether they have a homepage.

At last, steering committee member [Lisa]'s determination has paid off.
Half-jokingly, Lisa commented: _All we needed was several years and a few Hugo
improvements_. That is, it wasn't until [Hugo 0.112.0], released in May 2023,
that the necessary [functions] became available. For details, see:

- [Fix links for single language sites (#1744)][#1744]
- [Hugo v0.112.0 - New template functions][tmpl-func], by [@jmooring]

We're convinced that Lisa's fix has squashed repo-link bugs for good!

As mentioned in the [CHANGELOG][CL@0.9.0], this is a **breaking change** for
sites that use mounts and that have pages configured with
[path_base_for_github_subdir].

As can be seen from [Repository / page-meta link fixes and improvements
(#1841)][#1841], several issues remain, but resolving [#1744] establishes the
necessary foundation for future work. The issues listed in [#1841] will be
addressed in a future release through further layout refactoring and extension.

### Last-modified page info

You can configure your site to display page-source last-modified metadata at the
bottom of documentation and blog pages. For details, see the newly added User
Guide section [Last-modified page metadata].

[Last-modified page metadata]:
  /docs/content/repository-links/#last-modified-page-metadata

## Look and feel

### Heading self links

Docsy has switched to build-time generation of heading self links using Hugo's
`render-heading.html` [hook], replacing client-side rendering via
`assets/js/anchor.js` (dropped in [#1460]). Projects must now explicitly enable
the feature. For details, see [Heading self links].

Formerly an embedded SVG, the default self-link symbol is now CSS-defined to be
`#`, a common choice for websites. Projects can customize the appearance of the
heading self link through the [.td-heading-self-link] class.

Heading self links are now:

- Always visible on mobile and touch devices
- For other devices and screens, the link is invisible until the user hovers
  over the heading (as before)

[Heading self links]: /docs/content/navigation/#heading-self-links

### Accessibility: Links are underlined

Docsy now follows recommended **accessibility practice**: page-body **links are
underlined** by default. For details, see [#1814] and [#1815].

### Bye bye ellipsis

The [blocks/feature] shortcode no longer includes ellipsis ("...") after the
"Read more" link text. Projects wanting to recover the ellipsis can add it to
the `"ui_read_more"` [language parameter] for your site's languages ([#1820]).

## Continuous integration testing {#ci}

To ensure the quality and stability of Docsy, this release introduces a highly
anticipated developer feature: **continuous integration (CI) testing** support
through GitHub Actions.

Each PR and main-branch commit triggers ([workflows]):

- Cross-platform tests on Linux and Windows.
- Build tests to ensure that Docsy and its User Guide build successfully and
  pass checks, such as link validation.
- Smoke tests that build a Docsy site from scratch. These tests validate Docsy's
  use as both a Hugo module and an NPM module.

While Windows support is maintained on a best-effort basis due to limited access
to Windows environments, running cross-platform tests helps identify potential
build issues sooner.

This initiative is an important step forward in ensuring the reliability of the
theme. We plan to [expand test coverage (#726)][#726] in the future.

[#726]: https://github.com/google/docsy/issues/726
[workflows]: https://github.com/google/docsy/blob/main/.github/workflows

## References and future releases

For the complete list of changes in this release, see the [0.9.0] release entry
and issue
[Release 0.9.0 preparation (#1759)](https://github.com/google/docsy/issues/1759).

Which Docsy improvements are on the horizon? For work items _tentatively_ planed
for the next release, see
[Release 0.10.0 preparation (#1812)](https://github.com/google/docsy/issues/1812).

Feature and fix candidates for 0.10.0 and beyond currently include more
Bootstrap work, in preparation for the reintroduction of RTL support &mdash;
specifically:

- [BSv5.2 upgrade followup](https://github.com/google/docsy/issues/1510)
- [Upgrade to Bootstrap 5.3 (#1528)](https://github.com/google/docsy/issues/1528)
- [[BSv5] Reintroduce RTL support using RTLCSS bootstrap](https://github.com/google/docsy/issues/1442)
- [Support adding theme colors](https://github.com/google/docsy/issues/1845)

[.td-heading-self-link]:
  https://github.com/chalin/docsy/blob/849dea0790bbaef5f4f71659824f44045afcd65e/assets/scss/_content.scss#L98
[@jmooring]: https://github.com/jmooring
[@sarahmaddox]: https://github.com/sarahmaddox
[#138]: https://github.com/google/docsy/issues/138
[#1460]: https://github.com/google/docsy/issues/1460
[#1500]: https://github.com/google/docsy/pull/1500
[#1744]: https://github.com/google/docsy/pull/1744
[#1812]: https://github.com/google/docsy/issues/1812
[#1814]: https://github.com/google/docsy/issues/1814
[#1815]: https://github.com/google/docsy/pull/1815
[#1817]: https://github.com/google/docsy/pull/1817
[#1818]: https://github.com/google/docsy/pull/1818
[#1820]: https://github.com/google/docsy/issues/1820
[#1841]: https://github.com/google/docsy/issues/1841
[#1852]: https://github.com/google/docsy/issues/1852
[#2]: https://github.com/google/docsy/issues/2
[blocks/feature]: /docs/content/shortcodes/#blocks-feature
[CL@0.9.0]: /project/about/changelog/#v0.9.0
[functions]: https://gohugo.io/functions/
[hook]: https://gohugo.io/templates/render-hooks/
[Hugo 0.112.0]: https://github.com/gohugoio/hugo/releases/tag/v0.112.0
[language parameter]: /docs/language/#internationalization-bundles
[Lisa]: https://github.com/LisaFC
[path_base_for_github_subdir]:
  /docs/content/repository-links/#path_base_for_github_subdir-optional
[0.9.0]: https://github.com/google/docsy/releases/tag/v0.9.0
[repository links]: /docs/content/repository-links/
[tmpl-func]:
  https://discourse.gohugo.io/t/hugo-v0-112-0-new-template-functions/44512
[v0.8.0...v0.9.0]: https://github.com/google/docsy/compare/v0.8.0...v0.9.0

[^1]: Sizable by Docsy-release standards
