# Versioning ## Sandbox Versioning sandbox versioning requires very basic operations to manipulate which versions to install, what can overriden. Maybe a builder-like object has the best experience here: ```rust let binary = sandbox_utils::install() .version(...) .into_path(...) .await?; binary.init() //optional //.options() .await?; binary.run() //optional //.options() .await?; ``` ## Workspaces versioning How does versioning look like in workspaces? Sandbox is very programmatic and is the base component for specifying which version to retrieve, meanwhile workspaces can be dealing with more than one version at a time. ### Syntax Normally, we can spawn a worker with default sandbox environment: ```rust let worker = workspaces::sandbox().await?; ``` Then to configure it, we can have: ```rust let worker = workspaces::sandbox() .version("hash") .await?; ``` Won't be a breaking change since `sandbox()` can return a `impl Future` object. We can even specify the path to the binary if we wanted to: ```rust let worker = workspaces::sandbox() .path("/path/to/binary") .await?; ``` ## Folder Structure ``` near-sandbox-utils/ sandbox-{hash} sandbox-{hash} sandbox-{tag} ```