Docs
The IDE
The three-zone layout, the file tree, multi-file projects and module resolution, the command palette, and autosave.
The IDE is one full-screen workspace split into three zones, with a console docked below and a status bar across the bottom.
The layout#
- Left, file explorer. A nested, collapsible tree of your project's files.
- Center, editor. A Monaco editor with one tab per open file. The Compile, Test, and Deploy buttons live in the tab bar.
- Right, contract console. The Invoke panel and contract info for the deployed contract.
- Bottom, console. Compile, test, and deploy logs. Toggle it from the status bar.
- Status bar. A slim strip showing the language, cursor position, problem
counts, network (
Testnet), and the save state.
The file tree#
Files render with an icon by extension: .rs in violet, .toml in amber,
.json in blue, everything else neutral. Folders sort above files; both sort
alphabetically. Directories start expanded, click a folder to collapse it.
Right-click any folder for New file… or New folder…. Right-click a file for Rename / move… or Delete. Hovering a file row also reveals inline rename and delete buttons.
Multi-file projects#
A project holds real, project-relative paths, not a flat list of names. A typical multi-file crate:
src/lib.rs
src/storage.rs
src/admin/mod.rs
tests/integration.rs
Cargo.toml
.cargo/config.tomlFiles are addressed by their full path, so src/mod.rs and src/admin/mod.rs
are distinct files, not a collision.
Module resolution#
Module declarations resolve the way rustc resolves them. lib.rs, main.rs,
and mod.rs declare submodules in their own directory; any other foo.rs
declares submodules in a foo/ subdirectory.
So a mod storage; in src/lib.rs resolves to src/storage.rs:
#![no_std]
mod storage; // resolves to src/storage.rsuse soroban_sdk::{Env, Symbol, symbol_short};
pub fn key() -> Symbol {
symbol_short!("counter")
}A mod admin; in src/lib.rs would instead resolve to src/admin.rs or
src/admin/mod.rs.
Missing-module warning
When a .rs file declares mod x; but no matching x.rs or x/mod.rs
exists in the project, the explorer flags it. Add the file at the resolved
path to clear the warning.
Creating files and folders#
New file takes a path, not just a name. Intermediate folders are created
implicitly, entering src/admin/mod.rs creates the src/admin/ folders along
with the file. A leaf with no extension gets .rs appended, so src/storage
becomes src/storage.rs.
Paths are validated before they're accepted. These are rejected:
- An absolute path or a leading
/(/src/lib.rs). - A
..segment (../other/lib.rs). - A space inside any segment (
src/my file.rs). - An empty segment (
src//lib.rs) or a\separator.
Tabs and breadcrumb#
Each open file gets a tab keyed off its full path, so two files named mod.rs
in different folders never collide. A tab shows a folder breadcrumb before the
file name, src/admin/mod.rs reads as src/admin/ mod.rs, with the directory
dimmed.
Command palette#
Press ⌘K (or Ctrl+K) to open the command palette. It runs actions and jumps
between files:
- Compile project (
⌘B), Deploy to testnet, Run tests - New file, Save project (
⌘S), Toggle console - Any open file by path
Autosave#
Edits autosave to the server about 900ms after you stop typing. The status bar shows Saving…, then Saved with a cloud icon. New files, renames, and project-name changes persist immediately rather than waiting for the debounce.
Projects are real server records. Selecting or creating a project saves it on the spot, and your files are there when you refresh, every project you've made is listed in the project menu.
Nothing to install
Compilation and signing run on the server. You never set up Rust, the
wasm32 target, or the Stellar CLI.
