WebSorobandocs v1
Open IDE

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.toml

Files 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.rs
use 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.

Next#

  • Compile your crate to Wasm.
  • Start from a template instead of a blank project.