Download / Get started
Up and running in five minutes
zplCore comes as NuGet packages for .NET 10 and as containers on Docker Hub. Both run right away without a key – the outputs then carry a watermark. For tests without a watermark, request a free trial key.
NuGet (.NET 10)
dotnet add package ZplCore
All packages on nuget.org/profiles/zplcore: ZplCore (the engine), ZplCore.Designer, ZplCore.Testing, the tools ZplCore.Cli and ZplCore.Mcp and more.
Docker Hub
docker pull zplcore/server:1.0.0 docker pull zplcore/designer:1.0.0
zplcore/server – labels as a service (NativeAOT, and -full), and zplcore/designer – the label editor with render API. linux/amd64 and linux/arm64, signed, with SBOM.
.NET · Docker · Trial licence · zplCore Capture · Samples on GitHub
.NET
Template and data in, ZPL, PNG and PDF out
1. Create a project
dotnet new console -o hello cd hello dotnet add package ZplCore
2. A template and data
# hello.json is the label template, data.json the records
echo '{"unit":"Mm","width":50.8,"height":25.4,"items":[{"type":"text","name":"title","x":3,"y":4,"width":44,"height":6,"fontSize":10,"dataField":"name"}]}' > hello.json
echo '[{"name":"Hello"},{"name":"zplCore"}]' > data.json3. Program.cs
using System.Text.Json;
using ZplCore;
using ZplCore.Labels;
var label = Label.FromJson(File.ReadAllText("hello.json"), strict: true);
var data = JsonSerializer.Deserialize<List<JsonElement>>(File.ReadAllText("data.json"))!;
string zpl = label.For<JsonElement>().ToZpl(data, dpi: 203); // one label per record
File.WriteAllText("labels.zpl", zpl);
var renderer = new ZplRenderer(new ZplRenderSettings { Dpi = 203 }.WithLabelSizeMm(50.8, 25.4));
File.WriteAllBytes("label.png", renderer.ProcessCommands(zpl)[0]); // first label as PNG
renderer.Settings.OutputFormat = ZplOutputFormat.Pdf;
File.WriteAllBytes("labels.pdf", renderer.ProcessCommands(zpl)[0]); // all labels, one page each4. Run
dotnet run
# writes labels.zpl, label.png and labels.pdf (two labels, one page each)Next steps: documentation (label model, data binding, barcodes, printing) · API reference
More .NET samples: one console program per task on GitHub
Samples on GitHub
More code samples: github.com/zplcore/samples
One short console program per task – render ZPL to PNG, PDF, SVG and JPG, lint, format, diff and convert between 203, 300 and 600 dpi, compliance and scan checks, RFID, GS1 and barcodes, images, SVG and PDF to ZPL, EPL2 – plus docker compose, Kubernetes, Helm, AWS ECS/Fargate, Azure Container Apps and Google Cloud Run. Each with a README and screenshots, MIT-licensed.
Docker
Server and designer with docker compose
docker compose: server and designer
# compose.yaml services: server: image: zplcore/server:1.0.0 ports: ["8080:8080"] volumes: ["./templates:/templates:ro"] environment: # none = no login, only for a local test; in production apikey or jwt: # https://zplcore.com/docs/server/#auth ZPLCORE__AUTH__MODE: none read_only: true tmpfs: [/tmp] designer: image: zplcore/designer:1.0.0 ports: ["8081:8080"] volumes: ["./templates:/templates:ro"] environment: # none = no login, only for a local test; in production apikey or jwt: # https://zplcore.com/docs/designer/#quickstart-docker ZPLCORE_DESIGNER__AUTH__MODE: none read_only: true tmpfs: [/tmp]
Test it: curl and the designer
# 1. a first template mkdir templates echo '{"unit":"Mm","width":50.8,"height":25.4,"items":[{"type":"text","name":"title","x":3,"y":4,"width":44,"height":6,"fontSize":10,"dataField":"name"}]}' > templates/hello.json # 2. start server and designer docker compose up -d # 3. data in, ZPL out – and the same label as PNG curl -X POST localhost:8080/v1/labels/hello \ -H 'Content-Type: application/json' \ -d '{"name":"Hello zplCore"}' curl -X POST localhost:8080/v1/labels/hello \ -H 'Content-Type: application/json' \ -H 'Accept: image/png' -d '{"name":"Hello zplCore"}' -o hello.png # 4. open the designer in the browser # http://localhost:8081/designer/ # API docs of the server: http://localhost:8080/docs
The example runs without a login (none) – for a local test only. In production use API keys or JWT: authentication of the server · designer.
Everything about templates, data sources, printing and operation: server documentation · designer documentation
Kubernetes, Helm, AWS, Azure and Google Cloud Run: deployment samples on GitHub
Trial licence
Test without a watermark
Without a key every output carries the zplCore.com TRIAL watermark: it gets in the way of barcode checks and exports and costs rendering time. A free trial key removes it for 14 days – full speed, barcodes, PDFs and print data exactly as in production. The same key works for the SDK, the designer, the server, the command line tool and zplCore Capture.
zplCore Capture
Migrate labels from other programs
The Windows app takes over labels from NiceLabel, BarTender, TEKLYNX and other label programs as zplCore templates. zplCore Capture is not a public download: request it with the same form (zplCore Capture is ticked already) – you get the trial key and a personal download link.

