Usual path on Debian & Ubuntu: install the prebuilt
taler-wallet-cli
package from
deb.taler.net
— no compile. Then withdraw & pay with the shell recipes below.
1 · Install
Add the GNU Taler apt source for your release from
deb.taler.net
(key + sources.list line), then:
# after the Taler apt source is configured
sudo apt-get update
sudo apt-get install -y taler-wallet-cli
taler-wallet-cli --version
2 · Withdraw & pay (shared pool)
# after package install — taler-wallet-cli is on PATH
export EX=https://exchange.hacktivism.ch/
export WDB="$HOME/.local/share/taler-wallet-goa.sqlite3"
mkdir -p "$(dirname "$WDB")"
alias tw='taler-wallet-cli --wallet-db="$WDB" --no-throttle'
tw exchanges add "$EX" || true
tw exchanges update "$EX" || true
tw exchanges accept-tos "$EX"
WURI=$(curl -fsS https://bank.hacktivism.ch/intro/demo-withdraw.json \
| python3 -c 'import sys,json;print(json.load(sys.stdin)["taler_withdraw_uri"])')
tw withdraw accept-uri --exchange "$EX" "$WURI"
tw run-until-done
tw balance
PAY=taler://pay-template/taler.hacktivism.ch/instances/goa-shop/orbit-sticker
tw handle-uri --yes --non-interactive "$PAY"
tw run-until-done
tw balance
Other Unix / POSIX systems (and anyone who prefers source):
there is usually no distro package — build
taler-wallet-cli
from the monorepo on
git.taler.net
(taler-typescript-core → packages/taler-wallet-cli),
or run the compiled .mjs with Node without a system install.
1 · Packages you usually need (build)
Typical: git, curl,
python3 (≥ 3.8), nodejs (≥ 20),
npm, pnpm (≥ 11 — often
npm install -g pnpm), jq, zip.
At runtime for the GOA recipes: curl,
python3, and either taler-wallet-cli on
PATH or node + the .mjs file.
# example on a Debian-like host used only as a build box
sudo apt-get update
sudo apt-get install -y git curl python3 nodejs npm jq zip
sudo npm install -g pnpm
# Fedora/RHEL-ish: dnf install git curl python3 nodejs npm jq zip (then npm i -g pnpm)
# macOS: brew install git python node jq (then npm i -g pnpm)
2 · Clone, compile, install or just run
#!/bin/sh
set -eu
git clone https://git.taler.net/taler-typescript-core.git
# or: git clone git://git.taler.net/taler-typescript-core.git
cd taler-typescript-core
./bootstrap
./configure # optional: --prefix="$HOME/.local"
make
# optional system install: make install
pnpm install
pnpm run compile
# just use without install (usual for day-to-day dev):
WCLI="$PWD/packages/taler-wallet-cli/bin/taler-wallet-cli.mjs"
node "$WCLI" --version
3 · Withdraw & pay (POSIX sh)
#!/bin/sh
set -eu
: "${HOME?HOME is unset}"
EX=https://exchange.hacktivism.ch/
BANK=https://bank.hacktivism.ch
MER=taler.hacktivism.ch
WDB=${WDB:-$HOME/.local/share/taler-wallet-goa.sqlite3}
mkdir -p "$(dirname "$WDB")"
# package/install path:
# tw() { taler-wallet-cli --wallet-db="$WDB" --no-throttle "$@"; }
# monorepo path (no make install):
WCLI=${WCLI:-$HOME/src/taler-typescript-core/packages/taler-wallet-cli/bin/taler-wallet-cli.mjs}
tw() { node "$WCLI" --wallet-db="$WDB" --no-throttle "$@"; }
tw exchanges add "$EX" || true
tw exchanges update "$EX" || true
tw exchanges accept-tos "$EX"
WURI=$(curl -fsS "$BANK/intro/demo-withdraw.json" \
| python3 -c 'import sys,json;print(json.load(sys.stdin)["taler_withdraw_uri"])')
tw withdraw accept-uri --exchange "$EX" "$WURI"
tw run-until-done
tw balance
PAY="taler://pay-template/$MER/instances/goa-shop/orbit-sticker"
tw handle-uri --yes --non-interactive "$PAY"
tw run-until-done
tw balance