Fixes
nmap now reflects newly opened ports. Port changes made via Network.addPort / openPort / closePort / removePort were being ignored because nmap served a stale per-IP cache. SDK port mutations now invalidate that cache, so the next scan recomputes from the live network.
Kisscord file-attachment missions can no longer be completed without the file. The attachment requirement was only enforced in the chat UI; other paths (SDK, Resume, scripted chains) could complete the objective without it. SendMessage now verifies the player actually owns the required file at the engine level — otherwise the message isn't sent and no completion event fires.
Files.getByPath / exists / create / createTree now resolve absolute paths correctly. Virtual top-level paths like /etc and /home are resolved from the filesystem root instead of the user's home folder (previously returned null).
New Stuff
Interface Overhaul
Completely redesigned desktop/computer interface.
Reworked taskbar, context menus, themes, and general UI.
Rebuilt from the ground up: Settings, Code++, Notepad, App Store, and Handbook.
Phone fully rebuilt and redesigned.
Redesigned Wi-Fi interface.
New date & time interface, with a 24-hour clock option (toggleable in Settings) for players across different regions.
Redesigned router interface.
Redesigned firewall interface (pfSense).
Websites & Apps
Goagle, Goagle Search, and Goagle Mail rebuilt and redesigned.
LCB client redesigned.
BCC News redesigned.
Performance
In-game optimization pass and removal of unnecessary dependencies.
Content SDK
Files root & path helpers:
Files.getRootPath() → "/"
Files.getRoot() → the root folder's FileInfo
Files.resolvePath(path, cwd?) → normalized absolute path (expands ~, ., ..)
Files.getCurrentWorkingDirectory() → the running command's terminal cwd (falls back to home)
RegisterCommand execution scopes. @RegisterCommand({ scope: "local" | "remote" | "both" }) (defaults to "both"). local commands are hidden inside SSH/remote sessions, remote commands only appear in remote sessions.
Separate local & remote filesystems over SSH. When a custom command runs inside an SSH session, path-based Files.* operations (create, createTree, getByPath, exists, resolvePath, getRoot, getCurrentWorkingDirectory) target the remote machine (its root, and the SSH user's home for ~); everywhere else they target the player's PC. ID-based operations always act on the file the ID refers to.
Files.isRemoteSession() → returns whether the calling command is running inside a remote (SSH) session, for explicit branching.
