Lfmt.Zonee 0.1.2

dotnet add package Lfmt.Zonee --version 0.1.2
                    
NuGet\Install-Package Lfmt.Zonee -Version 0.1.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Lfmt.Zonee" Version="0.1.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Lfmt.Zonee" Version="0.1.2" />
                    
Directory.Packages.props
<PackageReference Include="Lfmt.Zonee" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Lfmt.Zonee --version 0.1.2
                    
#r "nuget: Lfmt.Zonee, 0.1.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Lfmt.Zonee@0.1.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Lfmt.Zonee&version=0.1.2
                    
Install as a Cake Addin
#tool nuget:?package=Lfmt.Zonee&version=0.1.2
                    
Install as a Cake Tool

Also available in: Eesti | Русский

ZoneEe

Unofficial .NET client library and CLI for the Zone.eu API v2.

Manage your domains and DNS records from the terminal or from any .NET application.

Disclaimer: This is a community project and is not affiliated with, endorsed by, or supported by Zone Media OÜ. Use at your own risk.

Features

  • DNS management -- list, create, update, delete records (A, AAAA, CNAME, MX, TXT, SRV, NS, CAA, SSHFP, URL, TLSA)
  • Domain management -- list, view details, renew
  • Encrypted credentials -- AES-256 encrypted config with PIN protection
  • Human-friendly output -- color-coded tables with expiry warnings
  • Machine-friendly output -- --json flag for scripting
  • Safe operations -- --dry-run flag for mutating commands
  • Rate limit handling -- automatic retry on HTTP 429
  • Auto-pagination -- fetches all pages transparently
  • Native AOT -- fast startup, small self-contained binary (~5 MB)
  • Dual-use -- CLI tool + NuGet library for .NET projects

CLI (zonee)

Installation

As a dotnet tool:

dotnet tool install -g Lfmt.Zonee.Cli

As a standalone binary:

Download from Releases (Windows x64, Linux x64, Linux ARM64).

Configuration

Interactive setup (recommended):

zonee auth login

Prompts for Zone.eu username, API key, and a PIN code. Credentials are stored encrypted (AES-256, PBKDF2 key derivation) in ~/.zonee/config. Every subsequent command will ask for the PIN.

API keys are generated in Zone.eu account settings under Security > API keys.

Environment variables (for CI/CD, Docker, scripts):

export ZONE_USER=your-username
export ZONE_APIKEY=your-api-key

Environment variables take priority over the config file and bypass PIN.

To use the encrypted config without interactive PIN prompt:

export ZONE_PIN=your-pin

Remove saved credentials:

zonee auth logout

DNS commands

# List ALL records for a domain
zonee dns list example.com

# List records of a specific type
zonee dns list example.com a
zonee dns list example.com mx
zonee dns list example.com txt

# Create a record
zonee dns add example.com a www.example.com 1.2.3.4

# Update a record by ID
zonee dns update example.com a 12345 2.3.4.5

# Delete a record by ID
zonee dns delete example.com a 12345

# Preview what would be sent (no actual request)
zonee dns add example.com a www.example.com 1.2.3.4 --dry-run

# Output as JSON
zonee dns list example.com --json

Supported record types: a, aaaa, cname, mx, txt, srv, ns, caa, sshfp, url, tlsa.

Domain commands

# List all domains (with color-coded expiry dates)
zonee domain list

# Filter by name
zonee domain list --filter example

# Show only domains expiring within 30 days
zonee domain list --expiring

# Show domain details
zonee domain info example.com

# Renew a domain for 1 year
zonee domain renew example.com

# Renew for 2 years
zonee domain renew example.com --period 2

Global options

Option Description
--json Output as JSON instead of a table
--dry-run Show what would be sent without making the request
--version Print version
--help Print help

Rate limit

Zone.eu API allows 60 requests per minute per IP. The tool retries automatically on HTTP 429, but please use it responsibly:

  • Don't poll the API in a loop -- DNS propagation takes time and can't be checked through this API
  • zonee dns list <domain> (all types) makes ~11 requests at once -- use a specific type when possible
  • Use --dry-run to verify commands before executing
  • Don't re-read data you already have

