rototo
DocsReference
Reference

Workspace Sources Reference

Applications and CLI commands do not have to read a workspace from the local filesystem. They load a workspace source. That source is the deployment handle: it says which reviewed configuration tree should be staged, linted, and used for future resolutions.

The same source forms are used by the CLI and SDK.

Supported Forms

FormExampleNotes
Local pathexamples/basicReads the directory directly.
file:// URLfile:///srv/configReads a local directory through a file URL. Fragments are not supported.
git+file://git+file:///repos/config.git#main:workspaceClones a local git repository.
git+https://git+https://github.com/acme/config.git#mainClones over HTTPS.
git+ssh://git+ssh://git@example.com/acme/config.git#mainClones over SSH using the process git configuration.
HTTPS archivehttps://example.com/config.tar.gz#:workspaceDownloads and extracts an archive over HTTPS.

Plain http:// sources are rejected. Use HTTPS for archive sources.

git+http:// sources are also rejected.

Git Fragment Syntax

Git sources support a fragment after #:

git+https://github.com/acme/config.git#main
git+https://github.com/acme/config.git#main:workspaces/prod
git+https://github.com/acme/config.git#:workspaces/prod

The part before : is the git ref. The part after : is the workspace subdirectory inside the checkout. If no ref is supplied, git's default checkout is used. If no subdirectory is supplied, the checkout root is the workspace.

Refs that start with - are rejected before invoking git.

When the ref is a full 40-character commit SHA, rototo treats the source as immutable. Immutable sources load reproducibly, but periodic refresh does not discover new commits from them.

HTTPS Archive Fragments

HTTPS archive sources support only subdirectory fragments:

https://example.com/config.tar.gz
https://example.com/config.tar.gz#:workspaces/prod

Archive sources do not support a ref. If an archive contains more than one possible workspace root, pass #:subdir so rototo can stage the intended workspace.

Archive downloads follow HTTPS-only redirects. Bearer auth is available through the CLI --workspace-token flag, the ROTOTO_WORKSPACE_TOKEN environment variable, or SDK SourceAuth::Bearer.

Subdirectories

Subdirectory fragments must be relative paths inside the staged source. Rototo rejects unsafe paths and paths that escape the staged checkout or archive.

For local file:// sources, fragments are not supported. Use a local path that points directly at the workspace root.

Source Limits

SourceOptions::default() uses these limits:

OptionDefault
Git command timeout60 seconds
HTTP request timeout30 seconds
Maximum archive download50 MiB
Maximum decompressed archive size200 MiB
Maximum archive entries10,000

The SDK exposes builder methods on SourceOptions for these values.

Fingerprints

After staging, rototo records a source fingerprint when it can:

FingerprintUsed for
GitCommitGit source resolved to a commit.
HttpValidatorHTTPS archive response with ETag or Last-Modified.
ContentHashArchive response without validators.
WorkspaceLayersLayered workspace composed from multiple sources.

Refresh compares fingerprints before replacing the active workspace. See reference-sdk-refresh.

Unsupported Forms

These are intentionally unsupported:

http://example.com/config.tar.gz
git+http://example.com/config.git
file:///srv/config#main
https://example.com/config.tar.gz#main

The first two weaken the transport boundary. The file URL fragment has no clear local meaning. The archive ref syntax would imply git semantics for a non-git source.