Quick answer
Clear the opening of Code: Terraform in this order: boot the terminal, read the thermometer, connect the transmitter to earth, and send the live temperature. That first contact unlocks the shop and biology lab. Next, repair oxygen (read → scale → calibrate) and pressure (even keep / odd +1 → stabilize), buy a solar generator plus a small battery, and run a forever loop that keeps panel tilt + sun elevation at 90.
Early Access is live as of September 9, 2026. The scripts below come from recorded starter footage (closed testing / demo). Follow the in-game docs if a component name or method differs on your build.
Current build: what changes your opening plan
On the default Steam branch, 0.1.28 and later lower two titanium gates: Wide Sonar unlocks at 1.8 kPa pressure, and Industrial Drill at 30 ppt oxygen. Older instructions to wait for 6 kPa or 100 ppt add an unnecessary delay. These are unlock requirements; they do not mean every contact is identified or every deposit can be mined. Read the sonar or drill’s hardness limit and mineral list before buying hardware for a particular contact.
If the first scripts feel opaque, open the Code Lab Concepts half. Its 49 short lessons have runnable examples; the first eight practice lessons now supply the solution’s outline. Run one example, change its relevant value, and watch the output before pasting a longer automation loop into the colony. Keep generation and storage operating while you practice.
0.1.36 supports 19 languages including English. The earlier 0.1.32 language pack is already on the live branch. Switch under Settings → Language; Steam’s own language setting does not select it. Python keywords, function names and the game API remain unchanged when menus and DOCS are translated — use the exact component ID from your current machine card rather than translating a quoted name yourself. See the patch notes for the full update.
Sources: 0.1.28 announcement, September 30 experimental announcement, October 12 languages and deep oil announcement. Checked October 16, 2026. The starter code below still comes from earlier recorded builds.
Opening order
Do not skip ahead to biology or contracts. The first hour is one chain:
- Boot the terminal and get into the main console.
- Read the live thermometer value.
- Connect the transmitter to
earthin the same script run. - Transmit
current_temperaturewith that live value. - After first contact, repair oxygen, then pressure.
- Buy solar generation + a battery, then script the tracker so power does not drop while you write the next script.
If a later script “does nothing,” check power and the machine you are editing before you rewrite the algorithm. That false negative is common once the base starts drawing more than the first generator.
First contact (Earth uplink)
This is the first real objective. Hardcoding a temperature from someone else’s screenshot will fail when the reading changes.
thermo = get_component("thermometer")
value = thermo.get_value()
transmitter = get_component("transmitter")
transmitter.connect("Earth")
transmitter.transmit("current_temperature", value)
What has to be true on the same run:
get_value()is the current reading, not a guessed number.connect("Earth")happens beforetransmit(). The connection does not stay armed across later runs.- The first
transmit()argument is a string.current_temperaturewithout quotes throwsexpected string for key.
Success is the objective message and the credit change, not a special return value from transmit(). Recorded starter builds paid the first credit reward and opened the shop plus biology lab here.
Stuck after a clean-looking script? See Temperature Uplink / First Contact.
What the shop is for
After first contact you can buy hardware. For the opening stretch, the useful pair is a solar generator and a small battery. Sensors and later machines stall when the grid is empty; the code then looks wrong when the real problem is power.
Do not wait until every sensor is pretty. Get generation + storage online, then keep writing.
Oxygen: live value, then calibrate
The oxygen hardware is already there. The starter repair is software: the raw reading is not in the expected format yet.
sensor = get_component("oxygen sensor")
oxygen = sensor.get_value()
corrected = oxygen * 100
sensor.calibrate(corrected)
The recorded completing path multiplies the live reading by 100, then calls calibrate(). Do not paste a fixed oxygen number from another player. If the current objective text shows a different conversion, follow that build’s docs and treat * 100 as the pattern that cleared the recorded run.
Full page: Oxygen Sensor Calibration.
Pressure: odd/even, then stabilize
Pressure is the first clean if/else. Even readings are valid. Odd readings are treated as corrupted and get + 1. Then stabilize().
p_sensor = get_component("pressure sensor")
p = p_sensor.get_value()
if p % 2 == 0:
fixed = p
else:
fixed = p + 1
p_sensor.stabilize(fixed)
p % 2 is the remainder after dividing by two. 0 means even. Use == in the condition, not =. Indent the if / else bodies. The final method is stabilize(), not calibrate().
If the branch is confusing, print p and fixed once before you stabilize. Full page: Pressure Sensor Solution.
Solar: one-shot tilt is not enough
The opening solar rule is sun elevation + panel tilt = 90. If the sun is at 60, tilt is 30. The sun keeps moving, so a script that sets tilt once and exits leaves the panel behind.
clock = get_component("clock")
while True:
sun = clock.get_elevation()
self.set_tilt_degrees(90 - sun)
Edit the solar generator’s script. self has to be that generator. If a correct tracker “stops helping,” the base may have outgrown current generation/storage — that is a capacity problem, not a broken formula.
Full page: Solar Tracker Script.
What to do when it errors
Fix in this order. Most opening failures are the first four rows.
| What you see | Usually means | First fix |
|---|---|---|
expected string for key | transmit() key is not a string | Quote it: "current_temperature" |
expected indent at start of block | if / else / while body not indented | Fix the block |
| Component not found | Name does not match in-game docs | Copy the name from the docs panel |
| Script looks right, objective does not move | No connect("Earth") on this run, or the machine has no power | Connect in the same run; check battery |
cannot access recipe on none | Biology lab has no analyzed specimen | Do not start contracts/biology until self.input is ready |
Longer triage: Common Errors & Debugging. Copyable starters live in the Script Library.
After the opening stretch
Once oxygen, pressure, and solar are stable, the next recorded systems are the biology lab / bio collector and uplink contracts. Those need machine state (cargo, analyze, connect-again) more than new syntax.
Advanced drones, factories, outposts, and fluid networks are in Early Access, but this page does not publish unverified APIs for them.
Patch 0.1.22 changed the tools, not the opening path (September 13, 2026)
The first post-launch patch landed two days after Early Access opened. Nothing in the opening chain above was replaced — first contact, the two sensor repairs and the solar tracker still work as scripted — but the tooling around them improved, and two items are worth knowing as a beginner:
- A DOCS shortcut and better tutorials/onboarding. If you were hunting for the component names used above, the in-game docs panel is now one shortcut away.
- VS Code integration and other external editors, with script controls, debugging and more reliable syncing, plus manual exports to PDF, HTML and Markdown. You do not need any of this for the opening chain; it matters once you write longer scripts.
- Console errors are clearer, and boot-script output plus script filtering were fixed — so a script that appeared to print nothing on the launch build is worth re-testing.
Existing saves carry over. If something on your build still differs from the steps above, the in-game docs win.
Steam price on 2026-09-13: $13.49 USD (10% launch discount on $14.99, still showing two days after launch).