# Workspaces

Workspaces within Tessl make managing it easy to create, share and manage your team's context.

## Setting up a new workspace

### create

To create a workspace, run `tessl workspace create <name>`

```
tessl workspace create engteam

> ✔ Created workspace engteam (019b324b-...)
```

### list

Verify that your workspace has been created using `tessl workspace list`.

```
tessl workspace list

> ╔════════════╤══════════════════════════════════════╗
  ║ Name       │ ID                                   ║
  ╟────────────┼──────────────────────────────────────╢
  ║ engteam    │ 019952d9-...                         ║
  ╚════════════╧══════════════════════════════════════╝
```

## How workspaces appear in the Registry

When you publish tiles to a workspace, they appear in the Tessl Registry with URLs that follow this pattern:

```
https://tessl.io/registry/<workspace>/<tilename>/<version>
```

**Example:** If you publish a tile with:

* Workspace name: `engteam`
* Tile name: `api-patterns`
* Version: `1.0.0`

Your tile will be available at:

```
https://tessl.io/registry/engteam/api-patterns/1.0.0
```

{% hint style="info" %}
The workspace name and tile name are determined by the `"name"` field in your `tile.json` file:

* `"name": "engteam/api-patterns"` where `engteam` is the workspace and `api-patterns` is the tile name
* This is independent of your GitHub repository organization or name
  {% endhint %}

The version in the URL is optional - if omitted, the latest version will be displayed.

## Configuring workspace users

### add-member

Add a new member to a workspace using:

`tessl workspace add-member --workspace <workspace-name> --user <username> --role <role>`

```
tessl workspace add-member --workspace engteam --user macebake --role publisher
```

Check out our supported [roles](https://docs.tessl.io/reference/roles) to see which are appropriate for your users.

### list-members

Verify that your users were added correctly using `tessl workspace list-members <workspace-name>`

```
tessl workspace list-members engteam
```

### remove-members

Remove members using `tessl workspace remove-member --workspace <workspace-name> --user <username>`

```
tessl workspace remove-member --workspace engteam --user macebake
```

## Managing your workspace

### archive

Archive a workspace using `tessl workspace archive --reason <text> [workspace-name]`. The `--reason` flag is required. An archived workspace won't be available to publish to or read from, but can be unarchived later.

```
tessl workspace archive --reason "deprecated" engteam
```

### unarchive

To unarchive an archived workspace, making it active again, use `tessl workspace unarchive <workspace-name>`.

```
tessl workspace unarchive engteam
```

### delete

Delete a workspace entirely using `tessl workspace delete <workspace-name>`. Note: this will delete all content in a workspace, and cannot be undone! Use `archive` above as a safer alternative.

```
tessl workspace delete engteam
```
