# 0.4.0

> Adds search, find and replace, an outline, backlinks and page resources to the editor, and shows what a publish will change before it happens.

Source: https://hugokit.com/changelog/0.4.0/
Updated: 2026-08-28

---


<!-- INTERNAL RELEASE EVIDENCE – retained with the published note.

     Built on branch nat/2026-08-09 (657e315 → c3465f1), merged to main.
     Gate: `xcodebuild test -project HugoKit.xcodeproj -scheme HugoKit
     -destination 'platform=macOS'` → ** TEST SUCCEEDED **, exit 0,
     839 passed / 0 failed, against a 614/0 baseline on 517ea1f.
     192 new @Test functions across eleven suites, all passing; the two
     warnings in the log come from appintentsmetadataprocessor, not the code.

     Cards closed in plan:hugokit/0-4-0 – E-06, E-07, E-08, E-09, E-10, E-11,
     E-12, M-11, M-12, M-13, P-01, P-02.

     E-13 landed after that historical gate at app commit cd9f691. Focused
     TextFinderTests: 3/3. A clean full gate moved from 806 cases / 840 runs
     before E-13 to 809 cases / 843 runs: 0 failed, 0 skipped and 0 runtime
     warnings. Read in the app: ⌘F opened the native find bar inside the Raw
     sheet. ContentList's ⌘F shortcut remained unchanged.

     - E-07 search: substring, case- and diacritic-insensitive over title,
       section and relative path; the whole trimmed query is one needle.
       15 tests. Read in the app: "5 of 37 files" on hugokit-website.
     - E-08 changed content: porcelain parsing with --untracked-files=all and
       git's octal path quoting; read-only. 24 tests. Read in the app: New and
       Modified badges on the correct rows.
     - E-09 outline: ATX only – setext is excluded because an underline cannot
       be told from a thematic break without the paragraph above it. 26 tests.
       Read in the app: clicking a heading moved the caret to `## Publish`.
     - E-06 archetypes: site over theme, directory over file, and the path Hugo
       is given. 20 tests. Read in the app: a directory archetype created a
       folder with index.md and the archetype's extra file.
     - E-10 backlinks: ref/relref plus relative markdown links to content files.
       Permalinks and custom shortcodes are excluded on purpose – A-02 already
       established that a permalink's destination cannot be computed here.
       38 tests. Read in the app: the empty state on a page with no incoming
       links.
     - E-11 page resources: Quick Look, Reveal in Finder, insert reference.
       11 tests. Read in the app: the Quick Look panel opened on a bundle file.
       `quickLookPreview` is QuickLook's extension on View, not SwiftUI's – the
       missing import was one of two build errors, fixed in c3465f1.
     - E-12 translations: nothing is grouped without configured languages,
       because hello.da.md on a single-language site is a page called hello.da.
       17 tests.
     - P-01/P-02: added and changed are counted apart, which the transport does
       not need; targets that publish by pushing a commit are marked unavailable
       rather than shown with an empty plan. 19 tests. Read in the app:
       2 deleted, 287 added, 76 changed, 28.8 MB on the FTP target.
     - M-11 fast render: the field was decoded and passed to hugo server long
       before anything could set it. 9 tests.
     - M-12 repository name: the name derivation is the helper "Import from Git
       URL" already uses; the new decision is which remote to ask. 9 tests.
       Read in the app: "hugokit-website main 7 uncommitted changes".
     - M-13 string catalog: project.pbxproj is untouched – HugoKit/ is a
       PBXFileSystemSynchronizedRootGroup, so the catalog is picked up on its
       own. Keys are symbolic, which is what makes the 4 tests able to prove
       the catalog reached the bundle.

     Not in the published note, deliberately: the type-check timeout in
     ContentFilePreviewSheet. It existed only on the night branch between
     04fc349 and c3465f1 and never reached a released build, so it would tell
     readers about a fault they never had.

     Release preparation reconciles this note with the final source commits and
     publishes the appcast only after the verified GitHub artifact is public. -->

0.4.0 puts search, find and replace, an outline, backlinks and page resources in the editor, and adds a publish plan listing what each target will add, change and delete before anything is sent.

## New

- **Search in Content:** find a page by title, section or path without leaving the list. Matching is substring, and ignores case and diacritics, so `cafe` finds `café`. ⌘F puts the cursor in the field.
- **Find and replace in Raw:** with the Raw editor active, ⌘F opens the native find bar inside the file sheet and ⌥⌘F adds replace controls. The bar supports case-sensitive and whole-word matching, Replace All is one undo step, and nothing reaches disk until **Save**. With no editor active, ⌘F still searches the Content list.
- **Changed content:** a filter for the pages git reports as new, modified, renamed or deleted since the last commit, with the word for which on each row. The filter is absent on a site without git, and deleted pages are named rather than left out.
- **Document outline:** a panel beside the editor lists the document's headings, indented by level. Clicking one moves the cursor to that line. Off by default, and headings inside code fences or front matter do not count.
- **Backlinks:** the front matter inspector shows which pages link to the one you have open, and on which line. It counts `ref` and `relref` shortcodes and relative markdown links to content files, and says so.
- **Page resources:** the files in the open page's bundle, with Quick Look, Reveal in Finder and insert-a-reference at the cursor. Asking from the rendered preview switches to Raw first.
- **Archetypes in New Content:** choose one of the site's own content templates, or the first configured theme's, and HugoKit passes it to `hugo new content` as `--kind`. A directory archetype is asked for as a folder, so Hugo creates a leaf bundle with the archetype's files inside it.
- **Review Changes:** a sheet beside Publish works out what publishing would add, change and delete on each target, with the paths behind a disclosure and the byte count underneath. Deletions lead. Nothing is uploaded, and Publish behaves exactly as before.
- **Translations:** a site with configured languages can group a page's translations onto one row, which names the other languages. Read-only, and the site's own filename convention is never rewritten.

## Improved

- **Fast render:** Hugo's fast render mode can now be switched off from the server settings. It rebuilds the whole site on every change instead of only the page you are viewing, which avoids the stale output partial rebuilds can leave behind.
- **The Git line in Deploy:** now names the repository in front of the branch, so two sites on `main` with uncommitted work are told apart at a glance. The name is omitted when the remote cannot be read.

## Notes

- **Interface text:** the server's action buttons read their text from a string catalog. The words are the same; a translation would start here.
- **Requirements:** macOS 26 (Tahoe) or later.


---

From [HugoKit](https://hugokit.com/) – HugoKit is a Mac app for running Hugo sites locally and publishing them to GitHub Pages, FTP or SFTP.
