Technitium
@thomas/technitiumv2026.05.24.1
01README
Management of a Technitium DNS Server via its HTTP API — built-in ad-blocking control (enable/disable, temporary disable, allow/block list URLs), authoritative zone + record lifecycle, allowed/blocked custom domains, dashboard stats, DNS client + query-log debugging, cache flush, and settings backup/restore.
02Models
@thomas/technitiumv2026.05.24.1technitium.ts
Global Arguments
| Argument | Type | Description |
|---|---|---|
| baseUrl | string | Technitium base URL including port, e.g. https://dns.example:5380 |
| apiToken | string | Permanent Technitium API token. Supply via vault: ${{ vault.get(technitium, api_token) }} |
| skipTlsVerify | boolean | Accept self-signed certs (default false — a valid cert is expected) |
fn blocking_get_settings()
Get the blocking-relevant server settings (enable state, temp-disable expiry, list URLs).
fn blocking_set_state(enable: boolean)
Enable or disable DNS blocking permanently (writes only `enableBlocking`).
| Argument | Type | Description |
|---|---|---|
| enable | boolean |
fn blocking_temporary_disable(minutes: number)
Temporarily disable blocking for N minutes; it re-enables automatically afterwards.
| Argument | Type | Description |
|---|---|---|
| minutes | number | Minutes to disable blocking (e.g. 5, 15, 30, 60, 1440) |
fn blocking_set_lists(blockListUrls?: array, allowListUrls?: array)
Set the block-list and/or allow-list URLs (comma-joined; only the lists you provide are changed).
| Argument | Type | Description |
|---|---|---|
| blockListUrls? | array | |
| allowListUrls? | array |
fn blocking_force_update_lists()
Force an immediate refresh of all configured block-list URLs.
fn zone_list()
List all zones (factory: one `zone` per entry, keyed by zone name).
fn zone_create(zone: string)
Create an authoritative zone.
| Argument | Type | Description |
|---|---|---|
| zone | string | Zone name, e.g. lab.example.com |
fn zone_delete(zone: string)
Delete a zone.
| Argument | Type | Description |
|---|---|---|
| zone | string |
fn zone_enable(zone: string)
Enable a previously disabled zone.
| Argument | Type | Description |
|---|---|---|
| zone | string |
fn zone_disable(zone: string)
Disable a zone without deleting it.
| Argument | Type | Description |
|---|---|---|
| zone | string |
fn record_list(zone: string)
List all records in a zone (factory: one `zoneRecord` per record).
| Argument | Type | Description |
|---|---|---|
| zone | string |
fn record_get(zone?: string, domain: string)
Read the live records at a single domain straight from Technitium (factory: one `zoneRecord` each). Ground-truth read-back for one name — unlike `record_list` it queries a single domain rather than the whole zone.
| Argument | Type | Description |
|---|---|---|
| zone? | string | Zone name; inferred by Technitium if omitted |
| domain | string | Record owner FQDN to read live |
fn record_add(zone?: string, domain: string, type: string, ttl?: number)
Add a record. `rData` carries the type-specific fields (e.g. { ipAddress } for A, { cname } for CNAME, { exchange, preference } for MX).
| Argument | Type | Description |
|---|---|---|
| zone? | string | Zone name; inferred from domain if omitted |
| domain | string | Record owner FQDN |
| type | string | A | AAAA | CNAME | TXT | MX | SRV | NS | PTR | ... |
| ttl? | number |
fn record_update(zone?: string, domain: string, type: string, ttl?: number, newDomain?: string)
Update a record. `rData` identifies the existing record; `newRData` carries the new values (mapped to Technitium's new* params).
| Argument | Type | Description |
|---|---|---|
| zone? | string | |
| domain | string | |
| type | string | |
| ttl? | number | |
| newDomain? | string | Rename the record owner, if set |
fn record_delete(zone?: string, domain: string, type: string)
Delete a record. `rData` identifies which record (e.g. { ipAddress }).
| Argument | Type | Description |
|---|---|---|
| zone? | string | |
| domain | string | |
| type | string |
fn allowed_add(domain: string)
Add a domain to the built-in Allowed zone.
| Argument | Type | Description |
|---|---|---|
| domain | string |
fn allowed_delete(domain: string)
Remove a domain from the built-in Allowed zone.
| Argument | Type | Description |
|---|---|---|
| domain | string |
fn allowed_list(domain?: string)
List domains in the built-in Allowed zone (factory: one `listEntry` per domain).
| Argument | Type | Description |
|---|---|---|
| domain? | string | Sub-tree to list; root if omitted |
fn allowed_flush()
Remove all domains from the built-in Allowed zone.
fn blocked_add(domain: string)
Add a domain to the built-in Blocked zone.
| Argument | Type | Description |
|---|---|---|
| domain | string |
fn blocked_delete(domain: string)
Remove a domain from the built-in Blocked zone.
| Argument | Type | Description |
|---|---|---|
| domain | string |
fn blocked_list(domain?: string)
List domains in the built-in Blocked zone (factory: one `listEntry` per domain).
| Argument | Type | Description |
|---|---|---|
| domain? | string | Sub-tree to list; root if omitted |
fn blocked_flush()
Remove all domains from the built-in Blocked zone.
fn client_resolve(domain: string, type: string, server: string, protocol: enum, dnssecValidation?: boolean)
Resolve a domain via the server's DNS client, for debugging. Output is ephemeral.
| Argument | Type | Description |
|---|---|---|
| domain | string | |
| type | string | |
| server | string | this-server | recursive-resolver | system-dns | <ip/hostname> |
| protocol | enum | |
| dnssecValidation? | boolean |
fn logs_query(appName: string, classPath: string, pageNumber?: number, entriesPerPage?: number, descendingOrder?: boolean, start?: string, end?: string, clientIpAddress?: string, protocol?: string, responseType?: string, qname?: string, qtype?: string, qclass?: string)
Query recent DNS query logs (factory: one `queryLog` per entry). Requires the Query Logs (Sqlite) DNS app to be installed.
| Argument | Type | Description |
|---|---|---|
| appName | string | DNS app providing query logs (override if your install differs) |
| classPath | string | App class path (override if your install differs) |
| pageNumber? | number | |
| entriesPerPage? | number | |
| descendingOrder? | boolean | |
| start? | string | ISO 8601 start time |
| end? | string | ISO 8601 end time |
| clientIpAddress? | string | |
| protocol? | string | |
| responseType? | string | |
| qname? | string | |
| qtype? | string | |
| qclass? | string |
fn cache_flush()
Flush the entire DNS cache.
fn cache_list(domain?: string)
List cached zones/records under a domain (factory: one `cacheEntry` per name).
| Argument | Type | Description |
|---|---|---|
| domain? | string | Sub-tree to list; root if omitted |
fn cache_delete(domain: string)
Delete a cached domain entry.
| Argument | Type | Description |
|---|---|---|
| domain | string |
fn dashboard_stats(start?: string, end?: string)
Get dashboard query statistics for a time range.
| Argument | Type | Description |
|---|---|---|
| start? | string | ISO 8601 start (when type=Custom) |
| end? | string | ISO 8601 end (when type=Custom) |
fn settings_backup(options?: record)
Download a full settings backup (zip) and store it as a `backup` file. May contain secrets.
| Argument | Type | Description |
|---|---|---|
| options? | record | Section flags (blockLists, zones, allowedZones, blockedZones, scopes, apps, dnsApps, authConfig, logs, stats). Defaults to a config-only backup. |
fn settings_restore(filePath: string, options?: record, deleteExistingFiles?: boolean)
Restore settings from a local backup zip (multipart upload). Verify the file before running this.
| Argument | Type | Description |
|---|---|---|
| filePath | string | Absolute path to the backup zip on the swamp host |
| options? | record | Section flags controlling what to restore (mirrors settings_backup). |
| deleteExistingFiles? | boolean | Delete existing config files not present in the backup |
Resources
zone(infinite)— An authoritative DNS zone
zoneRecord(30d)— A resource record within a zone
settings(infinite)— Blocking-relevant server settings (enable state, temp-disable, list URLs)
stats(1d)— Dashboard query statistics for a time range
listEntry(infinite)— A domain in the built-in Allowed or Blocked zone
dnsResponse(ephemeral)— Result of a DNS client resolve (debugging — ephemeral)
queryLog(7d)— A query-log entry (requires the Query Logs (Sqlite) app)
cacheEntry(1h)— A cached zone or record name
operationResult(infinite)— Result of a one-shot operation (flush, temp-disable, restore, ...)
Files
backup(application/zip)— A full Technitium settings backup (zip). May contain secrets — short-lived.
03Previous Versions
2026.05.23.1May 23, 2026
04Stats
A
100 / 100
Downloads
0
Archive size
31.3 KB
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented1/1earned
- No slow types1/1earned
- Dependencies pass trust audit2/2earned
- Has description1/1earned
- Platform support declared (or universal)2/2earned
- License declared1/1earned
- Verified public repository2/2earned
05Platforms
06Labels