
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).
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).
Goagle, Goagle Search, and Goagle Mail rebuilt and redesigned.
LCB client redesigned.
BCC News redesigned.
In-game optimization pass and removal of unnecessary dependencies.
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.