Skip to content

Releases: thebigasif/khalid

v1.3.2

Choose a tag to compare

@github-actions github-actions released this 04 Nov 02:06
adb10cf

Binaries for Linux (x86_64 and ARM, fully static), macOS (Apple silicon and Intel) and Windows. Each one holds the admin. Check a download against SHA256SUMS.
The Docker image is ghcr.io/thebigasif/khalid, tagged with this version.
What changed is in CHANGELOG.md.

v1.3.1

Choose a tag to compare

@github-actions github-actions released this 03 Nov 08:35
70d2317

Binaries for Linux (x86_64 and ARM, fully static), macOS (Apple silicon and Intel) and Windows. Each one holds the admin. Check a download against SHA256SUMS.
The Docker image is ghcr.io/thebigasif/khalid, tagged with this version.
What changed is in CHANGELOG.md.

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 01:56
c30f0b4

Binaries for Linux (x86_64 and ARM, fully static), macOS (Apple silicon and Intel) and Windows. Each one holds the admin. Check a download against SHA256SUMS.
The Docker image is ghcr.io/thebigasif/khalid, tagged with this version.
What changed is in CHANGELOG.md.

Khalid 1.2.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 10:47
b7a13e5

Binaries for Linux (x86_64 and ARM, fully static), macOS (Apple silicon and Intel) and Windows. Each one holds the admin. Check a download against SHA256SUMS.
The Docker image is ghcr.io/thebigasif/khalid, tagged with this version.
What changed is in CHANGELOG.md.

Khalid 1.1.1

Choose a tag to compare

@github-actions github-actions released this 02 Nov 02:36
ffabcac

Binaries for Linux (x86_64 and ARM, fully static), macOS (Apple silicon and Intel) and Windows. Each one holds the admin. Check a download against SHA256SUMS.
The Docker image is ghcr.io/thebigasif/khalid, tagged with this version.
What changed is in CHANGELOG.md.

Khalid 1.0.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 04:10
5cb037d

Khalid 1.0.0

This is the first stable release of Khalid. It holds everything in 0.9.1, plus the fixes found by walking a new user's path from install to a published post. Every change is listed in CHANGELOG.md under 1.0.0.

Stable means the file formats, the command line and the APIs are now kept. A later 1.x release will not break a site, a script or a program that works with 1.0.0.

What Khalid is

Khalid is an open-source blog engine by SerpDad. It is one program: you download one file and run it.

  • Your posts are plain text files. Each post is a markdown file in your site's folder, so you can read, copy, back up and keep it in git like any other file.
  • Search engine basics are done for you. Titles, descriptions, sitemaps, feeds, schema markup (the hidden labels search engines read), redirects and robots.txt are written without any setup.
  • A linter checks every post before it goes live. A linter is a checker. A post with a serious problem, such as no author or no description, is held back, and the message says what to fix.
  • It has an admin and an API. The admin is the web editor at /admin/. The API is the door other programs use, and the admin, the command line and AI tools all go through it.

Khalid is licensed under the AGPL-3.0.

Install it

With the install script, on Linux or a Mac

curl -fsSL https://raw.githubusercontent.com/thebigasif/khalid/main/scripts/install.sh | sh

The script downloads the right file for your machine, checks it against the release's checksums, and puts khalid on your path. Add --version v1.0.0 to stay on this release. On Windows, download khalid-v1.0.0-windows-x86_64.exe from the release page instead.

With Docker

Docker runs programs in containers. The image is ghcr.io/thebigasif/khalid, for x86_64 and ARM.

mkdir site
docker run --rm -u "$(id -u):$(id -g)" -v "$PWD/site:/site" ghcr.io/thebigasif/khalid:1.0.0 init /site --address https://blog.example.com --yes
docker run -d -u "$(id -u):$(id -g)" -p 8080:8080 -v "$PWD/site:/site" ghcr.io/thebigasif/khalid:1.0.0

The blog is then at http://localhost:8080/. docs/deploy.md also covers Docker Compose, systemd and four hosting services.

From source

You need git, Rust through rustup, a C compiler and Node.js 22. The two npm steps build the admin. Without them the blog works but has no admin, and cargo says so when it builds.

git clone --branch v1.0.0 https://github.com/thebigasif/khalid.git
cd khalid/admin
npm ci
npm run build
cd ..
cargo install --path crates/khalid --locked

CONTRIBUTING.md explains each step.

Then

khalid --version prints khalid 1.0.0. docs/getting-started.md takes you from an empty folder to a published post, then shows how to sign in to the admin, check the site, bring in an old blog, and back up and restore.

Coming from 0.9.1

Install 1.0.0 over it, the same way you installed 0.9.1, and restart khalid serve. Your site folder needs no change: the database updates itself on the first start. Take a khalid backup first if you want a copy to go back to.

