Downloads, package managers and SSH¶
Termcraft 0.2.0 is the beta release. Its
native archives run without Cargo or a Rust installation. See
installation for downloads and terminal requirements.
Native archives¶
Extract all files and open a terminal in the extracted folder:
| Platform | Start Lantern Run | Classic survival |
|---|---|---|
| Linux | ./play.sh |
./termcraft |
| macOS | ./PLAY.command |
./termcraft |
| Windows | .\PLAY.cmd |
.\termcraft.exe |
The launcher starts the separate Lantern Run route when called without arguments.
Arguments are forwarded, so ./play.sh --help shows available commands. Classic
survival uses the executable directly. The archive includes player documentation,
a license, release notes, launch instructions, a file-hash manifest and an archive
SHA-256 checksum. It excludes development reports, test scripts and review media.
Archives are named termcraft-0.2.0-TARGET.tar.gz on Linux/macOS or
termcraft-0.2.0-TARGET.zip on Windows. MANIFEST.json records the version,
target, source commit, prerelease status and each bundled file's SHA-256 hash. The executable's
--version output matches the archive version.
Copying the executable does not copy your saves. See saving and recovery. macOS builds are unsigned. Check the exact build when downloading from Native artifacts, and use matching builds for co-op.
Several development builds can share the same beta version number. Download every
player's package from the same native CI run; MANIFEST.json identifies its
source_commit. Restart the host/server after replacing its executable: an active
process keeps running the old code. Keep the same world directory, server address,
and player profile to resume existing player records.
Package-manager channels¶
These channels follow approved, published releases. Use native archives or a source build if a channel has not made the version available yet. They are our own channels, not inclusion in Homebrew core or Debian's official repositories.
| Platform | Channel | Install |
|---|---|---|
| macOS, Apple Silicon or Intel | Homebrew tap | brew install pagel-s/termcraft/termcraft |
| Windows x64 | WinGet community repository, pending Microsoft review | Use the Windows archive until accepted; then winget install --id PagelS.Termcraft --exact |
| Ubuntu 22.04+ / Debian 12+, x64 | Signed Termcraft APT feed | Configure the source below, then sudo apt install termcraft |
| Rust users, any supported native target | crates.io, Rust 1.88+ | cargo install termcraft --locked |
Homebrew and APT automatically follow supported published releases. The APT
beta suite carries the game's beta releases, including 0.2.0. WinGet becomes available after the community
submission is accepted. Native archives remain available for manual installation.
APT setup¶
Download the repository's public key and check its fingerprint against
signing-fingerprint.txt
before installing the key:
curl -fsSLo /tmp/termcraft-archive-keyring.gpg https://pagel-s.github.io/termcraft-apt/apt/termcraft-archive-keyring.gpg
gpg --show-keys --with-fingerprint /tmp/termcraft-archive-keyring.gpg
sudo install -m 0644 /tmp/termcraft-archive-keyring.gpg /usr/share/keyrings/termcraft-archive-keyring.gpg
sudo tee /etc/apt/sources.list.d/termcraft.sources >/dev/null <<'EOF'
Types: deb
URIs: https://pagel-s.github.io/termcraft-apt/apt
Suites: beta
Components: main
Architectures: amd64
Signed-By: /usr/share/keyrings/termcraft-archive-keyring.gpg
EOF
sudo apt update
sudo apt install termcraft
The feed retains three supported releases; metadata is signed and refreshed weekly.
The native Linux binary requires glibc 2.35 or later. APT installs the executable
under /usr/bin, guides under /usr/share/doc/termcraft, and hosting resources
under /usr/share/termcraft/hosting. Save locations stay the same.
Preparing a release¶
Keep the approved workflows on GitHub's default branch so their manual release controls and publication event handlers are available.
- Finish playtesting and choose the version in
Cargo.tomland release notes. Create its matching tag only when the source is approved. - Run Prepare verified draft release with that existing tag. It builds all four native targets, exercises the terminal/server, checks native archives, installs the candidate Homebrew formula on both Macs, and checks the signed APT repository and Windows portable package. Every package must identify the same source commit. The workflow creates a draft and refuses to overwrite a published version.
- Review the draft's assets, checksums and notes, then publish it. Publishing triggers Cargo and the WinGet submission workflow. Homebrew and APT check hourly; their Update workflows can also be run manually for an immediate refresh.
The tap and APT repositories use their own Actions tokens and pinned shared tooling.
APT's private signing key belongs only in its APT_SIGNING_PRIVATE_KEY Actions
secret; the public key and fingerprint are committed in the APT repository.
Keep an independent secure private-key backup for rotation and recovery.
One-time Cargo account setup¶
Sign in to Termcraft's crates.io settings
as pagel-s, the existing crate owner. Under Trusted Publishing, add a GitHub
publisher with these exact values:
| Field | Value |
|---|---|
| Repository owner | pagel-s |
| Repository name | termcraft |
| Workflow filename | publish.yml |
| Environment | release |
Use the filename alone, without .github/workflows/. Save the publisher and check
that it appears in the crate settings. No long-lived Cargo token is needed: the
workflow exchanges its GitHub identity for short-lived publishing credentials.
The GitHub release environment permits only v* tags. Manual runs of
Publish Cargo release default to package dry runs. A publication retry must
explicitly enable publish, select an already-published release tag as
source_ref, and run the workflow from a v* tag. This lets corrected publishing
tools upload the existing release without moving its game-source tag or weakening
the environment's tag restriction.
See crates.io trusted publishing.
One-time WinGet account setup¶
- Open GitHub's classic-token creation page. Complete any sign-in or two-factor authentication yourself.
- Name the token
Termcraft WinGet publishing, choose a 90-day expiration, and select onlypublic_repo. Leave the broaderrepo,workflowanddelete_reposcopes unchecked. WinGetCreate currently requires a classic token; fine-grained tokens are not supported. The scope allows changes to public repositories that your account can access, so use a dedicated token. - Generate the token and copy it directly into a new
Termcraft Actions repository secret
named
WINGET_SUBMISSION_TOKEN. Do not paste it into chat, commit it, or pass it as a command-line argument. - Save the secret and check that its name appears under Actions repository secrets. Replace the stored token before it expires; the secret does not renew it.
The workflow passes the secret to WinGetCreate through its environment, following Microsoft's token guidance. Without the secret, it preserves checked manifests for manual submission. A failed submission or missing credential does not prevent downloading native release archives.
Final publication checklist¶
- Finish the two account setups above. Keep the approved version and release notes together with the source changes.
- Open a pull request into
main, review it, and merge once its required checks pass. This activates the new release workflows. - Tag the approved merged source as
v0.2.0and push that tag. Do not move an existing release tag or reuse an already published version. - In Termcraft's Actions tab, run Prepare verified draft release on
mainwith tagv0.2.0. Wait for all native and package-manager checks to pass. - Open the resulting draft under Releases. Check the release notes, release type, four native archives, Debian package, checksums and distribution metadata.
- Publish the reviewed draft when the release is approved. Cargo publication and WinGet submission start automatically. Homebrew and APT pick up the release within their hourly checks, or their Update workflows can be run immediately.
- Check all publishing runs and test the installation commands in the channel table. WinGet installation becomes available only after Microsoft accepts the submission; preparing or submitting manifests does not make the package live.
Join through SSH¶
On a server you control, install Termcraft and run:
./termcraft server 127.0.0.1:25565
# Or serve a named save, after closing its local owner:
./termcraft world serve WORLD_ID 127.0.0.1:25565
On each player's computer, install the same build and an OpenSSH client, then run:
./termcraft join user@host --player alice
# Nondefault ports:
./termcraft join user@host --player alice --ssh-port 2222 --game-port 25566
Complete normal SSH host verification and authentication before the game opens. The command starts an SSH loopback forward, renders in your local terminal and closes the tunnel when the game exits. Keep the server game port bound to loopback; SSH provides the protected transport. The SSH server and account must already permit TCP forwarding. Termcraft does not create accounts or hosts. Windows requires OpenSSH in PATH.
An ordinary SSH account may also allow shell, command and file access. The
client's -N option does not restrict what its credentials can do elsewhere.
Do not give game guests your personal login or private key. Have the server
administrator provide a dedicated forwarding-only account: deny shell/subsystem
sessions (MaxSessions 0), allow only local TCP forwarding, restrict PermitOpen
to 127.0.0.1:25565, and disable remote/Unix-socket forwarding, agent forwarding
and X11. Validate the effective SSH configuration and test that shell/SFTP access
is refused before sharing access. These settings are server-administrator
requirements; the game does not apply them. See the OpenSSH manual.
For a setup without SSH accounts, use safe hosting.
Use the same SSH destination, ports and player profile to reconnect. Changing a host alias or connection details creates a different local identity key. Each player needs a distinct profile when sharing a computer. Authentication/startup has a two-minute deadline; manage credentials through OpenSSH's configuration.
For direct local connections, use termcraft client --player alice. Direct co-op
uses plain TCP: use a trusted local interface, or the SSH wrapper for remote
access. See co-op for saves and gameplay details.