Workspace
A workspace is the unit of execution in tinx.
It defines:
- which providers are available
- which versions are locked
- how the runtime environment is constructed
Think of it as a reproducible tool environment for a project.
Responsibilities
A workspace is responsible for:
- declaring providers
- resolving provider sources
- locking versions
- building runtime artifacts
- exposing commands through aliases
Key files
<workspace>/
tinx.yaml # desired state
tinx.lock # resolved state
.workspace/ # runtime state
tinx.yaml (desired state)
Declares what you want:
apiVersion: tinx.io/v1
kind: Workspace
workspace: dev
providers:
node:
source: core/node
lite-ci:
source: sourceplane/lite-ci
tinx.lock (resolved state)
Records what was actually resolved:
- exact versions
- source references
- content identifiers
That keeps workspace execution reproducible.
.workspace/ (runtime state)
Generated artifacts used during execution:
- environment variables
PATHconfiguration- command shims
This directory is ephemeral and rebuildable.
Workspace lifecycle
Declare → Resolve → Lock → Build → Execute
- Declare providers in
tinx.yaml - Resolve sources from local or remote OCI artifacts
- Lock versions in
tinx.lock - Build the runtime environment
- Execute commands through the workspace shell
Design properties
Declarative
The workspace describes what tools are needed, not how to install them.
Reproducible
The lock file keeps the same environment stable across machines.
Isolated
Execution happens in a controlled environment, not the host system.
Composable
Multiple providers can coexist in one workspace.
What a workspace does not do
- package tools
- define tool behavior
- execute logic itself
It orchestrates. It does not implement.
Useful commands
tinx init
tinx init dev
tinx use dev
tinx workspace current
tinx workspace list --ready