# 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}
```