In development — not released yet, and everything may still change. Follow along in the devlog

Riftfield Guide

Everything to know, from waking up in the woods of another world to running a server your friends can join around the clock.

Getting started

Open the game → Customize character → Single player to make a new world, or Play with friends to join a friend's world or a server. Every world comes from a different seed: the map, the ore, the caves and where the temple stands.

Press G for the objectives, one step at a time, and H for the guide to every system in the game. The language (Thai or English) is in Settings.

Controls

Every key can be changed in Esc → Settings · Xbox gamepads work · phones get a joystick and on-screen buttons

Keyboard / mouseGamepad
Walk / runWASD / arrows · hold ShiftLeft stick · LT/X
Use what's in handSpace / clickA / RT
Pick a slot1–9, 0 / mouse wheelRB, ◀ ▶, ▲
Dodge / spin slashQ / RLB / click left stick
Switch weaponV▲ (on the sword slot)
Dash slashRun + slashLT/X + RT
AimMouseRight stick
Craft, repair, cookCY
Wardrobe / eat / mapE / F / MRight stick / B / Back
Bounties / store in chest / pinB / X / P— / ▼ / —
Objectives / guide / chatG / H / Enter
Zoom / hide HUD= - / F10

Your first days

  1. Chop wood, break stone, and build a workbench (C) by the Rift Gate
  2. Make a sword and a hoe; plant vegetables near home — food gives buffs that help in a fight
  3. Go down into the caves for copper and tin, build a furnace, and upgrade your sword and armour
  4. Be ready before a Rift Moon night, and for the raid on the gate every 7 days
  5. Find the ancient temple, repair the Rift Machine, then go back and rebuild Ashford

Farming

Till with the hoe (slot 2), sow with slot 3 (press it again to switch seeds) — crops grow in 3 stages, and after the sprout every stage needs water before it grows on (a blue droplet floats over a thirsty crop). Ripe crops glint.

Host / join

Two ways:

To join: main menu → Play with friends → enter the IP or domain, the port (24567 by default) and the password if there is one. Everyone needs the same game version as the server.

A server with Docker

You need: a Linux machine (a VPS with at least 1 vCPU / 1 GB RAM for 4–8 players), Docker with Compose, and a UDP port you can open.

mkdir riftfield && cd riftfield
curl -O https://rift-field.com/server/docker-compose.yml
curl -o .env https://rift-field.com/server/env.example
nano .env                   # world name, password, ...
docker compose up -d
docker compose logs -f server

Docker pulls the ready-made image ghcr.io/rennyyy/riftfield-server itself — no source code needed. It runs on x86 and ARM (e.g. Oracle Ampere, Raspberry Pi 4/5).

This line means it's ready:

[server] Riftfield 1.9.0 — world "server" (seed 1819872895) on UDP 24567, up to 8 players
Time in the world stops while nobody is online — crops don't grow, nothing raids, days don't pass. It carries on the moment someone comes in.

Server settings

Set them in .env, or pass --key=value arguments when running it yourself; arguments win over environment variables.

VariableArgumentDefaultMeaning
RIFTFIELD_VERSION—latestThe image version, e.g. 1.9.0 — pin it to match the players' game
RIFTFIELD_WORLD--world=serverWorld name = save file name; a save by that name is loaded
RIFTFIELD_PORT--port=24567UDP port
RIFTFIELD_PASSWORD--password=(empty)Password to join; empty = none
RIFTFIELD_MAX_PLAYERS--max-players=81–16 players
RIFTFIELD_SEED--seed=(random)Only when making a new world; a number or a word
RIFTFIELD_DIFFICULTY--difficulty=normaleasy · normal · hard
RIFTFIELD_PVP--pvp=falsePlayers can hit each other
RIFTFIELD_GUESTS_CAN_BUILD--guests-can-build=truePlayers can build and break things in the world
RIFTFIELD_DAY_LENGTH--day-length=600Length of a day in the game (seconds)
RIFTFIELD_AUTO_UPDATE—falsetrue = move the server to the newest image on its own once nobody has been on for the time below (needs RIFTFIELD_VERSION=latest). The world is always saved first.
RIFTFIELD_UPDATE_IDLE_MINUTES—30Minutes the server must be empty before it updates
RIFTFIELD_UPDATE_CHECK_MINUTES—10How often it checks
With auto-update on, players need the same new version of the game to join. See when the server updated with docker compose logs updater.

Change .env, then run docker compose up -d again for the new values to take effect.

Ports and domains

Backups, updates, moving saves

Saves live in the Docker volume worlds (in the container, /home/riftfield/.local/share/godot/app_userdata/Riftfield/worlds); the game keeps 3 more backups of its own (.bak1–.bak3).

The server saves every minute someone is playing, whenever someone leaves, and on docker compose stop / down.

Back up to your machine

docker compose cp server:/home/riftfield/.local/share/godot/app_userdata/Riftfield/worlds ./backup-worlds

Move a world played in the game onto the server

Local saves: Windows %APPDATA%\Godot\app_userdata\Riftfield\worlds · macOS ~/Library/Application Support/Godot/app_userdata/Riftfield/worlds · Linux ~/.local/share/godot/app_userdata/Riftfield/worlds

docker compose cp ./my-world.json server:/home/riftfield/.local/share/godot/app_userdata/Riftfield/worlds/
# then set RIFTFIELD_WORLD to the file's name (without .json)
docker compose up -d

Updating the game

docker compose pull
docker compose up -d

If RIFTFIELD_VERSION is set to a version number, change it in .env first, then run those two lines.

Players have to update their game to the server's version, or they can't join ("game version doesn't match the host").

Build from source / without Docker

Build the image yourself from source (for the team, with access to the repo):

git clone https://github.com/Rennyyy/Riftfield.git
cd Riftfield
cp .env.example .env
docker compose up -d --build

Or run it with Godot 4.7 straight from the project folder:

godot --headless --path . -- --server --world=myworld --port=24567 --password=secret

Stop it by creating the file named in RIFTFIELD_STOP_FILE (the server saves and quits within a second) — killing the process loses whatever happened since the last save.

FAQ

My friends can't connect

Check the port is open as UDP (not TCP), in the machine's firewall and the provider's. Look at the log with docker compose logs server: no "joined" line means the packets aren't getting there.

"This name is already in use in this world"

Characters are tied to the player's name: what they carry and where they stand come back when you join with the same name. Change your name in the main menu.

How much does a server use?

Next to no CPU while nobody plays · with 1 player about 110 MB of RAM and under 10% of one core; more players mean more of the world loaded.

Can I change an existing world's seed?

No — a world keeps the seed it was made with. For a new map, set RIFTFIELD_WORLD to a new name.