$ mkdir -p ~/.local/bin && cd ~/.local/bin
$ for b in tebako tebako-pkg tfs tebako-bootstrap tebako-shim; do
curl -fsSLO "https://github.com/tamatebako/tebako/releases/download/v<ver>/$b-<ver>-macos-arm64"
mv "$b-<ver>-macos-arm64" "$b"
done
$ chmod 0755 tebako tebako-pkg tfs tebako-bootstrap tebako-shim
$ ./tebako --version
Tebako executable packager version <ver>
GUIDES · 02
The first ten minutes.
What a machine that has never seen tebako can do in about ten minutes, measured rather than described: install, run a payload, run one that carries its own language runtime, and press a package of your own.
|
Note
|
Every number on this page comes from one run of
|
The five binaries.
The release publishes one asset per binary per platform, and the asset
names carry the version while the binaries expect the bare names. Rename on
download — skipping this stops tebako install at the shim step, after it has
already downloaded the payload:
tebako-shim is the fifth binary and the one a hand download forgets: it is
the dispatcher every installed shim links to. Homebrew and the shell installer
put all five in place, with their names, for you.
A first payload.
tebako setup seeds the official registry. There is nothing to add for the
first command, and adding a second registry that carries the same payload name
turns a bare install into an ambiguity error — the message names both
registries and asks for the full reference.
$ tebako setup
fetching registry tfs:github:tebako-packages/registry
seeded the official registry tfs:github:tebako-packages/registry (16 payload(s))
$ tebako install hello
resolving hello
└ toolkit hello 2.12 — fetching
fetching payload hello@2.12: 1 artifacts, unknown total
downloading payload hello@2.12 (28.3 KB)
installed payload hello@2.12 (28.3 KB)
fetched payload hello@2.12: 1 artifacts, unknown in 2.7s
1 node(s): 0 cached, 1 fetched, 0 skipped
installed hello 2.12 -> ~/.tebako/payloads/hello/2.12.tfs
signature verified (signer 7a437d7382a3cf5a)
shim ~/.tebako/shims/hello
$ tebako-shim install-shell # once per machine
installed the tebako shim block in ~/.bashrc (bash)
restart the shell, or re-source the file
$ hello
Hello, world!
Open a new shell after install-shell, or call the shim by path
(~/.tebako/shims/hello) until you do: it writes the PATH line into your
shell’s startup file, which the current shell has already read.
A payload that carries a runtime.
A payload of kind runtime provides an interpreter, and the payloads that need
one declare it as a dependency. The first run fetches the runtime — once per
machine — verifies it, and caches it; every later run starts from the cache.
$ hello-ruby
fetching registry tfs:github:tamatebako/tebako-runtime-ruby
fetching runtime ruby@4.0.7;tebako=0.17.3;image: 2 artifacts, 19.2 MB total
downloading tebako-runtime-0.17.3-ruby-4.0.7-macos-arm64.tfs
runtime env image tebako-runtime-0.17.3-ruby-4.0.7-macos-arm64.tfs (19.2 MB) — lazy: seeding on demand, sealing in background
downloading tebako-runtime-0.17.3-ruby-4.0.7-macos-arm64 (46.3 MB)
installed tebako-runtime-0.17.3-ruby-4.0.7-macos-arm64 (46.3 MB)
fetched runtime ruby@4.0.7;tebako=0.17.3;image: 2 artifacts, 19.2 MB in 1.9s
Hello from tebako (ruby 4.0.7, arm64-darwin23)
The store keeps the runtime under ~/.tebako/runtimes and never extracts it
into a system path; tebako doctor names anything that has drifted, with its
remedy.
Press your own.
A directory with one root script is a project. tebako press detects it,
resolves the runtime from the registry — the same pair install would pick —
and writes a single executable that carries your code and mounts it.
$ mkdir hello && cd hello
$ echo 'puts "hello from a pressed app (ruby #{RUBY_VERSION})"' > main.rb
$ tebako press -r . -e main.rb -o ../hello.bin
Ruby version: '4.0.7'
Created tebako package at "…/hello.bin"
$ ../hello.bin
hello from a pressed app (ruby 4.0.7)
Write the package outside the project root. Pressing in place works — the tool says so, then warns — because each press would image the previous package sitting beside the source, which is how old versions end up nested inside new ones.
Press it again after an edit: the packaging environment is reused, so the loop is a few seconds rather than a download.
What the numbers were.
A single run of the walkthrough script, on the release named in its header, in
an empty HOME:
| step | seconds | exit |
|---|---|---|
|
1.74 |
0 |
|
3.72 |
0 |
|
0.26 |
0 |
|
0.16 |
0 |
|
4.14 |
0 |
|
6.60 |
0 |
|
4.66 |
0 |
|
4.05 |
0 |
|
0.94 |
0 |
$ tools/stranger-walkthrough.sh --version <ver>
The script times each step, exits non-zero if any step fails, and prints the store’s shape afterwards so the page can state what landed as well as how long it took.
Where to go next.
-
The install guide covers Homebrew, the shell installer and the direct binaries, and what each one lands.
-
The run guide covers
tebako run, shims and version pinning. -
The package guide covers lean versus fat packages, extra slices, and the jail policy a package can declare.