What works

  • Setting up a site. khalid init asks four questions and writes a working site, theme file included. It prints the web server rule when the blog lives under a folder of a bigger site, such as /blog/.
  • Writing. khalid new writes a post, as a draft with --draft. The editor in the admin has blocks for tips, figures, FAQs, how-tos, recipes, reviews, tables, code, maths and more, and every block saves back to markdown unchanged.
  • Publishing. khalid publish, the admin and the API publish a draft once it passes the linter. Posts can be scheduled, previewed through a private link, and kept for members or subscribers only.
  • Search engines and AI search. Every page gets its title, description, canonical address, share card tags and schema markup. Sitemaps, RSS, Atom and JSON feeds, robots.txt and llms.txt are written for you, along with an AI info page. Redirects keep old addresses working.
  • Checking. khalid lint checks posts, and khalid audit crawls the whole site and gives it a health score. A new site's first post passes both with no warning.
  • Readers. Pages work with scripts off, from small phones up, with one light theme that follows your main site's colours. Built-in search, comments, newsletters and forms are included.
  • Running it. khalid serve runs the blog with its admin and API, with HTTPS from Let's Encrypt when you give it a domain. khalid build writes a static copy instead. One Khalid can serve many sites, each on its own domain.
  • Moving in and keeping safe. khalid import brings in a blog from WordPress, Ghost, Medium, Substack or a folder of markdown, keeping its addresses and storing redirects. khalid backup and khalid restore keep a whole copy of a site.
  • Other programs. The Content API, the Admin API, signed webhooks, a TypeScript SDK and an MCP server for AI assistants.
  • Knowing your readers. Private visitor counts with no cookies, AI visitor reports, search console data, and alerts when crawlers stop visiting or the site slows down.

New since 0.9.1

The gaps 0.9.1 listed are closed, and a full walk from install to published post found a few more, now fixed too.

  • Posts with no slug: line work everywhere. khalid serve and khalid db rebuild take the address from the title, as khalid build already did.
  • Glossary term pages have a description, taken from the start of the definition.
  • A build from source says when it has no admin. cargo build prints three plain lines on how to add it.
  • khalid init writes the theme file, theme/tokens.toml, so you can change colours and fonts by hand at once, and its routes.toml explains the default addresses.
  • khalid new makes addresses its own linter accepts, without filler words or years.
  • Imports never send readers to a hidden post. When the linter holds back an imported post, its old addresses wait and lead to it once it is fixed. An address that stays the same is no longer stored as a redirect to itself.
  • A post saved while khalid serve starts shows at once, even on a site with 10,000 posts.
  • Checking a post is about five times faster on a large site.
  • Clearer messages. The sign-in link uses the port khalid serve runs on, the audit says which pages it counts and what the health score means, and the "no internal link" block suggests related posts instead of the home page when there are some.
  • The Windows download builds again, and the demo check finishes inside CI's time limit.

Still checked after launch

The founder approved shipping 1.0.0 on 2026-11-01 with these checks run after launch. Each needs a real server, an outside account or a person, so none could run in our test machines. None of them can lose your posts.

  • Ahrefs and Semrush on the demo site. Khalid's own audit, which checks the same things, gives a new site 100 with no errors and no warnings. Running the two outside tools on the live demo comes next.
  • HTTPS with a live Let's Encrypt certificate. serve --domain passes against a test certificate authority on every change. If it fails on your server, put Khalid behind a web server that handles HTTPS, as docs/deploy.md shows.
  • The starter kits for Astro and Next.js, deployed. They are not yet tried end to end against a live blog. Use them as examples for now.
  • SerpDad's own blog running on Khalid. It moves over after launch.

We will report what these checks find in the next release's notes. If you hit a problem first, open an issue on GitHub.

Checking a download

Each release has a SHA256SUMS file. The install script checks against it for you. By hand, run sha256sum -c SHA256SUMS --ignore-missing in the folder that holds the download.


Binaries for Linux (x86_64 and ARM, fully static), macOS (Apple silicon and Intel) and Windows. Each one holds the admin. Check a download against SHA256SUMS.
The Docker image is ghcr.io/thebigasif/khalid, tagged with this version.
What changed is in CHANGELOG.md.

Khalid 0.9.1

Choose a tag to compare

@github-actions github-actions released this 31 Oct 22:27
9712061

Khalid 0.9.1

This is the first public release of Khalid. It holds everything planned for 1.0, and a short list of known gaps that 1.0.0 will close. Every change is listed in CHANGELOG.md under 0.9.1.

What Khalid is

Khalid is an open-source blog engine by SerpDad. It is one program: you download one file and run it.

  • Your posts are plain text files. Each post is a markdown file in your site's folder, so you can read, copy, back up and keep it in git like any other file.
  • Search engine basics are done for you. Titles, descriptions, sitemaps, feeds, schema markup (the hidden labels search engines read), redirects and robots.txt are written without any setup.
  • A linter checks every post before it goes live. A linter is a checker. A post with a serious problem, such as no author or no description, is held back, and the message says what to fix.
  • It has an admin and an API. The admin is the web editor at /admin/. The API is the door other programs use, and the admin, the command line and AI tools all go through it.

