Repository navigation
Releases: thebigasif/khalid
Release list
v1.3.2
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
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
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
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
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
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.txtare 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 | shThe 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.0The 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 --lockedCONTRIBUTING.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 initasks 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 newwrites 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.txtandllms.txtare written for you, along with an AI info page. Redirects keep old addresses working. - Checking.
khalid lintchecks posts, andkhalid auditcrawls 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 serveruns the blog with its admin and API, with HTTPS from Let's Encrypt when you give it a domain.khalid buildwrites a static copy instead. One Khalid can serve many sites, each on its own domain. - Moving in and keeping safe.
khalid importbrings in a blog from WordPress, Ghost, Medium, Substack or a folder of markdown, keeping its addresses and storing redirects.khalid backupandkhalid restorekeep 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 serveandkhalid db rebuildtake the address from the title, askhalid buildalready 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 buildprints three plain lines on how to add it. khalid initwrites the theme file,theme/tokens.toml, so you can change colours and fonts by hand at once, and itsroutes.tomlexplains the default addresses.khalid newmakes 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 servestarts 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 serveruns 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 --domainpasses against a test certificate authority on every change. If it fails on your server, put Khalid behind a web server that handles HTTPS, asdocs/deploy.mdshows. - 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
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.txtare 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 | shThe 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.1The 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 --lockedCONTRIBUTING.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 initasks 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 newwrites 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.txtandllms.txtare written for you, along with an AI info page. Redirects keep old addresses working. - Checking.
khalid lintchecks posts, andkhalid auditcrawls 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 serveruns the blog with its admin and API, with HTTPS from Let's Encrypt when you give it a domain.khalid buildwrites a static copy instead. One Khalid can serve many sites, each on its own domain. - Moving in and keeping safe.
khalid importbrings in a blog from WordPress, Ghost, Medium, Substack or a folder of markdown, keeping its addresses and storing redirects.khalid backupandkhalid restorekeep 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.mdshows. - 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 auditnotes this. Other pages Khalid makes have one. - A post with no
slug:line works withkhalid buildbut not withkhalid serve. Add aslug:line to every post;khalid newalways writes one. cargo builddoes 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-coreandkhalid-lintare 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.