37Planned: zplCore Server
Planned, not available yet. zplCore Server is planned as a ready-to-run container. The feature set below is a plan and may change; there are no prices and no purchase yet. Interested? Ask to be notified.
Template and data in, labels out – as a container. The templates live on the server, your application sends only the data (or the server fetches it itself through a named query) and gets ZPL, PNG or PDF back, or the labels are printed directly.
~4 msstartup
~11 msfirst label
~100 MBimage
Measured in the NativeAOT test on linux/arm64 (see NativeAOT); the server itself is planned.
Templates – store once or load dynamically
- JSON templates from a volume, Kubernetes ConfigMap, Git, S3/MinIO, Azure Blob, Google Cloud Storage or via HTTP (URL or inline in the request)
- Cached, hot reload on change, versioned; called by path, e.g.
versand/dhl-100x150 - The same JSON templates as in the SDK (
Label.ToJson): design once, use them in your app and in the container
Data – send it or let the server fetch it
- JSON right in the request
- Named database sources for SQL Server, PostgreSQL, MySQL/MariaDB, SQLite and Oracle: predefined, parameterised, read-only queries
- Connection strings only from secrets: Docker and Kubernetes secrets, Key Vault, Secrets Manager
- Files (CSV, Excel, JSON), REST APIs and queues: Kafka, RabbitMQ, Azure Service Bus, AWS SQS
In your own .NET app you use EF Core directly with the SDK; in the container, named queries do the job without code.
Outputs – stream, print, store
- ZPL as a stream, even for 100,000+ labels per job
- PNG, SVG, PDF, ZIP or JSON, chosen with the
Acceptheader - Direct printing to named printers over TCP 9100, checked first with the printer twin
- Storage in S3, Azure Blob or a volume; webhook or queue message when done
Cluster – scales with the load
- Stateless and horizontally scalable: Kubernetes HPA or KEDA by CPU load or queue length
- NativeAOT: starts in milliseconds
/health,/ready,/metrics(Prometheus) and OpenTelemetry- One config file
zplcore.yamlor environment variables, plus a Helm chart
What it will look like
# serve the templates in ./templates
docker run -p 8080:8080 \
-v ./templates:/templates:ro \
zplcore/server
# data in, ZPL out
curl -X POST \
localhost:8080/v1/labels/versand/dhl-100x150 \
-H 'Accept: application/vnd.zpl' \
-H 'Content-Type: application/json' \
-d '{"name":"Anna Huber","city":"Wien"}'
Also planned
- REST API with OpenAPI and interactive API docs at
/docs - One multi-arch tag for linux/amd64 and linux/arm64
- Distroless, non-root, read-only root file system; signed images with SBOM
- Offline licence, no phone-home; dev/test free (with watermark)
Target platforms
- linux/arm64 & armv7, e.g. Raspberry Pi 4/5 (64-bit) and Pi 2/3
- linux/amd64 & NAS: x86-64 servers, VMs and Synology DS923+ (Container Manager)
- Docker & Podman (
docker run/podman run), Kubernetes with a Helm chart - Cloud container services on Azure, AWS and Google Cloud; on-prem and air-gapped
- Windows & macOS via Docker Desktop

