tachyne Java gateway for Minecraft 26.2 (protocol 776) https://tachyne.com
  • Go 95.7%
  • Dockerfile 4.3%
Find a file
Wesley Channon 6bfbbd18b6 Pin tachyne-common 855ad30 for bundles
Picks up the bundle_contents component translation, the click button the
frame was discarding, and the bundle_item_selected action. No code change
here — the Java gateways share gwsession, where the dispatch lives.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E3k8GjiCuFcFEFmBiXorba
2026-08-15 11:15:44 +02:00
.github/workflows CI: build + publish the component image to ghcr on push to main 2026-07-10 15:15:43 +02:00
cmd Wire TACHYNE_VIEW_CAP; pin common with paced chunk delivery 2026-07-10 19:24:15 +02:00
deploy deploy examples: full classic world by default; real registry refs 2026-07-10 15:31:49 +02:00
.dockerignore tachyne-gw-java-776: initial public release 2026-07-10 14:55:53 +02:00
.gitignore tachyne-gw-java-776: initial public release 2026-07-10 14:55:53 +02:00
CONTRIBUTING.md tachyne-gw-java-776: initial public release 2026-07-10 14:55:53 +02:00
Dockerfile tachyne-gw-java-776: initial public release 2026-07-10 14:55:53 +02:00
go.mod Pin tachyne-common 855ad30 for bundles 2026-08-15 11:15:44 +02:00
go.sum Pin tachyne-common 855ad30 for bundles 2026-08-15 11:15:44 +02:00
LICENSE tachyne-gw-java-776: initial public release 2026-07-10 14:55:53 +02:00
NOTICE tachyne-gw-java-776: initial public release 2026-07-10 14:55:53 +02:00
README.md README: replace the fictional internal/ layout with what the repo holds 2026-08-03 22:19:17 +02:00

tachyne-gw-java-776

tachyne is an unofficial fan project, not affiliated with Mojang, Microsoft, or Minecraft's developer/publisher in any way. See the Disclaimer at the bottom.

Project status

Work in progress. tachyne is young and moving fast: a full survival game runs today, but expect rough edges, missing vanilla features, and breaking changes between updates. Bug reports are genuinely useful — please open a GitHub Issue with your client version/edition and what you saw. Contributions are welcome too: see CONTRIBUTING.md.

Just want to run a server? The quickstart repo brings up the whole stack in one command — Docker Compose or Kubernetes, classic infinite survival by default, real-Cape-Town earth mode as a variant.

What's implemented? Gameplay features live in the world engine, not the gateways — see tachyne-world's feature matrix for what to expect (implemented / partial / missing) as a player.

Gateway for Java protocol 776 (Minecraft "26.2"): terminates real clients, authorizes logins via tachyne-access (fail closed, 30 s cache), attaches each session to a tachyne-world pod over the domain attach protocol, and renders the typed event stream into wire format. It runs the same shared session pipeline as gw-java-770 (tachyne-common/gwsession) with a translation boundary on top: every clientbound packet is composed as canonical 770 via tachyne-common/render770, then rewritten by protocol.TranslatorFor(776) (the chained 770→…→776 translation from tachyne-common) at the client edge; serverbound packets are back-translated 776→770 before the shared parsers lift them into typed attach actions.

The 776 config phase is fully version-native: 26.x registries, the complete UpdateTagsPacket(776) tag data, brand + feature flags — all from the shared tachyne-common/protocol composition (generated tags26x/protomap_26x data; generators live in tachyne-world's scripts/).

Clients arrive via tachyne-ingress on <server-ip>:25565 (handshake protocol routing + PROXY protocol v1 for real client IPs); this pod's service is cluster-internal.

Layout

cmd/gw/            THE WHOLE BINARY: version pinning (776 / "26.2") + env wiring
cmd/mcping/        operational probe: a status ping against any gateway
deploy/            k8s manifests (StatefulSet + cluster-internal service)
.github/workflows  CI: gofmt/vet/test, then build + push to ghcr.io

The gateway itself — front door, login, configuration and the play pipeline — lives in tachyne-common/gwsession, shared with gw-java-770. This repo pins the protocol and wires the environment; fix any gateway bug in tachyne-common, once, and both gateways get it.

Configuration (env)

env meaning
TACHYNE_LISTEN client listen address (default :25565)
TACHYNE_BACKEND world attach address (tachyne-world-0.…:25500)
TACHYNE_ATTACH_TOKEN attach shared secret (secret tachyne-attach-token)
TACHYNE_ACCESS_URL / TACHYNE_ACCESS_TOKEN tachyne-access (unset = checks off, dev only)
TACHYNE_MOTD server-list description
POD_NAME downward API; trailing ordinal = SID
TACHYNE_WORLD_PATTERN shard-aware backend template (tachyne-world-%d.…:25500)
TACHYNE_VIEW_CAP max view radius in chunks (default 12)

Build / test / deploy

go build ./... && go test ./...
go run ./cmd/gw

GitHub Actions runs gofmt/vet/test on every push and PR, then builds and pushes ghcr.io/tachyne/tachyne-gw-java-776:{latest,<short-sha>}; deploy with kubectl rollout restart on the StatefulSet. When a tachyne-common change is involved, pin the new sha in go.mod and deploy the world pod first.

Design notes

  • One gateway build = one client protocol family. Other versions get sibling deployments; ingress routes by handshake protocol. 773775 are currently unserved (deprioritized).
  • Adding a future protocol 77x = a new translation step in tachyne-common (ID remap + body rewriters for changed packets), a sibling repo copy, and an ingress route — the world engine never changes ("worlds are versionless").
  • See tachyne-world/docs/SHARDING.md for the multi-world-pod plan this gateway will implement the client half of (upstream set, rehome).

Deployment

Dockerfile builds a static Go binary into a minimal image. deploy/ holds working Kubernetes manifests (the ones this project actually runs) — treat them as examples: substitute your own image registry, hostnames, namespaces and secrets before applying them to your cluster.

Credits

All protocol rendering comes from the shared tachyne-common library — see its credits (PrismarineJS/minecraft-data, misode/mcmeta, the Minecraft Wiki, ViaVersion as factual references). This repo itself has no third-party dependencies beyond that library.

Development transparency

tachyne is built by its maintainer working with an AI coding agent (Anthropic's Claude): substantial portions of the implementation were written by the model under human direction, and every change is reviewed, tested and deployed by the maintainer. The project's engineering discipline is designed for exactly this workflow — byte-oracle tests pin the wire format, full test suites gate every image build, and real-client verification signs off gameplay. Disclosed here for transparency; judge the code on its behavior.

License

Licensed under the Apache License, Version 2.0 — see LICENSE and NOTICE. Note §6: the license grants no rights to the tachyne name or any trademarks.

Disclaimer

tachyne is an unofficial, independent project. It is not affiliated with, endorsed, sponsored, or approved by Mojang Studios, Mojang Synergies AB, Microsoft Corporation, or any of their subsidiaries — the developer and publisher of Minecraft have no involvement with this project. "Minecraft" is a trademark of Mojang Synergies AB. This project contains no Minecraft game code; all game behavior is independently reimplemented, and data tables are built from openly licensed community datasets (see Credits).