Label server: templates on the server, data in - ZPL, PNG, SVG, PDF, ZIP or JSON out.
333
Templates live on the server, your application sends the data and gets labels back: ZPL, PNG, SVG, PDF, ZIP or JSON. Built on the zplCore rendering engine. Website and documentation: https://zplcore.com/server/
| Tag | Image |
|---|---|
1.0.0, 1.0, 1, latest | NativeAOT build (no .NET runtime in the image) on Ubuntu 24.04 chiseled, linux/amd64 and linux/arm64 |
1.0.0-full, full | JIT build on the ASP.NET Core runtime (Ubuntu 24.04 chiseled), linux/amd64 and linux/arm64: additionally SQL Server sign-in with Microsoft Entra ID / Managed Identity, and the oracle data provider with the Oracle driver you add yourself (see below) |
Both images: no shell, no package manager, non-root user app (UID 1654), port 8080.
Put your label templates into a folder – zplCore label JSON or zplCore Designer documents (*.json). The path below the
folder without .json is the template name (./templates/shipping/parcel.json → shipping/parcel).
docker run --rm -p 8080:8080 \
-v ./templates:/templates:ro \
-e ZPLCORE__AUTH__MODE=apikey \
-e ZPLCORE__AUTH__APIKEYS__0=<your key, at least 16 characters> \
zplcore/server:1.0.0
# ZPL (default)
curl -X POST localhost:8080/v1/labels/shipping/parcel \
-H 'X-Api-Key: <your key>' -H 'Content-Type: application/json' \
-d '[{"Name":"Anna Huber","City":"Vienna"}]'
# the same label as PNG (PDF: application/pdf, several labels as ZIP: application/zip)
curl -X POST localhost:8080/v1/labels/shipping/parcel \
-H 'X-Api-Key: <your key>' -H 'Content-Type: application/json' -H 'Accept: image/png' \
-d '[{"Name":"Anna Huber","City":"Vienna"}]' -o label.png
The authentication mode is required and has no default: apikey, jwt (OIDC: ZPLCORE__AUTH__AUTHORITY,
ZPLCORE__AUTH__AUDIENCE) or none (local tests, or behind your own proxy). Without it the container stops with exit
code 2 and names the setting.
Recommended for operation – read-only root file system, no capabilities, no privilege escalation:
docker run -p 8080:8080 --read-only --tmpfs /tmp --cap-drop ALL --security-opt no-new-privileges \
-v ./templates:/templates:ro -e ZPLCORE__AUTH__MODE=apikey -e ZPLCORE__AUTH__APIKEYS__0=<key> zplcore/server:1.0.0
zplCore Server is commercial software under the zplCore licence agreement: https://zplcore.com/legal/eula/ (also in the
image: /licenses/LICENSE.md; third-party notices: /licenses/THIRD-PARTY-NOTICES.md).
Without a licence key the server runs in evaluation mode: every feature works, without a time limit, but every
output carries the zplCore.com TRIAL watermark (SVG comes as an embedded image). Responses name the mode in the header
X-ZplCore-License (evaluation or licensed), /ready (with authentication) shows it as well.
Licences: https://zplcore.com/pricing/
The offline licence key is read from the secret file /run/secrets/zplcore-license (Docker/Kubernetes secret, reloaded
when it changes) or from ZPLCORE__LICENSE__KEY.
/config/zplcore.yaml, or set any key as an environment variable ZPLCORE__SECTION__KEY
(e.g. ZPLCORE__AUTH__MODE). Secrets (API keys, licence key, connection strings) never belong into the YAML file –
the server refuses to start with them there; use secret files or environment variables.{"records": [...], "variables": {...}}), NDJSON and CSV (streamed).Accept): application/vnd.zpl (default), image/png, image/svg+xml (one label), application/pdf,
application/zip, application/json (report).-full)./health, /ready. API reference: /docs, OpenAPI document: /openapi/v1.json.
Prometheus metrics are off by default: ZPLCORE__METRICS__ENABLED=true (own port: ZPLCORE__METRICS__PORT=9464).-full only)zplCore Server does not ship the Oracle driver. Add it in your own image; the Oracle licence applies between you and Oracle:
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS oracle
ARG TARGETARCH
WORKDIR /driver
RUN dotnet new classlib -n OracleDriver -o . -f net10.0 && dotnet add package Oracle.ManagedDataAccess.Core \
&& dotnet publish -c Release -r linux-$([ "$TARGETARCH" = "arm64" ] && echo arm64 || echo x64) --self-contained false -o /out
FROM zplcore/server:1.0.0-full
COPY --from=oracle /out/ /app/drivers/oracle/
The images are signed with cosign; every platform image carries its SBOM (SPDX) as a signed attestation. Public key: https://zplcore.com/cosign.pub
cosign verify --key cosign.pub zplcore/server:1.0.0
# SBOM of one platform image (digests: docker buildx imagetools inspect zplcore/server:1.0.0)
cosign verify-attestation --key cosign.pub --type spdxjson zplcore/server@sha256:<digest of the platform image>
Content type
Image
Digest
sha256:4057cb174…
Size
55.7 MB
Last updated
1 day ago
docker pull zplcore/server