THE PYTHON-STYLE CLI TOOLKIT 0.7 is here

From Python script
to shipped tool.

Write familiar code. Add compatible packages.
Hand someone a single executable.

A complete workflow for small tools
with a lot to do.

Build your first CLI See it in action
brew install niklas-heer/tap/kipferl
macOS & Linux · ARM64 & x86_64
Built-in terminal UI No Python on the target machine
LESS SETUP. MORE SHIPPING.

Meet your new workflow.

51 sec · Kipferl 0.7.1
hello / kipferlREAL TERMINAL. REAL OUTPUT.
Prefer reading? Follow the workflow

The recording uses the released macOS Apple Silicon CLI. The same workflow is available on all four release targets.

  1. Create a CLI project, run its greeting, and execute its starter test.
  2. Install the reviewed tzdata 2025.2 wheel and check the installed files. Add a small app that reads a bundled timezone data resource.
  3. Build an executable, remove the original project and caches, and run the executable independently.
kipferl new hello --template cli
cd hello
kipferl run -- --name Ada
kipferl test
kipferl add 'tzdata==2025.2'
kipferl deps check
kipferl build

Save this as zones.py inside the project:

import os
import tzdata

path = os.path.join(os.path.dirname(tzdata.__file__), "zoneinfo/UTC")
with open(path, "rb") as zone:
    assert zone.read(4) == b"TZif"
print("tzdata " + tzdata.__version__ + ": UTC data bundled")
kipferl build zones.py --mode universal -o dist/zones
./dist/zones
# tzdata 2025.2: UTC data bundled

The recording takes this one step further: it runs the executable after deleting its temporary source project, installed packages, and caches.

The tzdata checks cover version constants and resource headers, not timezone calculations. Try the complete package example →

Made with VHS
0.7.2Stable & ready to build with
4 targetsmacOS + Linux · ARM64 + x86_64
1,725 checksAvailable compatibility checks passed
Inspect the release evidence
A LITTLE TOOL. A COMPLETE WORKFLOW.

Everything between
an idea and “here, try this.”

Project scaffolding, checked dependencies, and portable builds. All part of the same CLI.

01 / START WITH SOMETHING REAL

An empty folder.
A running app.

Choose a project template

Arguments, helpful output, and a starter test. Your next useful command starts here.

# Your project, ready to work onkipferl new hello --template clicd hello && kipferl run
hello.py tests/ editor stubs kipferl.json
Build your first app
02 / KNOW WHAT YOU ARE ADDING

Packages with
receipts.

Check PyPI dependencies against your exact runtime. Lock their versions and hashes. Restore them offline once their wheels are cached.

tzdata2025.2
Testedpure Python wheel
  • Wheel checksum verified
  • Source compilation passed
  • Reviewed resource checks passed
Exact artifact. Exact runtime. A stated test scope.
$ kipferl add 'tzdata==2025.2'Explore the package workflow
03 / GIVE YOUR TOOL A LIFE OUTSIDE YOUR LAPTOP

Your app.
All packed.

Bundle local modules, package resources, and selected assets with the runtime. The person running your tool needs neither Python nor Kipferl installed.

See how packaging works
THE GOOD STUFF IS ALREADY BUILT IN

Make the terminal
a nicer place to be.

Tables, boxes, prompts, and progress. HTTP, SQLite, and everyday file formats. Familiar dotted imports connect it all.

Explore the runtime modules
app.py
import urllib.parse as urls
import tui

# Native modules, ordinary imports
tui.box(
    urls.quote("hello world"),
    title="Ready to ship",
)
Ready to shiphello%20world
Meet the terminal UI toolkit
CLEAR ABOUT WHAT WORKS

Less guesswork.
More evidence.

Kipferl is a focused Python-style runtime. It supports a useful subset of Python, with explicit boundaries for packages and APIs.

SMALL TOOLS DESERVE A GOOD TOOLKIT.

What will you ship?

Make something useful Explore the source

Open source. MIT licensed. Built with Rust and PocketPy.