أَغْنِنَا بِحَلَالِكَ عَنْ حَرَامِكَ

Download keel

v0.21.0 2026-09-30

Requires Python 3.14 or later · downloaded from GitHub Releases — never mirrored here

Every version, newest first — the full changelog

Never install by bare name. The distribution is keel-trader; the name keel on PyPI belongs to an unrelated project, so pip install keel fetches someone else's package. A build reporting DIRTY or [checkout] is not a release and must not be run against live funds.
  1. Download

    Pick your platform's button below. That is the whole first step.

  2. Install

    Windows: run the downloaded file; if SmartScreen says "Windows protected your PC", click More info → Run anyway, and the setup wizard does the rest. macOS: open the .dmg and drag keel into Applications. The warning is about the unsigned build — The details below explains why, and how to verify what you downloaded.

  3. Launch

    macOS: the first open is refused once — System Settings → Privacy & Security → Open Anyway (the only way on current macOS). Windows: launch keel from the Start menu. keel opens in your browser with a first-run checklist, and your credentials go to your keychain. After that, every launch is a plain double-click.

  4. Choose paper

    Free, simulated, nothing at risk. Paper mode needs no funded account and no trading keys — only a free read-only market-data key. Learn the whole workflow here first.

  5. Go live — deliberately harder

    When you are ready: attest your venue (Coinbase today), your rules must pass the promotion gate, and every live action asks for your typed confirmation. That is not friction for its own sake — it is the product.

macOS

Download for macOS keel-0.13.3-arm64.dmg Desktop build 0.13.3 — engine fixes reach pip and the installer first (0.21.0); bundles follow per app release.

Windows

Download for Windows keel-0.13.3-windows-x86_64-setup.exe Desktop build 0.13.3 — engine fixes reach pip and the installer first (0.21.0); bundles follow per app release.

Linux and everything else: same wheels from the release page. See releases on GitHub →

Start on paper — free, and nothing at risk

For the cautious first step: the paper profile is free and educational, with simulated fills and no real orders. It is built for learning the workflow before any live decision. It needs no funded venue account and no trading credentials; the only key it asks for is a free, read-only market-data key, used to fetch candle history. The live profile is deliberately harder to reach — attestations, the promotion gauntlet and typed human confirmations all stand in the way.

New here? Start with the Get Started guide

A step-by-step walkthrough — first simulation, the paper profile, the web console — with screenshots of every screen.

Open Get Started →

The details — terminal installs, updates, building from source, and why your computer warns you

Install from the terminal — one command

Collecting wheels by hand is not the only way in. A script on keel's default branch does the whole job. It reads the latest GitHub release, downloads the five production wheels and the default config.yaml, then installs them into a private Python environment under your home folder.

A wheel is a prebuilt Python package. A venv is a folder holding one project's Python and its libraries, kept apart from the rest of your system; this one is created at ~/.keel/.venv.

You need macOS or Linux, a terminal, curl, and Python 3.14 or later. The script refuses every other platform, so Windows readers stay on the wheels path above. On Linux that floor bites today: most distributions still default to an older Python, and keel's own Linux smoke run fails at exactly this check, while macOS passes it with a Homebrew Python. Expect to install 3.14 yourself first. Since v0.12.0 the published wheels ask for the same 3.14, so every route to keel now shares one floor.

The one-line install

curl -fsSL https://raw.githubusercontent.com/CodeGateSoftware/keel/main/scripts/install.sh | bash

Or read it first, then run what you read

keel is a program you may hand exchange API keys to, so piping a script from the internet straight into bash should not be the only option on offer. Download it, read it, then run your own copy.

curl -fsSL https://raw.githubusercontent.com/CodeGateSoftware/keel/main/scripts/install.sh -o install.sh
# every step prints what it is about to do, and why, before it runs
less install.sh
bash install.sh

The script is served from main, keel's default branch. It has never been part of a tagged release, so there is no version of it to name, and it changes when main changes: the Python floor above moved from 3.11 to 3.14 that way. Read the copy you download rather than trusting this description to have kept up.

