kosong

kosong_

Open a terminal. Write one page. Publish it. Learn what happened.

Not a website builder that hides the work. Every step leaves you with something ordinary you own: a Markdown file, a Git repository, and a static website. Delete kosong tomorrow and all three still work.

Everything local works with no account and no network

Install

Three ways. They install the same binary, from the same release, checked against the same published checksum.

Homebrew

brew tap khalilhimura/tapbrew trust khalilhimura/tapbrew install kosong

The middle line is not optional and not a formality: Homebrew refuses to load formulae from taps outside its own repositories until you say you trust them. Skip it and brew install stops with an error rather than installing anything.

npm

npm install -g kosong

npx kosong start runs it without installing anything permanently. Installed this way, kosong is a small script that starts the real binary, which costs a fraction of a second per command.

The installer

Needs neither Homebrew nor Node.

curl -fsSL https://kosong.thefutureissolo.com/install.sh | sh

Piping a script into your shell deserves suspicion. This one downloads a fixed release and refuses to install anything whose checksum does not match — read it first, or install manually from a release and verify it yourself:

shasum -a 256 -c SHA256SUMS --ignore-missing

macOS and Linux, on Intel and ARM. Windows and Alpine are not among them, and on those the install stops with a message saying so rather than leaving you something that cannot run.

Your first page

kosong start # make a pagekosong edit # open it in your editorkosong preview # look at it, on your own computerkosong status # see where things stand

Nothing above touches the network or asks who you are.

Every command teaches one thing

CommandWhat it doesWhat it teaches
kosong startSet things up, one step at a time
kosong newCreate a pageA file is a durable object you can move
kosong editOpen your editorThe terminal opens editors; it is not one
kosong previewServe it locallyA local server is a temporary website
kosong statusReport current stateSoftware can describe itself
kosong doctorCheck your setupPrerequisites can be checked, not guessed
kosong loginSign in by email code
kosong syncKeep a private remote copy
kosong delete-accountDelete your account and its stored pageDeleting an account is not deleting your files
kosong site initMake a publishable folderGit tracks a folder's history
kosong site publishBuild and deployA place must exist before files go in it. Deployment moves files, not magic
kosong site rollbackSee past versions, and where to restore oneAn honest limit beats a convincing wrong answer

What you end up owning

ThingWhereWorks without kosong
Your pagekosong.mdAny Markdown editor
Your site<name>/An ordinary Astro project
Its history<name>/.gitOrdinary git
The built files<name>/distPlain HTML

Two things kosong will not do

It never runs a shell.

Every external tool is invoked as an executable plus separate arguments, so a ; in a name is a character, not a command. There is nosh -c anywhere in the codebase.

It cannot roll back a Cloudflare Pages deployment.

Wrangler has no command for it, and doing it through Cloudflare's API would mean holding your Cloudflare credentials — which kosong is built never to do. kosong site rollback shows your deployment history and tells you exactly where to click instead.

Read further

Security, stated plainly

kosong uses HTTPS, encryption at rest, private storage, verified-email sign-in, hashed single-use codes, short-lived access tokens, and rotating refresh tokens.

It is not end-to-end encrypted. The service operator could read a synced document. If that matters to you, do not sync — everything local works without it. SeeSECURITY.md for the full boundary.