Joker DMAPI client, written in Go. Currently work-in-progress
  • Go 91.5%
  • Shell 8.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Heiko Schlittermann (ai) c778dc8389
All checks were successful
nagonag (Push) / nagonag (push) Successful in 3m39s
build: package man pages via gogogos dedicated manpages field ai:claude-sonnet-4-5
Adopt gogogo config schema v2 (version: 2) and move joker.1.gz/
joker.conf.5.gz from the generic artifacts.deb.files list to the
dedicated artifacts.deb.manpages list, which auto-detects the name.N.gz
naming convention and derives /usr/share/man/manN/name.N.gz
destinations instead of requiring them spelled out by hand.

Verified with a real local package build (gogogo pack --no-network
--allow-unclean): dpkg-deb -c confirms both pages land at the expected
paths with mode 0644, and both render correctly via man -l after
extraction.
2026-07-22 17:31:34 +02:00
.forgejo/workflows cicd: add nagonag 2026-07-20 17:22:52 +02:00
assets docs: add a compelling project README hero 2026-07-20 17:21:45 +02:00
cmd/joker feat: support joker man [section] [page] with bare-name auto-detection ai:claude-sonnet-4-5 2026-07-22 14:20:39 +02:00
debian release: build a static binary and suppress the resulting lintian finding 2026-07-19 22:00:14 +02:00
dmapi refactor: strict 1:1 api passthrough, drop api test, add re-login status ai:claude-sonnet-4-5 2026-07-21 22:38:22 +02:00
doc feat: add consolidated domain status 2026-07-20 22:39:22 +02:00
internal feat: stop encrypting cookie jar, enforce secret-file permissions ai:claude-sonnet-4-5 2026-07-21 15:04:19 +02:00
scratch docs: align endpoint plans with implementation ai:claude-sonnet-4-5 2026-07-21 09:48:32 +02:00
.gitignore refactor: UI improvements and plans for future work 2026-05-16 09:56:18 +02:00
.gogogo.conf build: package man pages via gogogos dedicated manpages field ai:claude-sonnet-4-5 2026-07-22 17:31:34 +02:00
.golangci.yml new: implement more functionality 2025-12-16 15:41:43 +01:00
AGENTS.md fix: redact literal apikey secrets in auth status ai:claude-sonnet-4-5 2026-07-21 23:47:02 +02:00
go.mod fix: redact literal apikey secrets in auth status ai:claude-sonnet-4-5 2026-07-21 23:47:02 +02:00
go.sum fix: redact literal apikey secrets in auth status ai:claude-sonnet-4-5 2026-07-21 23:47:02 +02:00
joker.conf.example feat: improve authentication state handling ai:claude-sonnet-4-5 2026-07-21 07:28:51 +02:00
LICENSE.txt new: implement more functionality 2025-12-16 15:41:43 +01:00
Makefile dev: Makefile as helper 2026-07-17 12:11:46 +02:00
README.md feat: improve authentication state handling ai:claude-sonnet-4-5 2026-07-21 07:28:51 +02:00

Joker DMAPI Client

Joker DMAPI Client — Domain operations, one command away.

Domain operations, one command away.

A Go client library and operator-focused CLI for the Joker.com DMAPI. Query domains, change delegation, manage DNSSEC, and validate nameservers without stitching together raw API requests by hand.

Developed by schlittermann.de, with AI assistance.

joker is for Joker.com resellers who want direct API access when they need it, and safer high-level workflows when an operation needs more than one request. The reusable dmapi package stays independent of the CLI.

Why joker?

  • Work at the right level. joker api exposes the DMAPI directly; other joker commands offer high-level operator workflows, such as joker status, joker ns, joker whois, and joker dnssec.
  • Change delegation with confidence. Nameserver workflows check DNS delegation plausibility, wait for asynchronous results, and retain a one-hour domain completion cache. joker nast compares Joker's registrar data, the authoritative zone, and DENIC's resolved proposal before running DENIC's API-backed pre-delegation check.
  • See DNSSEC as it is. DNSSEC status reconciles Joker data, live authoritative DNSKEY/CDNSKEY/CDS records, and the parent zone's DS records per key.
  • Make rollovers deliberate. Add, set, or remove DS records by key tag; parameters are derived from live SEP DNSKEYs for the domain's TLD.
  • Stay in the terminal. Bash, Zsh, Fish, and PowerShell completion; embedded joker(1) and joker.conf(5) manuals; compact color-aware WHOIS summaries.

A quick look

# Reconcile registrar, authoritative DNS, parent DNSSEC, and DENIC state.
joker status example.de

# Use the same diagnostic data in automation.
joker status --output-format json example.de

# Explore direct, one-request DMAPI commands.
joker api query-whois --domain example.com

# Set a delegation, wait for Joker's asynchronous result, and show its summary.
joker ns set example.com ns1.example.net ns2.example.net

# Check the delegation against DENIC's NAST service before you submit it.
joker nast example.de

# Discover DNSSEC state from the live zone, parent zone, and Joker.
joker dnssec status example.de

# Publish a new DS key, then retire the old one by key tag.
joker dnssec ds add example.de 12345
joker dnssec ds del example.de 26155

# Get a concise domain summary.
joker whois example.com

Get started

Build the CLI from this checkout:

go build -o joker ./cmd/joker
./joker --help

Create joker.conf in the current directory, $XDG_CONFIG_HOME/joker/, or $HOME/.config/joker/:

apikey: env:JOKER_APIKEY
# Optional: defaults to $XDG_STATE_HOME/joker/cookies, or
# $HOME/.local/state/joker/cookies when XDG_STATE_HOME is unset.
# cookiefile: $XDG_STATE_HOME/joker/cookies

Set the API key only for the command that needs it:

JOKER_APIKEY='your-joker-api-key' ./joker auth login
./joker auth status

apikey also supports plain values, protected files, .netrc, pass, and fallback chains. Read joker.conf(5) before choosing a secret source: each option has different operational and security tradeoffs.

For interactive use, enable shell completion:

source <(./joker completion bash)

The Debian package installs Bash, Zsh, and Fish completion scripts in their standard system-wide locations. See joker(1) for shell-specific manual-install instructions.

Library use

The reusable client lives in dmapi/. Its supported endpoints are declared in dmapi/api.yaml, from which the typed API surface is generated. The CLI is an example consumer, not a requirement for using the library.

Build and contribute

go build ./...
go test ./...

# Regenerate the typed DMAPI API, manuals, static completions, and NAST code map.
go generate ./...

Generated files are tracked. When you change dmapi/api.yaml, command behaviour, completion metadata, or manual sources, run go generate ./... and include the resulting changes.

Documentation

License

Apache-2.0. See LICENSE.txt.