Repository navigation
kite 0.1.4
A release that settles themes: the theme contract is frozen as kite/v1, a site writes its own menus, and themes can be installed, switched and started from the command line. The studio shows a post's files, compares a conflict three ways, knows when a server is read only, and opens the preview on a phone.
Highlights
- The theme contract is frozen. What a template can call under
apiVersion: kite/v1, every method and function with its signature, is listed in theme-system.md sections 6 and 7 and from now on is only added to, never renamed, removed or changed. A theme that uses something added later names the Kite it needs withrequires. - Menus. A site writes its menus under
menusinkite.yaml, apart from any theme, so they survive a change of theme. A theme names the menus it draws intheme.yaml, and the studio's new Settings → Menus fills them in, with pages and posts picked by title. A template draws one with{{ range .Site.Menus.main }}, each link already under the site's path. The built-in theme drawsmainin its header. - Themes from the command line.
kite theme list,add(a release's zip or a folder),use,removeandnew, with the checks the studio makes.kite theme newwrites a small theme that passeskite theme verifyas it stands. - A post's files. The Files chip in the editor lists what a post's bundle publishes and what uses each file, and copies a link, replaces a file in place, which keeps every link to it, deletes one with a warning while it is used, or adds more.
- Conflicts compared three ways. When a save loses a race, the dialog lays out the version you loaded, yours and the stored one, part by part and the text by paragraph, and merges the two when they changed different parts. The merge goes into the editor unsaved, for you to look over.
- Read-only servers. A server started without
--writesays so beside the site's name, and the studio leaves out what it would refuse; reading, previewing, searching and exporting work as before. - Quieter saves. The visual editor keeps the blocks an edit left alone as the file had them, so a one-word change makes a one-line diff.
- The preview on a phone. The preview switch shows at every width, and the editor keeps its cursor and text while the preview is open.
Fixes
- A save refused because the file had changed on disk could show your own version as the stored one when the server had not read the change yet, and merging or overwriting then replaced the change unseen. The conflict now shows the file as it stands. With
--watch=false, settings refused over a changedkite.yamlreload instead of being refused until a restart. - A build replaces its output only when Kite wrote it, or when it holds this site's sitemap or feed, so a
build.outputthat names a folder of other files no longer empties it. - Wherever a session ends, in publishing, the preview, an upload or a theme install, the studio asks you to sign in again, and what you typed comes back afterwards.
- A post that gives no date shows none in the built-in theme, and its archive files it under Undated rather than the year 1.
- A draft with no publish date is previewed dated as it would be published.
- On a phone, the fields of a menu link or a docs tree group were squeezed to a few letters.
Install
Download the archive for your system below, unpack it, put kite somewhere on your PATH, and run kite run in an empty folder. On macOS, xattr -d com.apple.quarantine kite lets a downloaded program run the first time.
To run a site on a server with Docker:
docker run -d --name kite --restart unless-stopped -p 127.0.0.1:1717:1717 -v kite-data:/data ghcr.io/kite-plus/kite:0.1.4Every archive can be checked against checksums.txt, and a given commit builds to the same binary on any machine.
Upgrading from 0.1.3
Replace the binary, or pull the new image. A few things behave differently:
- A build refuses to replace a folder of files that Kite did not write: one with no record in
.kite/outputsand neither this site'ssitemap.xmlnor itsrss.xml. Pointbuild.outputat a folder of its own, or empty it once. The staging folders beside the output are now<output>.kite-stageand<output>.kite-previous. - The built-in theme, now 0.7.0, draws the site's
mainmenu in its header once the site writes one, and shows its own links until then. partialCachedtakes Hugo's variant keys after the data and draws the partial aspartialdoes.- A theme that draws menus needs this version:
requires: ">=0.1.4".
Notes
Kite is in early development; the theme contract is now the part that stays put. The reference covers the studio, themes, menus, plugins, configuration and deployment. The studio's main flows now run in a browser on every change (make e2e), which is how the conflict fixed above was found. An app center to install and update themes and plugins online is being planned in #16.
Every change in this release
Changelog
Features
- 5e6fd06: feat(api): list and replace a bundle's files (@amigoer)
- 14e4f8a: feat(cli): list, add, switch and start themes (@amigoer)
- 8b7e091: feat(editor): compare three versions in a conflict (@amigoer)
- 6b413f9: feat(editor): let a phone open the preview (@amigoer)
- a900016: feat(editor): manage the files a post keeps (@amigoer)
- 5fc6e9f: feat(theme): freeze the theme contract as kite/v1 (@amigoer)
- e7bbeec: feat(theme): let a site write its own menus (@amigoer)
- 536c63c: feat(web): leave writes out on a read-only server (@amigoer)
Fixes
- 7172142: fix(api): answer a conflict from the file on disk (@amigoer)
- 9ef5b9a: fix(build): replace only an output kite wrote (@amigoer)
- e94d261: fix(editor): keep the blocks an edit left alone (@amigoer)
- 8776a6e: fix(serve): preview a draft dated as if published (@amigoer)
- 664036a: fix(theme): show no date for a post without one (@amigoer)
- e2f32e4: fix(web): let an open tree row's fields fill it (@amigoer)
- 0870de4: fix(web): sign in again wherever a session ends (@amigoer)
Documentation
Other
Install
Download the archive for your platform, or pin the version in a project
so that local builds and CI agree:
./kitew build
Verify a download against checksums.txt before running it.