One Java 8 client library + one Next.js application. Advisory-only telemetry and BuiltByBit entitlement observations. No remote shutdowns, automatic bans, or forced licensing dependency. Identifiable extended telemetry requires server-owner opt-in.
client/ Java 8 library, Maven pom.xml, optional Gradle build.gradle, source/tests
web/ One Next.js App Router app: dashboard + v1/v2 telemetry API + persistent services
public/maven/ is generated Maven/Gradle repository content
.env contains unique generated admin password/secret (not committed)
docs/ Protocol v1/v2, integration, security, deployment and website roadmap
dist/ Versioned client JAR and repository copy after build
scripts/ build.sh, start.sh, init-env.sh, publish-maven.py
previews/ Illustrative UI HTML fixtures, render helper and preview PNGs (synthetic data)
./scripts/init-env.sh # only if web/.env does not already exist; will NOT reset existing password
./scripts/build.sh # auto-generates a missing npm lockfile; requires Maven, Node/npm, npm registry access on first build
./scripts/start.sh # auto-builds if missing/stale; starts Next.js on 127.0.0.1:3000Admin login: https://drm.arkflame.com/login. Recover your generated password with:
grep '^DRM_WEB_PASSWORD=' web/.envweb/.env is created once, chmod 600, and ignored by Git. Never use a universal shared default password. Use secrets generated by init-env.sh; rotate after exposure. Reset deliberately by changing DRM_WEB_PASSWORD and DRM_WEB_SESSION_SECRET in that file and restarting. Keep DRM_HASH_KEY stable, otherwise existing BuiltByBit nonce digests cannot be correlated.
DRM_ADMIN_TOKEN and DRM_API_URL are deleted; Next.js uses its private in-process services for admin reads/mutations. Browser does not receive secrets. Session is a signed, HttpOnly, SameSite=Strict cookie valid for eight hours; state-changing routes enforce same-origin checks against the configured public URL or the effective trusted ingress Host. One Node process owns JSON writes. No multi-process deployment or serverless scaling with this storage backend.
Repository: https://drm.arkflame.com/maven/
Coordinates: com.arkflame:arkflame-drm-client:0.6.6
IMPORTANT: The v0.6.5 offline-compiled JAR in dist/ is provided for local evaluation. To publish v0.6.6 at /maven/, run ./scripts/build.sh on a host with Maven and npm access. This produces the canonical Maven JAR and publishes it once; do not manually publish the offline JAR first. Public repository access requires deployment of the site. Read docs/INTEGRATION.md for copy-paste Maven/Gradle dependency and shade examples. The library must be bundled/relocated into your distributed Minecraft plugin; Maven/Gradle compile dependency alone does not ship it.
At plugin startup (exact plugin.yml name is used as product identity):
ArkFlameDrm.start(this);Default endpoint: https://drm.arkflame.com/api/v1/check. If v2 telemetry enabled, also /api/v2/events. Server owner can opt in to additional node/player/operator/plugin/machine telemetry (plugin inventory now includes JAR basename without filesystem path) through the existing arkflame-drm/telemetry.properties config.
POST /api/v1/check: installation and BuiltByBit nonce advisory report.
POST /api/v2/events: session/player-delta and node telemetry.
GET /api/health: readiness probe.
GET /maven/com/arkflame/arkflame-drm-client/maven-metadata.xml: artifact metadata.
The dashboard and all policy/review mutations are only reachable after password login. BLOCK remains a label, never a remote disable.
Backend data moves from old backend/data/* into web/data/drm.json and web/data/graph.json (copy while services are STOPPED). Old data schema 1/2 retained. Never run old backend and new Next.js simultaneously against same JSON data.
This release is an evaluation build, not a fully production-verified deployment. See docs/PRODUCTION-GATES.md for the 43-item audit outcome, deploy/OPERATIONS.md for backup/restore and service steps, and docs/PRIVACY-DISCLOSURE-TEMPLATE.md for a draft disclosure that must be reviewed and published. BuiltByBit configuration is optional: when BBB_EMBED_TOKEN= is empty, reports still work and license checks explicitly show NOT_CONFIGURED. No product-specific license claim is made from nonce-only evidence.
If web/package-lock.json is missing, build.sh invokes generate-lockfile.sh automatically and then uses npm ci. Review and commit the generated lockfile after the first successful dependency resolution. Subsequent builds use that lockfile. start.sh runs the same build automatically if no completed standalone output for the current release exists. Existing web/.env and web/data are preserved. A failed build prevents startup, and no incomplete release is marked ready. Maven and npm registry access are still prerequisites, not automatically installed.
./scripts/build.sh must run Maven package, Java integration test mains, native Node tests, TypeScript check, Next.js production build, and copy the static public repo into Next standalone output. Only after every stage succeeds does it remove client/target.
v0.6.3 local suite: see the release verification report in docs/PRODUCTION-GATES.md for actual commands and remaining deployment blockers. Frontend dependency/runtime checks remain unavailable. Full TypeScript semantic checking and Next.js production build were unavailable without npm dependencies. Full native Maven and Next.js production builds require Maven and installed npm dependencies. No live Minecraft/Folia or live BuiltByBit validation is claimed.
v0.5.0 changes: opt-in plugin JAR basename in v2 inventory, DRM-reported products highlighted in green, suspicious filename/name tokens highlighted in red for human review, per-node/network marker counts, rolling 24h online player/node graphs using bounded five-minute samples, and dark translucent iOS-inspired console styling. No automatic enforcement or unconsented collection. Wire schema extended optionally (plugins[].fileName); existing clients and stored JSON v2 records remain readable. See changelog.
v0.5.1 pass: DRM badges require a currently active reporting session; historical sessions no longer display as green. The chart renders isolated samples. Disk snapshots now use private, unique, exclusive staging files and clean up failed stages.
v0.5.4 pass: Focused iOS-glass console polish, readable dual-scale chart with observed-sample keyboard focus, responsive review cards, source-backed manual suspicious-marker filters and compact overview. See previews/README.md. Preview HTML/PNG uses illustrative sample data and approximated component markup; it is not a running Next.js app screenshot. Runtime validation remains pending. No Java protocol or backend database schema changes.
See docs/ARCHITECTURE.md for service ownership, threading, build, telemetry, and persistence constraints.
v0.5.4 pass: Fixed nested visual surfaces: mobile node/network/overview lists now use flat separated rows within one outer glass section, the activity chart statistics are inline rather than separately boxed, fleet health is an unboxed split summary, and sidebar data policy is plain text. Updated illustrative desktop/mobile previews after source review. No backend, telemetry, licensing, Bukkit API, or persistence change.
v0.5.4 pass: Removed compound card styling from the topbar status, Refresh control and top-right account indicator, now a working link to settings. Flattened related icon/action surfaces. Visual previews use illustrative fixture data, not a live Next.js capture; no backend/protocol changes.
v0.5.5 pass: Strict UTF-8 decoding rejects malformed telemetry payloads before ingestion; v1 storage validates persisted audit/installation bounds while preserving historical transport address values; removed a redundant post-rename chmod step from the 0600-exclusive snapshot staging path; eliminated redundant timestamp parsing in installation retention/listing. No change to wire schemas, login, console layouts, or DRM enforcement. The previews directory retains its v0.5.4 illustrative fixture snapshots because the frontend visuals were not changed.
v0.5.6 pass: Reduced repeated full-map enumerations during v2 player snapshots by keeping event-local capacity counters; unified player presence updates. Retained online-player/node/global limits and historical data contracts. Added snapshot-scale and capacity regressions. Existing illustrative previews are unchanged.
v0.5.7 pass: Fixed an estimated-uptime percentage clamp that incorrectly capped values at 10% instead of 100%. Dashboard/node/network/player queries now use one server observation timestamp throughout each response, avoiding contradictory online states at the heartbeat freshness boundary. Removed an unused slice helper. Added boundary and percentage regression tests; wire schemas, frontend visuals, privacy controls and Java API unchanged.
v0.5.8 pass: Fixed network-detail summary undercount when more than 2,000 nodes share a reporting IP. The UI detail list stays capped at 2,000 rows, but network totals, online nodes, suspicious-marker counts, and latest-seen timestamp now include every matching node. Added a 2,001-node regression checking agreement between network detail and fleet overview. No wire-format, Java API, persistence schema, privacy, enforcement, or UI styling changes.
v0.6.0 pass: Search-scoped player and installation counts now match discovered node results. Rollback-safe session freshness rejects future-dated heartbeats. Overview summaries reuse already-aggregated node counts. The chart distinguishes unique player UUIDs from concurrent node connections. Added three regression tests; Java API, telemetry protocols, JSON schemas, and advisory-only review remain unchanged.
v0.6.1 pass: Reject conflicting storage-file paths and invalid direct source IPs. Validate persisted policy/audit identifiers and protect node/player lookups from inherited object members. Clearing a manual override now removes the redundant policy entry while retaining the audit; repeated decisions avoid duplicate audits and full-graph writes. Seven new Node regressions; no wire protocol, schema, UI, or Java API changes.
v0.6.2 pass: At the 50,000-session ceiling, a new reporting session reclaims the oldest stopped session only; a full active-session store still returns 429. The node and historical player records remain. Repeating an unchanged v1 manual review does not append duplicate audits or rewrite storage. Added session-capacity and idempotence regressions. Under a fully saturated store, reclaiming stopped sessions can reduce session-level historical detail (including historical product associations and uptime estimates); node and player records are retained. No wire protocol or Java API changes.
v0.6.5 pass: Fixed missing-lockfile and missing-build startup failures. Builds automatically generate a missing real npm lockfile on a connected host (no fabricated dependency tree), then use npm ci and run Java/backend/frontend gates. start.sh triggers the build if the web server or current-version completion marker is missing; a failed build cannot launch the web server. Eight automatic-build regressions cover existing/missing/stale builds and failure paths. Maven and npm registry are required for first-time bootstrap; they are not silently installed. Full production compilation remains unverified in this environment.
v0.6.3 pass: BuiltByBit is optional: missing BBB_EMBED_TOKEN does not break startup or telemetry and is displayed as NOT CONFIGURED in review/settings. Nonce-only rights are never claimed as product-specific license proof; cross-product rights propagation is removed. Java v1 reports use bounded asynchronous retries on transport failure, 429 or 5xx without delaying v2 initialization. Snapshot writes synchronize staged bytes and containing directory. Added private operational counters, guarded offline backup/restore, systemd deployment sample, reproducible lockfile gate and live-launch checklist. A complete production build is still blocked until a real npm lockfile is generated and the Maven/Next.js/marketplace/server matrix is verified. See docs/PRODUCTION-GATES.md and deploy/OPERATIONS.md.
v0.6.5 login correction: Login accepts exactly the configured DRM_WEB_PASSWORD, even if it was customized to fewer than 20 characters (a long random password is still recommended). Use ./scripts/start.sh to load web/.env safely through Node's env-file parser, not shell source. A wrong origin now receives a distinct diagnostic. If accessing over HTTP without TLS outside localhost, configure HTTPS before attempting secure-cookie login; DRM_SECURE_COOKIE=false is only for controlled local testing. If external environment variables override .env, remove those overrides or restart with the intended values.