Open source · Self-hostable

Disclose AI use without locking into a platform.

A stateless Go service for SVG badges, human-readable declaration pages and JSON-LD. Self-hostable, internationalised and built for highly available deployments.

  • 8 languages
  • No cookies
  • No database
  • Docker & Kubernetes

https://ai.trustednet.eu/badge/research.svg

Research badge Summary badge Full generation badge
{
  "@type": "AIUsageDeclaration",
  "schemaVersion": "1.1",
  "assurance": "selfDeclared"
}

Feature set

From a visible notice to machine-readable evidence.

Visible notices, readable summaries and machine-readable declarations in one lightweight application.

Visible

SVG badges

Deterministic, cacheable badges generated from presets or structured parameters.

Readable

Declaration pages

Human-readable pages explain AI contribution, activities, review and responsibility.

Machine-readable

JSON-LD and schema

Link, validate or include manifests in build and CMS workflows.

International

Eight languages

German, English, French, Spanish, Italian, Dutch, Portuguese and Polish.

Offline

Signed licensing

Ed25519 licences are verified locally without an external licensing service.

Scalable

High availability

Stateless replicas, readiness checks, HPA, Swarm replicas and CDN-friendly caching.

Privacy-first

No tracking required

No cookies, sessions, external assets or mandatory analytics.

Deployment

Production-ready in a few commands.

Every deployment uses the same Go binary and can run without external services.

Docker ComposeDeclarative setup for a local or single-server deployment.
cp .env.example .env
# Adjust BASE_URL and PUBLIC_NAME in .env
docker compose up -d --build
curl -fsS http://localhost:8080/readyz
Docker CLIBuild the image and run a hardened container directly.
docker build -t ai-disclosure-standard:1.6.2 .
docker run -d --name ai-disclosure \
  -p 8080:8080 \
  -e BASE_URL=https://ai.example.org \
  -e PUBLIC_NAME="AI Usage Disclosure" \
  --read-only --tmpfs /tmp \
  ai-disclosure-standard:1.6.2
KubernetesThree replicas, probes, rolling updates, HPA and a PodDisruptionBudget.
# Image, Domain und TLS-Secret in deploy/kubernetes.yaml ersetzen
kubectl create secret generic ai-disclosure-license \
  --from-literal=token='...'
kubectl apply -f deploy/kubernetes.yaml
kubectl rollout status deployment/ai-disclosure
Docker SwarmOperate several replicas with Docker's native orchestrator.
docker swarm init
export LICENSE_TOKEN='...'
export LICENSE_MODE='offline'
docker stack deploy -c deploy/swarm-stack.yaml ai-disclosure
Run with GoFor development, tests or a native systemd deployment.
go test ./...
go build -trimpath -o bin/server ./cmd/server
BASE_URL=http://localhost:8080 \
PUBLIC_NAME="AI Usage Disclosure" \
./bin/server

Important environment variables

VariableDefaultPurpose
LISTEN_ADDRESS:8080HTTP server bind address.
BASE_URLhttp://localhost:8080Public base URL without a trailing slash.
PUBLIC_NAMEAI Usage DisclosureProduct or site title.
CONTACT_URLhttps://ai.trustednet.euOptional external contact or project page.
DEFAULT_LANGUAGEdeFallback output language.
LICENSE_TOKEN-Vendor-signed licence token.
LICENSE_MODEofflineMinimum mode: offline, hybrid or online.
LICENSE_SERVER_URL-Optional central verification server for hybrid and online mode.

FAQ

Common questions

Can I place the service behind a CDN?

Yes. Badge and manifest responses are deterministic and include ETag and cache-control headers.

Does this automatically make a site legally compliant?

No. The service provides technical declarations and integrations; it does not replace legal review or editorial responsibility.

Start with your own declaration.

The generator works without registration, cookies or external resources.