Rostyman Workspace Format
The .rostyman-workspace format bundles an entire workspace into one JSON file: multiple collections plus workspace-level assets — mock servers, workflows, scheduled jobs, global variables, vault secrets, browser tests, and database connections.
It is an open, documented format; any tool may read or write it. Each collection inside a workspace is a complete Rostyman Collection document, so a workspace is essentially "many collections + extras."
Overview
| Property | Value |
|---|---|
| File extension | .rostyman-workspace |
| MIME type | application/json |
| Encoding | UTF-8 |
| Version | 1.0 |
Top-Level Structure
{
"_type": "rostyman_workspace",
"_version": "1.0",
"info": {
"name": "My Workspace",
"description": "Optional",
"exportedAt": "2026-06-06T12:00:00.000Z",
"exportedFrom": "Rostyman v1.0.0"
},
"collections": [ /* full .rostyman collection documents */ ],
"mockServers": [ ... ],
"workflows": [ ... ],
"scheduledJobs": [ ... ],
"globalVariables": [ ... ],
"vaultSecrets": [ ... ],
"browserTests": [ ... ],
"dbConnections": [ ... ]
}
Required fields
_type— must be"rostyman_workspace"_version— format version (currently"1.0")info.name— workspace namecollections— array of Rostyman Collection documents (may be empty)
All other top-level arrays are optional; omit or leave empty if unused.
Collections
Each entry in collections is a complete rostyman_collection document — same structure as a standalone .rostyman file (see the Collection Format).
"collections": [
{ "_type": "rostyman_collection", "_version": "1.0", "info": { "name": "API" }, "items": [ ... ] }
]
Mock Servers
"mockServers": [
{
"name": "Users API Mock",
"port": 4001,
"routes": [ { "method": "GET", "path": "/users", "status": 200, "body": "[]" } ],
"variables": [
{ "key": "delay", "initialValue": "0", "currentValue": "0", "type": "text", "enabled": true, "description": "" }
]
}
]
routes are driver-defined route objects (method, path, status, body, headers, delay). variables are mock-scoped.
Workflows
"workflows": [
{
"name": "Health Check Pipeline",
"description": "",
"nodes": [ { "id": "start-1", "type": "default", "data": { "nodeType": "start" }, "position": { "x": 0, "y": 0 } } ],
"edges": [ { "id": "e1", "source": "start-1", "target": "req-1", "sourceHandle": "done" } ],
"viewport": { "x": 0, "y": 0, "zoom": 1 }
}
]
nodes and edges form the visual workflow graph. viewport is cosmetic (editor pan/zoom). Edge sourceHandle matters for branching nodes — e.g. a loop node's post-loop continuation uses sourceHandle: "done", and a request node's error path uses sourceHandle: "onError".
Scheduled Jobs
"scheduledJobs": [
{
"name": "Nightly smoke",
"targetType": "collection",
"targetId": "API",
"cronExpression": "0 2 * * *",
"timezone": "UTC",
"enabled": true,
"maxRetries": 0,
"timeoutMs": 30000
}
]
targetType is one of collection, request, workflow, browser_test. targetId references the target by name within this export (IDs are regenerated on import).
Global Variables
Device-global variables (shared across all workspaces on import):
"globalVariables": [
{ "key": "apiHost", "initialValue": "api.example.com", "currentValue": "api.example.com", "type": "text", "enabled": true, "description": "", "isSensitive": false }
]
Vault Secrets
Encrypted-at-rest secrets. Exported with their plaintext value (the file is a local backup; treat it as sensitive — see Security).
"vaultSecrets": [
{ "key": "STRIPE_KEY", "value": "sk_test_…", "description": "", "enabled": true }
]
Browser Tests
Web Intelligence tests (recorder/replay):
"browserTests": [
{
"name": "Open Download",
"tags": ["demo", "smoke"],
"steps": [
{ "type": "navigate", "url": "https://example.com/" },
{ "type": "click", "selector": "a.cta", "selectors": ["a.cta"] }
]
}
]
steps are recorded actions (navigate, click, type, assert…, etc.); each has a type plus action-specific fields (selector, url, value, …).
Database Connections
Device-global DB connections plus their saved queries:
"dbConnections": [
{
"name": "Demo Store (SQLite)",
"plugin_id": "sqlite",
"config": { "path": "", "timeout": 30 },
"color": "#003B57",
"read_only": false,
"env_tag": null,
"savedQueries": [
{ "name": "All customers", "query": "SELECT * FROM customers;", "description": "" }
]
}
]
plugin_id— driver id:sqlite,postgres,mysql,mariadb,mssql,mongodb,redis,cockroachdb.config— driver-specific connection settings. Credentials are redacted on export (see below).savedQueries— named SQL snippets attached to the connection.
A SQLite connection may also carry the demo-only fields fileName and seedSql: on import, Rostyman creates a fresh SQLite file under its app-data directory, runs seedSql against it, and points config.path at the new file. This lets a shareable workspace ship a ready-to-query sample database.
Security & credentials
The workspace file is a full local backup / transfer artifact and may contain sensitive data. Two safeguards apply:
- Database credentials are redacted on export. Passwords, connection strings/URIs, SSH passwords and private keys, and tokens in
dbConnections[].configare blanked. The importer re-creates the connection; the user re-enters the secret. - Vault secrets and "sensitive" globals are exported in plaintext (they are the backup payload). Treat exported workspace files as secrets: store and share them accordingly.
On import, database connections are deduplicated by name + plugin_id (they are device-global), so re-importing the same workspace will not create duplicates.
Machine-readable schema
JSON Schema (draft 2020-12):
- Workspace:
https://docs.rostyman.com/schema/rostyman-workspace-1.0.schema.json - Collection (referenced by the workspace schema):
https://docs.rostyman.com/schema/rostyman-collection-1.0.schema.json
{
"$schema": "https://docs.rostyman.com/schema/rostyman-workspace-1.0.schema.json",
"_type": "rostyman_workspace",
"_version": "1.0",
"info": { "name": "My Workspace" },
"collections": []
}
Schemas leave additionalProperties open — importers ignore unknown fields, so newer exports still validate and import in older readers.
Design principles
The same principles as the Collection Format apply: no internal IDs (regenerated on import), variables stay as {{placeholders}}, a single pretty-printed JSON file, and forward-compatibility via ignored unknown fields.