Library (Lfmt.Zonee)

dotnet add package Lfmt.Zonee

Quick start

using ZoneEe;
using ZoneEe.Models;

using var client = new ZoneClient("username", "api-key");

// List all domains
var domains = await client.Domains.ListAsync();
foreach (var d in domains)
    Console.WriteLine($"{d.Name} expires {d.Expires}");

// Get domain details
var domain = await client.Domains.GetAsync("example.com");

// List all DNS A records
var records = await client.Dns.ListAsync("example.com", DnsRecordType.A);

// Create a DNS record
var created = await client.Dns.CreateAsync("example.com", DnsRecordType.A, new DnsRecordCreate
{
    Name = "www.example.com",
    Destination = "1.2.3.4"
});

// Create an MX record with priority
await client.Dns.CreateAsync("example.com", DnsRecordType.MX, new DnsRecordCreate
{
    Name = "example.com",
    Destination = "mail.example.com",
    Priority = 10
});

// Update a record
await client.Dns.UpdateAsync("example.com", DnsRecordType.A, "12345", new DnsRecordUpdate
{
    Destination = "5.6.7.8"
});

// Delete a record
await client.Dns.DeleteAsync("example.com", DnsRecordType.A, "12345");

// Renew a domain
await client.Domains.RenewAsync(new DomainRenew { Domain = "example.com", Period = 1 });

Configuration options

// Using options object
var client = new ZoneClient(new ZoneClientOptions
{
    Username = "your-username",
    ApiKey = "your-api-key",
    BaseUrl = "https://api.zone.eu/v2"  // default
});

// Using an externally-managed HttpClient (for DI / testing)
var httpClient = new HttpClient { BaseAddress = new Uri("https://api.zone.eu/v2/") };
var client = new ZoneClient(httpClient);

Built-in features

  • Rate limit handling -- automatically retries on HTTP 429 (up to 3 times with backoff)
  • Auto-pagination -- ListAsync methods fetch all pages transparently
  • Detailed errors -- ZoneApiException includes status code, response body, and Zone.eu's status message

Common scenarios

Connect domain to Azure App Service

# Verify domain ownership
zonee dns add example.com txt asuid.www.example.com "<verification-id>"

# Point www to Azure
zonee dns add example.com cname www.example.com myapp.azurewebsites.net

# Point root domain to Azure IP
zonee dns add example.com a example.com <azure-ip>
zonee dns add example.com txt asuid.example.com "<verification-id>"

Connect domain to Azure Static Web Apps

zonee dns add example.com cname www.example.com <app>.azurestaticapps.net
zonee dns add example.com txt example.com "<validation-token>"
zonee dns add example.com a example.com <azure-static-ip>

Connect domain to Vercel

zonee dns add example.com a example.com 76.76.21.21
zonee dns add example.com cname www.example.com cname.vercel-dns.com

Let's Encrypt DNS-01 challenge

zonee dns add example.com txt _acme-challenge.example.com "<token>"
# After certificate is issued:
zonee dns delete example.com txt <record-id>

Using with Claude Code

Copy docs/CLAUDE-DNS-TEMPLATE.md into your project as CLAUDE.md (or append to existing one) so that Claude Code knows how to manage DNS for your domain.


Building from source

git clone https://github.com/Lifemotion/zonee.git
cd zonee
dotnet build

Publish native AOT binary:

dotnet publish src/ZoneEe.Cli/ZoneEe.Cli.csproj -c Release -r win-x64
dotnet publish src/ZoneEe.Cli/ZoneEe.Cli.csproj -c Release -r linux-x64
dotnet publish src/ZoneEe.Cli/ZoneEe.Cli.csproj -c Release -r linux-arm64

License

MIT -- Sasha Sovenko

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.2 114 3/27/2026
0.1.0 108 3/27/2026