Repository navigation
Releases: kite-plus/kite
Release list
kite 0.1.10
A release that connects a site to GitHub: give a fine-grained token for one repository, and Kite sets up the rest, from the studio or the command line, in a container too. It also fixes pictures whose file names hold spaces, Ctrl+B in the editor, and listings that answered 404 before they listed anything.
Highlights
- Connect GitHub. System → Deploy has a Connect GitHub card, and
kite github connect owner/namedoes the same from a terminal. Given a fine-grained token for that repository alone, with Contents, Workflows and Pages: read and write (the card links to GitHub's form with them filled in), Kite starts a git repository and addsoriginwhere there are none, writes the deploy workflow where there is none, commits the site's own files, turns Pages on with GitHub Actions as its source and pushes. A site run in Docker no longer needs an ssh key or a git identity: commits are made by the connected account at its noreply address. Whatever a connect would have to refuse, a token GitHub does not take, a repository it cannot see, one with commits of its own while the site has none, anoriginthat points elsewhere, it refuses before changing anything (#15). - The token stays put. It is kept in
.kite/secrets/github.json, readable by its owner alone, or given inKITE_GITHUB_TOKEN, which wins. It goes to github.com with pushes over https and with the studio's questions about deployments, and nowhere else: git gets it through its environment, never in a file or among a command's arguments. With it, the studio also follows deployments of a private repository, and has 5,000 requests an hour to do it instead of 60.kite githubsays where things stand, andkite github disconnectforgets the kept token. - Pictures named with spaces. The visual editor wrote a picture or a link to a file whose name holds a space, as a screenshot's does, in a form markdown reads as text, so the site and the editor showed the raw line (#18). Such addresses are now written in angle brackets. A line saved before needs mending by hand: put the file name in angle brackets, or insert the picture again from Files.
- Ctrl+B makes text bold. Ctrl+B and Cmd+B no longer also fold or unfold the sidebar while you type (#17).
- Empty listings. A kind's listing and a taxonomy's page are published before they list anything, so a theme's link to
/posts/or/tags/no longer answers 404 on a new site (#19). Until they list something, the sitemap leaves them out.
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.
kite 0.1.9
Changelog
Features
- 5524ae4: feat(build): name kite in every page's head (@amigoer)
- 9902924: feat(build): warn when the base url is empty (@amigoer)
- 0bdd034: feat(cli): add kite ping (@amigoer)
- 43dea97: feat(cli): ask in init whether to tell explore (@amigoer)
- 52f3564: feat(cli): ping from the deploy workflow (@amigoer)
- 94665aa: feat(config): add publish.ping for update services (@amigoer)
- 8a7aa00: feat(feed): add a post's cover as media content (@amigoer)
- 0b21139: feat(feed): carry a post's terms as categories (@amigoer)
- 46ee6f4: feat(feed): date the channel by its newest post (@amigoer)
- 9c635ad: feat(feed): give the feed its own address (@amigoer)
- 411de24: feat(feed): name kite as the generator (@amigoer)
- 8a8c4d0: feat(feed): prefer a post's own description (@amigoer)
- d0867c2: feat(publish): ask the site whether a push is live (@amigoer)
- 6a235ee: feat: start new posts in a default category (@amigoer)
Fixes
- 9af02f0: fix(feed): list the newest posts first (@amigoer)
- a7a15fb: fix(feed): mark the guid as no permalink (@amigoer)
- 0a6f61e: fix(publish): ask github at most once a minute (@amigoer)
- 93e223e: fix(publish): report deployments beyond pages (@amigoer)
- 04573ac: fix(web): put remove on the card, not in a menu (@amigoer)
- e79f533: fix(web): show installed plugins with their icons (@amigoer)
- 4d43edb: fix(web): show reset all as a button when customizing (@amigoer)
Documentation
- 152206b: docs: bring the roadmap up to 0.1.9 (@amigoer)
- 5363cbb: docs: describe pings, the feed and the generator (@amigoer)
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.
kite 0.1.8
A small release for the app center: each plugin shows its own icon, and checking the index again says what it found.
Highlights
- Plugin icons. The app center draws each plugin with its own icon, on its card and in its details, instead of the same puzzle piece for all. The index names the icon, from the plugin's repository at its newest version, and Kite fetches it as it fetches a theme's screenshot, so the browser still never reaches the index's addresses. An SVG icon is checked to run and fetch nothing, and is served sandboxed besides. A package's author adds one line,
icon: docs/icon.svg, to its entry in kite-plus/apps. - Check again says what it found. The app center's Check again button now answers with a message: how many installed themes and plugins can be updated, or that none can, and a warning when the index could not be reached.
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.8Every archive can be checked against checksums.txt, and a given commit builds to the same binary on any machine.
Upgrading from 0.1.7
Replace the binary, or pull the new image; nothing a site has changes. A site that pins 0.1.7 in kite.lock keeps deploying with it until you run kite wrapper, or choose to build with 0.1.8 under System → Deploy in the studio.
Notes
Kite is in early development. The four official plugins already had their icons in their repositories, so they show them without new releases of their own.
Every change in this release
Changelog
Features
- 8b88376: feat(apps): serve the icon the index names (@amigoer)
- c372758: feat(web): say what checking the index found (@amigoer)
- 472bfed: feat(web): show each plugin's icon (@amigoer)
Documentation
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.
kite 0.1.7
A release that pins the Kite a site builds with: kite.lock names the release, and kitew, written beside it, downloads that release, checks it and runs it, so the author's machine and the deploy build every commit with the same Kite.
Highlights
- kitew.
./kitew build, orkitew.ps1on Windows, runs the Kite releasekite.lockpins. The first time on a machine it downloads the release from GitHub, checks the archive against the release'schecksums.txtand that list against the sha256kite.lockrecords for it, and keeps the binary in the user's cache. A release whose files no longer match the pin is refused rather than run.KITE_DOWNLOAD_URLnames a mirror. - New sites are pinned.
kite init, and the setupkite runopens in a browser, writekitewandkitew.ps1and pin the release that ran them. The deploy workflow they write builds withsh ./kitew buildinstead of installing Go and compiling Kite on every deploy: faster, and the same bytes the author previewed with. - Moving the pin.
kite wrapperpins the running Kite, or the release--versionnames. When the Kite you run is not the one pinned,kite build,kite serveandkite doctorsay so, and System → Deploy in the studio shows which release builds the site and offers to build with the one running. Nothing changes until you say so. - Cloudflare Pages. The reference describes building a site there with
sh kitew build.
Fixes
kite.lockis published now. An install from the index wrote it, but neither the studio's publish norkite publish --allcommitted it, so a clone could not tell where its themes and plugins came from.- The container image builds the studio and the binary on the build machine's own platform. The arm64 image built them under emulation, where
pnpm installcould hang, as it did for 0.1.5 and 0.1.6.
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.7Every archive can be checked against checksums.txt, and a given commit builds to the same binary on any machine.
Upgrading from 0.1.6
Replace the binary, or pull the new image.
- A site made before 0.1.7 pins nothing, and its deploy workflow keeps installing the Kite it names. To pin it, run
kite wrapperin the site, commitkitew,kitew.ps1andkite.lock, and change the workflow's build step fromkite buildtosh ./kitew build, removing the steps that install Go and Kite.kite doctorlists what is left to do. kite.locknow shows among what Kite publishes; if an earlier install from the index left it uncommitted, publish it once.
Notes
Kite is in early development. The reference covers kitew, kite wrapper and Cloudflare Pages. Builds that skip what has not changed are the rest of M6.
Every change in this release
Changelog
Features
- 12c8161: feat(api): pin the running release (@amigoer)
- 887989b: feat(cli): build with the pinned release via kitew (@amigoer)
- f5dd766: feat(lock): pin the kite release of a site (@amigoer)
- 5d5b202: feat(web): show which kite builds the site (@amigoer)
Fixes
- 95f4cd5: fix(docker): build on the runner's own platform (@amigoer)
- bc88bf3: fix(kitew): work in windows powershell under pwsh (@amigoer)
- c7d4b7f: fix(publish): publish kite.lock with its packages (@amigoer)
Documentation
- 3bfb676: docs: bring the roadmap up to 0.1.7 (@amigoer)
- e8a233f: docs: describe kitew and the pinned release (@amigoer)
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.
kite 0.1.6
A release that signs the app center's index: Kite now uses only an index signed with the key it carries, so a CDN or a mirror that serves the index cannot change what a site installs.
Highlights
- A signed index. kite-plus/apps signs
index.jsonwith minisign, and Kite carries the public key. An index whose signature is missing or does not match is not used, from the studio or the command line, and neither is one older than an index Kite has already used, which is how a copy from before a version was withdrawn would be passed off as current. The signed index names every archive by its sha256, so the signature vouches for the packages as well. When a fresh copy is refused, the one kept from the last good fetch stays in use, and Kite says so. - An index of your own.
apps.keyinkite.yaml, orKITE_APPS_KEY, names the public key of an index you sign yourself, asminisign -Sm index.jsondoes. A copy of Kite's own index needs no key: served with itsindex.json.minisigbeside it, it is checked with Kite's key.
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.6Every archive can be checked against checksums.txt, and a given commit builds to the same binary on any machine.
Upgrading from 0.1.5
Replace the binary, or pull the new image.
- With Kite's own index nothing changes: it is already signed. The copy 0.1.5 kept in
.kite/cache/appshas no signature, so it is fetched again the first time. - An index of your own, named by
apps.indexorKITE_APPS_URL, now has to be signed: a copy of Kite's index keepsindex.json.minisigbesideindex.json, and an index you build yourself is signed with your own key, named inapps.key. Until then Kite refuses it, and installing by name from it stops.
Notes
Kite is in early development. The reference covers the signature and keys for an index of your own. The rest of the app center's plan is tracked in #16.
Every change in this release
Changelog
Features
Documentation
- adf99c0: docs(design): close what 0.1.5 settled (@amigoer)
- b09c6e6: docs: bring the roadmap up to 0.1.6 (@amigoer)
- 3ae448f: docs: describe the signed index (@amigoer)
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.
kite 0.1.5
A release that brings the app center: themes and plugins are found, installed and kept up to date by name, from the studio and the command line, out of an index anyone can list a package in.
Highlights
- The app center. The studio's System → App center lists the themes and plugins in the index, with a search, official and community packages told apart, and every version of each. Before a package is installed it says which other sites it has readers' browsers load from, and for a plugin how many pieces of code it puts on pages and which hooks it runs. The theme and plugin pages mark what has a newer version, and a theme can be previewed on the whole site as soon as it is installed.
- By name from the command line.
kite theme add vaneandkite plugin add searchinstall the newest version that works with the running Kite, or the one asked for asname@version.kite apps search,outdatedandupdatelook through the index and keep what a site installed up to date. - kite.lock. What came from the index is recorded beside
kite.yaml: the version, the index and archive it came from, the archive's checksum and a digest of the files as installed. The files stay inthemes/andplugins/and are committed with the site, so a build never needs the network. An update leaves alone a package you changed by hand unless told to replace it, and a plugin whose new version loads from another site, runs another hook or injects more code is updated only once that is agreed to.kite doctorreports packages changed since they were installed. - Checked downloads, fetched by Kite. The index names every archive by its sha256, and Kite checks the bytes before it unpacks them, then checks the package as it checks an uploaded one. The server fetches the index, the archives and the screenshots, so the browser never reaches their addresses; without a network the copy kept is used, and Kite says how old it is.
apps.indexinkite.yaml, orKITE_APPS_URL, names an index of your own. - Packing a release.
kite theme packandkite plugin packwrite the zip a release carries, holding only what a site uses, the same bytes every time.kite theme verifynames the other sites a theme's pages load from, andkite plugin verify --jsonreports what a plugin does to a site.
The index
The index is built in kite-plus/apps and lists the six official packages to begin with. Anyone can list a theme or a plugin with a pull request that adds a three-line entry. Every version is checked as Kite checks a package, copied into a tag of its own and served by jsDelivr, and a version that asks for more than the one before waits for a maintainer. Its README says how to list one.
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.5Every archive can be checked against checksums.txt, and a given commit builds to the same binary on any machine.
Upgrading from 0.1.4
Replace the binary, or pull the new image. Nothing a site already has changes:
- Themes and plugins installed before are left as they are, with no record in
kite.lock. One whose homepage is the repository the index names is still offered updates, andkite apps updaterecords it once its files match the index's copy of its version. - Installing or removing a theme or a plugin writes
kite.lockwhen there is something to record; commit it with the rest of the site. Akite.lockthat cannot be read stops installs until it is fixed or deleted.
Notes
Kite is in early development. The reference covers installing by name, kite.lock and the app center. Signing the index and every package comes next, tracked in #16.
Every change in this release
Changelog
Features
- 56427c7: feat(api): install and update from the index (@amigoer)
- 02c162d: feat(cli): install and update packages by name (@amigoer)
- 1a63046: feat(cli): pack themes and plugins for the index (@amigoer)
- 15d956b: feat(store): record index installs in kite.lock (@amigoer)
- 88379fe: feat(web): add the app center (@amigoer)
Documentation
- 1669ff7: docs(design): mark the app center index as live (@amigoer)
- 313ee03: docs(design): plan the app center (@amigoer)
- b00e247: docs: bring the roadmap up to 0.1.5 (@amigoer)
- 834afa9: docs: describe installing by name and kite.lock (@amigoer)
- 23fc75e: docs: describe the studio's app center (@amigoer)
- 89814b3: docs: say that kite/v1 is frozen (@amigoer)
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.
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.
kite 0.1.3
A release for building out a site: shortcodes drawn by templates, pictures a theme can resize and write as WebP, kinds of content of a site's own, and themes that say their words in the site's language. Photos added in the studio no longer publish where they were taken.
Highlights
- Shortcodes.
{{< figure src="river.jpg" >}}, or a pair such as{{< note >}}and{{< /note >}}, callslayouts/_shortcodes/<name>.htmlin the site or its theme. The syntax is Hugo's, so content moved from a Hugo site keeps working once the templates are there. A template reads its parameters with.Get, and what a pair encloses, rendered as markdown, with.Inner.{{</* note */>}}shows a tag as written. - Pictures for themes. A bundle's files are in
.Resources, andimg.Resize,img.Fit,img.Fill,img.Crop,img.Formatandimg.Qualitymake a smaller, cropped or WebP copy of a picture, made once and kept in.kite/cache/images/. A photo is turned upright as its EXIF says, and a copy carries none of its EXIF. JPEG, PNG, GIF and WebP are read and written in pure Go, so a laptop and a CI runner publish the same bytes.layouts/_markup/render-image.htmldraws the pictures of a post's text, as in Hugo. - Kinds of content of your own.
content.typesinkite.yamldeclares kinds beside posts and pages, such as projects or books: their folder, address, templates, taxonomies and fields, which the studio draws as a form, an order by date or byweight, and whether they are in the feed. - Themes speak the site's language. A template says a word with
{{ T "read_more" }}from the theme's language packs, with plural forms and values in it, and a site's owni18n/<lang>.yamlrewords any of them without replacing a template. The built-in theme speaks English and Chinese this way. - Listings page as a theme needs.
paginationintheme.yaml, orbuild.paginationinkite.yaml, sets how many items each kind of listing puts on a page, and0puts them all on one, for a home page or an archive. - Photos lose their location. A photo added in the studio loses the GPS of its EXIF and XMP before it is stored, in JPEG, PNG, WebP and AVIF, and the studio says so. Its orientation, camera and date stay, and its pixels are not touched.
- One tag however it is written. Go, go and GO are one tag at
/tags/go/, whose page lists every post carrying it, and its card in the studio names the other spellings. Renaming it writes every spelling the new way.
Fixes
- Tags written in different cases no longer overwrite each other's page, where one spelling's posts went missing from build to build.
- An absolute
build.outputorKITE_BUILD_OUTPUTis used as it stands rather than nested inside the project. - A build refuses an output that would replace the project, its content or its
.kitefolder, where it used to put the site in their place. - A theme without
home.html,taxonomy.htmlorterm.htmldraws those pages withlist.html, as the theme contract says.
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.3Every archive can be checked against checksums.txt, and a given commit builds to the same binary on any machine.
Upgrading from 0.1.2
Replace the binary, or pull the new image. A site's index is rebuilt the first time it opens. A few things behave differently:
- A shortcode with no template stops the build and names the file and line, where its tag used to be published as text. A site moved from Hugo writes templates for the built-in ones it calls, such as
figureandyoutube; the reference shows how. - A post that calls shortcodes opens in the editor's source view, since the visual editor cannot keep the tags.
- The built-in theme, now 0.6.0, says its words from language packs. A site that replaced its
_partials/t.htmlrewords it withi18n/<lang>.yamlinstead, and "1 words" is now "1 word". - A heading ending in a picture or a shortcode loses a trailing
-from its anchor. - A theme that uses
T,pagination,.Resources,img.*or the render hook needs this version:requires: ">=0.1.3".
Notes
Kite is in early development, and things may still change from one version to the next. The reference covers the studio, themes, plugins, configuration and deployment, and now shortcodes and content types.
Every change in this release
Changelog
Features
- cb0843d: feat(api): take the place out of uploaded photos (@amigoer)
- 18077f2: feat(build): let each listing decide how it pages (@amigoer)
- 840ffb9: feat(content): let a site declare its own types (@amigoer)
- db3941a: feat(markdown): draw shortcodes with templates (@amigoer)
- 2fcf4cd: feat(markdown): let a site draw a body's pictures (@amigoer)
- 269838b: feat(theme): add T to say a theme's words (@amigoer)
- 40bb45d: feat(theme): make pictures from a page's bundle (@amigoer)
- bc83db3: feat(theme): read and write WebP in pure Go (@amigoer)
- 7a5faf0: feat(web): show the other ways a term is written (@amigoer)
Fixes
- db476ff: fix(build): make terms at one address one term (@amigoer)
- cfef86a: fix(build): refuse to build over the project (@amigoer)
- 8297a0a: fix(build): use an absolute output as it stands (@amigoer)
- 4519449: fix(theme): fall back to list.html for listings (@amigoer)
Documentation
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.
kite 0.1.2
A release for moving in: a Hugo site's content opens with its posts, summaries, anchors and old addresses intact, a Hexo site comes over with one command, and a draft saves itself as you write.
Highlights
- Bring a Hugo site as it is. Posts written as single files,
content/posts/hello.md, are read as posts, where they used to be left out without a word. Asummaryin front matter is the description, and a line holding<!--more-->ends the excerpt. Files kept in a bundle's folders, such asimages/, are published with it. Headings are anchored by their text, as Hugo and GitHub anchor them, so## 近况is at#近况. - Old addresses keep working. Each path listed under
aliasesgets a page that sends a reader on to where the item is now and tells search engines which address to keep. It is a page rather than a redirect of the host's, so it works on GitHub Pages too.build.feedAliaseswrites the feed to the files readers subscribed at, such as Hugo'sindex.xml. - Import a Hexo site.
kite import hexo ../old-blog blogreads a Hexo site and leaves it as it is. Posts and drafts become bundles holding their asset folders' files, pages become pages, the rest ofsource/becomes the site's static files, and every address Hexo published at becomes an alias. Asset tags become markdown, and the items still holding other Hexo tags are listed. - Drafts save themselves. Every edit is kept in the browser until it is saved, and comes back after a crash or a closed tab. A draft is written to its file a moment after you stop typing. Several pictures picked at once all arrive.
- Covers on cards. A page in a list carries its front matter, word count and pictures, so a theme's cards can show covers and reading times.
.Imageslists the pictures of a post's text, for a cover when none is named, and No cover in the editor writescover: false. - Pages under a path. A slug may hold a path: a page whose slug is
projects/tidelineis published at/projects/tideline/. - For themes. Dates in front matter reach templates as times and numbers as integers, on a page and in a list alike, and
time.AsTimereads a date written as text.math.*keeps integers whole, so a count compares with the8a template writes, andmath.Intandmath.Floatconvert.coll.*andstr.Jointake any list,.Pagesincluded.
Fixes
- Saving an item in the studio no longer rewrites the dates in its front matter as quoted strings.
- A picture dropped on a page, or on a post kept as a single file, goes among the site's own files instead of being refused.
- Typographer quotes and dashes no longer reach excerpts and word counts as entities.
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.2Every archive can be checked against checksums.txt, and a given commit builds to the same binary on any machine.
Upgrading from 0.1.1
Replace the binary, or pull the new image. A site's index is rebuilt the first time it opens. A few things behave differently:
- Heading anchors follow the heading's text. A heading in Chinese or another non-Latin script was
#heading,#heading-1and so on, and is now its own text; a few ASCII headings holding an underscore or a link change as well. Links into sections from elsewhere need the new anchors. math.Divof two integers drops the remainder, as in Hugo and Go; write one of them as a float,7.0, to keep the fraction.coll.*returns a list of the element type it was given, andcoll.Lenrefuses a value it cannot count rather than counting it as 0.- An item at another page's address, such as a page called
posts, and an alias at another page's address stop the build and say which, where one used to be published over the other.
Notes
Kite is in early development, and things may still change from one version to the next. The reference covers the studio, themes, plugins, configuration and deployment, and now moving from Hugo and from Hexo.
Every change in this release
Changelog
Features
- edf24f2: feat(build): write the feed where it used to be (@amigoer)
- 4413193: feat(cli): import a Hexo site (@amigoer)
- c32b762: feat(markdown): end the excerpt at a more divider (@amigoer)
- c197f15: feat(render): list the pictures of a page's body (@amigoer)
- 5af77ca: feat(store): read posts written as single files (@amigoer)
- b1d08ab: feat(web): let a post go without a cover (@amigoer)
- 72f8ab0: feat(web): save drafts as they are written (@amigoer)
Fixes
- c08d59c: fix(api): keep front matter dates as dates (@amigoer)
- e596d61: fix(build): give an old .html address its page (@amigoer)
- e734bed: fix(build): give listed pages params and length (@amigoer)
- 9398519: fix(build): publish a redirect page at every alias (@amigoer)
- d7ba7c3: fix(build): publish files in a bundle's folders (@amigoer)
- ef995cc: fix(index): keep the types of front matter values (@amigoer)
- 2fbef34: fix(markdown): anchor headings by their text (@amigoer)
- 69b953e: fix(markdown): read typographer entities as text (@amigoer)
- 189bae2: fix(store): read Hugo's summary as the description (@amigoer)
- df43b5b: fix(store): serialize writes to a project (@amigoer)
- a007d99: fix(theme): let math and coll take typed values (@amigoer)
- 1327c77: fix(url): read a slash in a slug as a path (@amigoer)
- 21cf40e: fix(web): keep every image picked at once (@amigoer)
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.
kite 0.1.1
A studio release: the editor gives the text the whole page, a theme's settings get a page of their own with the preview beside them, and the dashboard says in a sentence how far publishing has got.
Highlights
- Write with the whole page. The panel beside the editor is gone, and an item's settings sit where a reader meets them: the cover above the title, the summary under it, and the categories, tags, address, template and pinning as chips below, each opening a small popover. Status, the publish date and deleting open from the status in the header. The sidebar folds to its icons while you write and comes back when you leave.
- Links edited where they are. A link the caret is in shows a bubble under it to change, open or remove its address, and typing inside a link no longer jumps to the toolbar.
- Theme settings, page by page. Each section of a theme has a page of its own, with the preview beside the form. The preview follows the section to the page it is about, draws the desktop layout at any window size, and outlines what a change touched. Lists are edited as rows, trees or cards by what their entries hold, and rows drag by a handle.
- One name for you. Setup and
kite initask for your name and write it as the site's author, and the studio shows it at the foot of the sidebar, with local mode as a badge beside the site's name. - Publishing at a glance. The dashboard's publishing card says whether the site is up to date and what it takes if not, marks each step as it stands, and offers the one next step.
- Settings in plain sight. Site, theme and appearance are listed in the sidebar rather than folded under Settings, and the account sits at its foot. Most pages of the studio end with a footer naming the version, with links to the docs, the source and the issue tracker, and a phone's header shows Kite's mark.
- For themes. A highlighted code block carries
data-langwith the language its fence gave, so a theme can label it, as the docs theme Vane does. A section of a theme's settings can name the page it previews withpreview:home,post,pageorposts.
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.1Every archive can be checked against checksums.txt, and a given commit builds to the same binary on any machine.
Upgrading from 0.1.0
Replace the binary, or pull the new image. A site and its files need no change. The author's name now lives in site.author; a name an older profile kept is shown until one is saved.
Notes
Kite is in early development, and things may still change from one version to the next. The reference covers the studio, themes, plugins, configuration and deployment.
Every change in this release
Changelog
Features
- 0be2f40: feat(render): name the language of code blocks (@amigoer)
- 35b2571: feat(schema): let a section name its preview page (@amigoer)
- e6cf4ec: feat(web): close each page with a footer (@amigoer)
- 186e61c: feat(web): edit lists as rows, trees and cards (@amigoer)
- 3bf36db: feat(web): give theme settings a page of their own (@amigoer)
- 3119ea5: feat(web): list every setting in the sidebar (@amigoer)
- c1944bf: feat(web): name the account after the site author (@amigoer)
- e8f0d84: feat(web): outline each change in the preview (@amigoer)
- 83e34a8: feat(web): pin and delete without a menu (@amigoer)
- 1958141: feat(web): replace the account menus with buttons (@amigoer)
- f354983: feat(web): set an item's details where they show (@amigoer)
- d2cf383: feat(web): show local mode by the site name (@amigoer)
- 5def2ab: feat(web): show the mark on phones (@amigoer)
- 62894bb: feat(web): tell how far publishing has got (@amigoer)
- cd84bb3: feat: make your name the site's author (@amigoer)
Fixes
Refactors
Documentation
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.