Khalid is licensed under the AGPL-3.0.

Install it

With the install script, on Linux or a Mac

curl -fsSL https://raw.githubusercontent.com/thebigasif/khalid/main/scripts/install.sh | sh

The script downloads the right file for your machine, checks it against the release's checksums, and puts khalid on your path. Add --version v0.9.1 to stay on this release. On Windows, download khalid-v0.9.1-windows-x86_64.exe from the release page instead.

With Docker

Docker runs programs in containers. The image is ghcr.io/thebigasif/khalid, for x86_64 and ARM.

mkdir site
docker run --rm -u "$(id -u):$(id -g)" -v "$PWD/site:/site" ghcr.io/thebigasif/khalid:0.9.1 init /site --address https://blog.example.com --yes
docker run -d -u "$(id -u):$(id -g)" -p 8080:8080 -v "$PWD/site:/site" ghcr.io/thebigasif/khalid:0.9.1

The blog is then at http://localhost:8080/. docs/deploy.md also covers Docker Compose, systemd and four hosting services.

From source

You need git, Rust through rustup, a C compiler and Node.js 22. The two npm steps build the admin; without them the blog works but has no admin.

git clone --branch v0.9.1 https://github.com/thebigasif/khalid.git
cd khalid/admin
npm ci
npm run build
cd ..
cargo install --path crates/khalid --locked

CONTRIBUTING.md explains each step.

Then

khalid --version prints khalid 0.9.1. docs/getting-started.md takes you from an empty folder to a published post, then shows how to sign in to the admin, check the site, bring in an old blog, and back up and restore.

What works

  • Setting up a site. khalid init asks four questions and writes a working site. It prints the web server rule when the blog lives under a folder of a bigger site, such as /blog/.
  • Writing. khalid new writes a post, as a draft with --draft. The editor in the admin has blocks for tips, figures, FAQs, how-tos, recipes, reviews, tables, code, maths and more, and every block saves back to markdown unchanged.
  • Publishing. khalid publish, the admin and the API publish a draft once it passes the linter. Posts can be scheduled, previewed through a private link, and kept for members or subscribers only.
  • Search engines and AI search. Every page gets its title, description, canonical address, share card tags and schema markup. Sitemaps, RSS, Atom and JSON feeds, robots.txt and llms.txt are written for you, along with an AI info page. Redirects keep old addresses working.
  • Checking. khalid lint checks posts, and khalid audit crawls the whole site and gives it a health score. A new site's first post passes both with no warning.
  • Readers. Pages work with scripts off, from small phones up, with one light theme that follows your main site's colours. Built-in search, comments, newsletters and forms are included.
  • Running it. khalid serve runs the blog with its admin and API, with HTTPS from Let's Encrypt when you give it a domain. khalid build writes a static copy instead. One Khalid can serve many sites, each on its own domain.
  • Moving in and keeping safe. khalid import brings in a blog from WordPress, Ghost, Medium, Substack or a folder of markdown, keeping its addresses and storing redirects. khalid backup and khalid restore keep a whole copy of a site.
  • Other programs. The Content API, the Admin API, signed webhooks, a TypeScript SDK and an MCP server for AI assistants.
  • Knowing your readers. Private visitor counts with no cookies, AI visitor reports, search console data, and alerts when crawlers stop visiting or the site slows down.

Known gaps

These are open before 1.0.0. None of them loses your posts.

  • Speed and memory are not yet confirmed on this build. Khalid has budgets for page speed, memory and program size. They pass on their own, but have not all been measured green together on this exact release.
  • HTTPS has only been tried against a test certificate authority. Automatic certificates from Let's Encrypt have not yet been tried on a real public server. If it fails, put Khalid behind a web server that handles HTTPS, as docs/deploy.md shows.
  • The Docker image is new. This release is the first time the image is built and published. Report anything that goes wrong.
  • The admin has not been tried in a real browser by us. Its tests run in a simulated browser. The same is true for the accessibility checks on public pages.
  • The starter kits for Astro and Next.js are not tested end to end. Use them as examples for now.
  • Glossary term pages have no description. khalid audit notes this. Other pages Khalid makes have one.
  • A post with no slug: line works with khalid build but not with khalid serve. Add a slug: line to every post; khalid new always writes one.
  • cargo build does not warn when the admin was not built first. The blog then answers every /admin/ address with a page that says how to build it.
  • The Intel Mac file is built but not started by our checks. Every other platform's file is started once before it is published.
  • The two library crates are not on crates.io yet. khalid-core and khalid-lint are ready to publish, at their own version 0.1.0.

Checking a download

Each release has a SHA256SUMS file. The install script checks against it for you. By hand, run sha256sum -c SHA256SUMS --ignore-missing in the folder that holds the download.


Binaries for Linux (x86_64 and ARM, fully static), macOS (Apple silicon and Intel) and Windows. Each one holds the admin. Check a download against SHA256SUMS.
The Docker image is ghcr.io/thebigasif/khalid, tagged with this version.
What changed is in CHANGELOG.md.