What the script does

  • It downloads exactly five wheels, each by its exact name, from the latest release. It never expands a *.whl glob: a release also carries wheels a deployment must not have.
  • It installs by exact file path, never by package name. The name keel on PyPI belongs to an unrelated project, and installing by path makes that mistake impossible.
  • It builds the venv with uv when a working uv answers uv --version — a shim that cannot run is treated as absent. Otherwise it uses the Python it found, with pip.
  • It prints each wheel's sha256 as computed on your own machine. That is an audit trail, not a verification — no wheel checksums are published anywhere, so there is nothing to compare against.
  • It runs no privileged commands. Downloads land in a temporary folder that is deleted when the script exits, and the installed deployment lives only under your home folder.
  • It never overwrites an existing ~/.keel/config.yaml or database. Re-running the script upgrades the code in place.
  • The config.yaml it lands is the release's production config, in auto_trade.mode: confirm — the live profile behind a gate, not the paper one. keel previews each rule-driven entry and asks before placing it, at a y/N prompt that defaults to no. The protective stop and the profit-take that follow a position you already approved are placed without a second prompt. Note that the script's own success message calls this the paper profile: that line is wrong, so check auto_trade.mode in the file rather than trusting it.
  • A fresh deployment still trades nothing. The kill switch fails closed, so every cycle skips until you run keel resume, and seeded rules start as candidates that trade nothing until you promote them. For a config that cannot place a live order at all, run ./.venv/bin/keel init-config --force from ~/.keel: without --live it writes the mode: paper template.
  • It finishes by running keel versions, and fails loudly if that does not come back clean.

Keeping it current

Re-running the installer moves the deployment to the latest release, in place. keel can also update itself from the folder it lives in: keel update --check reports what an update would do and changes nothing, and keel update applies it behind a typed confirmation. One caveat worth knowing before you rely on it: keel update installs through uv, and stops with a plain error when uv is absent. A deployment the script built without uv needs uv added before an update will apply. keel update refuses to touch a source checkout, and a desktop-app install is the other thing it declines: for the app, downloading the new release's installer is the update path — the refusal says so and points you there.

cd ~/.keel
./.venv/bin/keel update --check
./.venv/bin/keel update
Never install by bare name. The distribution is keel-trader; the name keel on PyPI belongs to an unrelated project, so pip install keel fetches someone else's package. A build reporting DIRTY or [checkout] is not a release and must not be run against live funds.

All release files

Downloads link directly to GitHub assets. This site never mirrors binaries. Version data fetched from GitHub at build time, 2026-10-18.

Work from the browser — the desktop app

The desktop app opens keel in your browser: a first-run checklist, credentials kept in your OS keychain, market data fetched as a background job, and asset attestations and rule promotions done from a page instead of a terminal — a promotion launched from the page advances only if it clears the gate, with no force option, because bypassing a gate needs a terminal. That setup surface cannot arm a rule, promote one, attest an asset, release funds or spend anything. Since v0.15.0 it can do exactly two things that increase what keel may do — resume trading after the kill-switch, and clear rail 16's consecutive-loss halt — each behind a typed phrase, on a loopback session only, refused outright if the console is reachable from anywhere but this machine. Halting, by contrast, is deliberately never gated on locality: an operator whose keel sits behind a tunnel must be able to stop it from the tunnel. Everything else still requires a person at a terminal. Since v0.12.1 the interface wears this site's own identity — the same paper, the same teal, the same ship mark — and since v0.12.2 its header carries a light-or-dark theme choice beside a badge naming the mode you are running; the badge only reports, for changing mode stays a deliberate edit to the config file, not a click in a page. Every money figure arrives as text, already computed and formatted by the engine — the page displays numbers, it never derives them — profit and loss differ in brightness as well as colour, so the distinction survives a greyscale screen, form fields carry a visible border, and the page is served under a content-security policy that stops it sending your positions or trade history anywhere but your own machine. The database beneath runs in WAL mode, so watching a live fetch never blocks the engine writing it. macOS gets the double-clickable app; since v0.12.0, Windows installs through a proper setup wizard. Updating the desktop app means downloading the new installer — it never replaces itself — and your config, database and credentials are never touched by an update. The desktop builds are unsigned — the note below says exactly what your computer will show, and how to verify what you downloaded — and the changelog lists each version the day it ships.

From source — try it in five minutes

Everything in this path is read-only and paper-side: no funds, and nothing here can place an order. You need uv and a free, read-only Coinbase Developer Platform (CDP) API key — candle history is fetched through the authenticated client, so keel fetch without a key fails with an AuthenticationError. We say so here rather than let it surprise you at step four.

  • uv (the Python package manager)
  • Python 3.14 or later — the floor the published wheels ask for as well since v0.12.0
  • A free, read-only CDP API key — market data only
git clone https://github.com/CodeGateSoftware/keel.git && cd keel
uv sync --all-extras --dev        # Python 3.14+ — the repo's floor moved up in #546
cp .env.example .env              # put the read-only CDP key/secret in it — market data only
uv run keel rules seed            # register the rule families as candidates
uv run keel fetch                 # pull candle history for the default allowlist
uv run keel simulate --years 1 --skip-within-cap

What you should expect

keel simulate replays the real rules deterministically over the fetched history, compares against a DCA benchmark, and writes a GO-LIVE / TRAIN-MORE report. On the default rules it will very likely tell you TRAIN-MORE and name the gates that failed. That is the engine working, not broken. The honesty is the feature.

The next steps — promoting a rule through the gate, running the paper agent, a supervised first live order — are in the go-live runbook. →