Projects & Workspaces
Projects are the top-level organizational unit in Strongly.AI. Each project groups together workspaces, data volumes, jobs, and collaborators into a single managed environment with persistent storage, access control, and activity tracking.
Core Concepts
| Concept | Description |
|---|---|
| Project | Container for workspaces, volumes, jobs, and collaborators with shared settings |
| Workspace | Cloud-based development environment (JupyterHub, VS Code, or custom) |
| Data Volume | Persistent S3-backed storage with versioning, encryption, and backup |
| Job | Automated script, notebook, or command execution with scheduling |
| Collaborator | Team member with editor or viewer access to the project |
Project Lifecycle
Create --> Active --> Archive --> Restore (or Delete)
Projects have three statuses:
- Active - Normal working state, all features available
- Paused - Temporarily suspended (no running workspaces or jobs)
- Archived - Read-only state; must be restored before making changes
Creating a Project
Step 1: Navigate to Projects
Click Projects in the main navigation sidebar, then click Create Project.
Step 2: Configure Project Details
| Field | Required | Description |
|---|---|---|
| Name | Yes | Unique project name within your organization (1-100 characters) |
| Description | Yes | Purpose and goals (up to 500 characters) |
| Tags | No | Categorization labels (e.g., machine-learning, production) |
Step 3: Automatic Setup
When you create a project, the platform automatically provisions:
- Default Data Volume -- 50GB S3-backed storage with AES256 encryption, versioning enabled, and daily backups
- Project README -- Markdown documentation template pre-filled with your project name and description
- Default Environment -- JupyterHub configuration with 2 CPU, 8GB memory, 50GB disk
- Activity Tracking -- All project actions are logged for audit purposes
- Auto-Stop Settings -- Workspaces auto-stop after 30 minutes of inactivity by default
Project Categories
Projects can be categorized for organization:
| Category | Use Case |
|---|---|
machine-learning | ML model development and training |
data-analysis | Data exploration and analytics |
development | General software development (default) |
research | Research and experimentation |
Project Visibility
| Level | Access |
|---|---|
| Private | Only owner and explicitly shared collaborators |
| Organization | All members in the same organization can access |
| Global | All platform users can access (Enterprise mode only) |
Managing Projects
Updating Project Settings
Owners and editors can update project settings including name, description, tags, category, visibility, environment configuration, and notification preferences. Protected fields (owner, creation date, default volume, organization) cannot be changed.
Archiving a Project
Archiving puts a project into read-only mode. Before archiving:
- All workspaces must be stopped
- All running jobs must complete
To archive, navigate to the project and click Archive in settings. The archive timestamp is recorded for audit purposes.
Restoring an Archived Project
Click Restore on an archived project to return it to active status. All data volumes and settings are preserved.
Deleting a Project
Deletion is permanent. You have two options for data volumes:
- Keep Volumes -- Project volumes are converted to shared volumes, accessible from other projects
- Delete Volumes -- Project volumes and their data are permanently removed
A project with running workspaces cannot be deleted. Stop all workspaces first.
Collaborators
Adding a Collaborator
- Navigate to the project's Settings tab
- Click Add Collaborator
- Enter the collaborator's email address
- Select a role: Editor or Viewer
- Click Add
The collaborator must already have an account on the platform. In multi-tenant (SaaS) mode, collaborators must be in the same organization.
Collaborator Roles
| Role | Permissions |
|---|---|
| Owner | Full access: create, update, delete, manage collaborators, manage workspaces and volumes |
| Editor | Read and write access to all project resources; cannot delete project or manage collaborators |
| Viewer | Read-only access to project data, volumes, and job results |
Updating Collaborator Roles
Owners can change a collaborator's role between editor and viewer at any time from the project settings.
Removing a Collaborator
Owners can remove any collaborator except themselves. Removing a collaborator immediately revokes their access to the project and all its resources.
Data Volumes
Data volumes provide persistent, S3-backed storage with enterprise features including versioning, encryption, automatic backups, and cross-project sharing.
Volume Types
| Type | Scope | Description |
|---|---|---|
| Project | Single project | Default type; tied to a specific project lifecycle |
| Shared | Multiple projects | Can be attached to and accessed from multiple projects |
Default Data Volume
Every project automatically receives a default data volume with:
- 50GB storage capacity
- AES256 encryption enabled
- Versioning enabled (up to 10 versions)
- Daily backups with 30-day retention
- Auto-sync on workspace stop
- Tagged with
defaultandproject-data
The default volume cannot be detached from its project.
Creating Additional Volumes
- Navigate to the project's Data Volumes tab
- Click Create Volume
- Configure:
| Field | Required | Options |
|---|---|---|
| Label | Yes | Descriptive name (1-100 characters) |
| Description | No | Purpose of the volume |
| Size (GB) | Yes | Storage capacity |
| Storage Class | No | standard (default), infrequent_access, glacier |
| Versioning | No | Enable version history |
| Backup | No | Enable automatic backups with frequency setting |
| Tags | No | Categorization labels |
Volume Storage Classes
| Class | Performance | Cost | Use Case |
|---|---|---|---|
| Standard | High throughput | Standard | Active development, frequently accessed data |
| Infrequent Access | Lower throughput | Reduced | Archival data accessed occasionally |
| Glacier | Retrieval delay | Lowest | Long-term archival, compliance data |
Volume Data Formats
Volumes track the format of stored data:
- CSV, Parquet, JSON -- Single format volumes
- Images -- Image datasets
- Mixed -- Multiple data types (default)
Attaching and Detaching Volumes
Attach a shared volume to a project:
- Go to the project's Data Volumes tab
- Click Attach Volume
- Select from available shared volumes within your organization
- The volume appears in the project's volume list
Detach a volume:
- Select the volume
- Click Detach
- The volume remains as a shared volume, accessible from other projects
The default project volume cannot be detached.
Making a Volume Shared
To share a project volume with other projects:
- Navigate to the volume
- Click Make Shared
- The volume type changes from "project" to "shared"
- Other projects in the organization can now attach it
Volume Sync
Volumes support automatic synchronization between workspaces and S3 storage:
| Frequency | Behavior |
|---|---|
| On Workspace Stop | Sync when any workspace using this volume stops |
| Hourly | Automatic sync every hour |
| Daily | Automatic sync once per day |
| Weekly | Automatic sync once per week |
Sync status is tracked as: idle, syncing, or failed.
Volume Encryption
All volumes support encryption:
- AES256 -- Server-side encryption with Amazon S3-managed keys (default)
- aws:kms -- Server-side encryption with AWS KMS-managed keys (requires KMS key ID)
Volume Versioning
When versioning is enabled, each version snapshot records:
- Version ID and number
- Created timestamp and user
- Size in GB
- Changelog description
- S3 storage location
- Tags
The maximum number of versions is configurable (default: 10).
Deleting a Volume
Volumes can be deleted with an optional archive flag. When deleted:
- The volume is detached from all projects
- If
archive: true, the volume data is archived to S3 before deletion - The volume record is removed from the database
Three Volume Types in Workspaces
When working inside a workspace, you have access to three types of storage:
| Volume Type | Mount Path | Lifecycle | Scope |
|---|---|---|---|
| Workspace Volume | /workspace | Persists through stop/start; deleted with workspace | Single workspace |
| Project Volume | /project/<name> | Persists through workspace deletion; deleted with project | All workspaces in project |
| Shared Volume | /shared/<name> | Persists until explicitly deleted | Multiple projects |
Using Volumes in Code
import pandas as pd
# Workspace volume -- personal to this workspace
results_df.to_csv('/workspace/experiments/results.csv')
# Project volume -- shared across all workspaces in project
train_df = pd.read_csv('/project/training-data/train.csv')
# Shared volume -- organization-wide access
reference_df = pd.read_parquet('/shared/common-datasets/reference.parquet')
Only files within /workspace, /project/*, or /shared/* persist. System-level installations (e.g., pip install, apt-get install) do not survive workspace restarts.
To persist Python packages, use a virtual environment:
python -m venv /workspace/venv
source /workspace/venv/bin/activate
pip install your-packages
Workspaces
Workspaces are cloud-based development environments running inside your project. Each workspace is a Kubernetes pod with its own compute resources, storage, and network configuration.
Development Environments
| Environment | Image | Port | Best For |
|---|---|---|---|
| JupyterHub | jupyter/datascience-notebook | 8888 | Data science, ML, interactive notebooks, Python/R |
| VS Code | codercom/code-server | 8080 | Full-stack development, debugging, version control |
| Custom | User-provided | Configurable | Specialized development environments |
Creating a Workspace
- Navigate to your project
- Click Create Workspace
- Configure the workspace:
| Field | Required | Description |
|---|---|---|
| Name | Yes | Workspace display name |
| Description | Yes | Purpose of this workspace |
| Environment | Yes | JupyterHub, VS Code, or Custom |
| Environment ID | Yes | Pre-configured environment template |
| CPU | Yes | CPU allocation (e.g., 1, 2, 4) |
| Memory | Yes | RAM allocation (e.g., 2GB, 8GB, 16GB) |
| Disk | Yes | Workspace volume size (e.g., 20GB, 50GB) |
| GPU | No | GPU allocation (e.g., 1 for NVIDIA T4) |
| Workspace Volume Size | No | Override default workspace storage (default: 20GB) |
Connecting Services to Workspaces
Workspaces can be connected to platform services via the STRONGLY_SERVICES environment variable:
| Service Type | Description |
|---|---|
| Add-ons | Managed databases (PostgreSQL, MongoDB, Redis, etc.) |
| Data Sources | External database connections |
| AI Gateways | AI model endpoints (OpenAI, Anthropic, vLLM, etc.) |
| Workflows | Workflow execution endpoints |
These are selected during workspace creation and injected as a JSON environment variable.
Workspace Lifecycle
Created --> Deploying --> Running --> Stopping --> Stopped
|
Error / Archived
- Start -- Launch the workspace pod with configured resources
- Stop -- Gracefully stop the pod, triggering data volume sync if enabled
- Archive -- Delete the workspace and its workspace volume (project volumes are preserved)
Managing Workspaces
Start/Stop:
- Stop idle workspaces to save compute costs
- All volume data persists through stop/start cycles
- Auto-stop triggers after configurable idle time (default: 30 minutes)
Resource Upgrades:
- Stop the workspace before modifying resources
- Change CPU, memory, GPU, or disk allocation
- Restart with new configuration
Package Installation:
- JupyterHub: Use
pip,conda, orapt-getin terminal - VS Code: Install extensions from the marketplace
- Use virtual environments in
/workspace/venvto persist packages
Multiple Workspaces per Project
Projects support multiple workspaces simultaneously. Each workspace:
- Has its own compute resources and environment configuration
- Shares access to all project data volumes
- Runs independently (starting/stopping one does not affect others)
- Has its own workspace volume at
/workspace
Project Settings
Auto-Stop Configuration
| Setting | Default | Description |
|---|---|---|
| Auto-Stop Enabled | true | Automatically stop idle workspaces |
| Auto-Stop Minutes | 30 | Minutes of inactivity before stopping |
Data Volume Backup
| Setting | Default | Description |
|---|---|---|
| Backup Enabled | true | Enable automatic backups |
| Backup Frequency | daily | Options: daily, weekly, manual |
| Retention Days | 30 | How long to keep backup copies |
Notifications
| Setting | Default | Description |
|---|---|---|
| Job Failure | true | Notify on job failures |
| Job Success | false | Notify on job completions |
| Workspace Auto-Stop | true | Notify when workspace auto-stops |
Git Configuration
Projects support optional Git integration for version control:
| Setting | Description |
|---|---|
| Repository URL | Git remote URL (e.g., git@github.com:user/repo.git) |
| Branch | Target branch (default: main) |
| SSH Key ID | Reference to user's SSH key for authentication |
| Sync Direction | pull, push, or both |
| Auto Sync | Automatically sync on schedule |
| Target Path | Path within volume to sync to (default: root) |
Sync status is tracked with last sync timestamp, commit hash, and commit message.
Project Statistics
The platform tracks comprehensive project statistics:
| Metric | Description |
|---|---|
| Total Jobs | Total number of jobs created |
| Successful Jobs | Jobs completed successfully |
| Failed Jobs | Jobs that failed |
| Running Jobs | Currently executing jobs |
| Total Storage (GB) | Combined storage across all volumes |
| Compute Hours Used | Total compute time consumed |
| Estimated Cost | Estimated cost of all resources |
Activity Tracking
All project actions are logged for audit purposes:
| Activity Type | Description |
|---|---|
project_created | Project was created |
project_accessed | Project was viewed |
project_updated | Project settings were changed |
workspace_started | Workspace was launched |
workspace_stopped | Workspace was stopped |
workspace_archived | Workspace was archived |
job_started | Job execution began |
job_completed | Job execution finished |
volume_created | New volume was created |
volume_updated | Volume settings were changed |
volume_attached | Volume was attached to project |
volume_detached | Volume was detached from project |
collaborator_added | New collaborator was added |
collaborator_removed | Collaborator was removed |
Jobs
Jobs enable automated execution of scripts, notebooks, and commands within your project.
Job Execution Types
| Type | Description | Configuration |
|---|---|---|
| Script | Execute a Python or shell script | Path, entrypoint, arguments, working directory |
| Notebook | Run a Jupyter notebook | Path, parameters |
| Command | Run an arbitrary command | Command string, arguments |
Job Scheduling
Jobs can be triggered on various schedules:
| Schedule Type | Description | Example |
|---|---|---|
| Cron | Standard cron expression | 0 0 * * * (daily at midnight) |
| Interval | Fixed time interval | Every 15 minutes |
| Event | Triggered by platform events | Data volume updated, webhook, file change |
Job States
| State | Description |
|---|---|
| Active | Job is enabled and will run on schedule |
| Paused | Job schedule is suspended |
| Disabled | Job is deactivated |
Job Environment
Each job runs in a containerized environment with:
- Custom Docker image
- Environment variables
- Secrets (injected from secure storage)
- Configurable CPU, memory, and optional GPU resources
GPU Options for Jobs
| GPU Type | Description |
|---|---|
nvidia-t4 | NVIDIA T4 -- Good for inference |
nvidia-a100 | NVIDIA A100 -- High-performance training |
nvidia-v100 | NVIDIA V100 -- General ML workloads |
nvidia-k80 | NVIDIA K80 -- Cost-effective option |
Access Control and Multi-Tenancy
Projects use the platform's multi-tenancy security model:
- SaaS Mode -- Users can only access projects within their organization
- Owner Access -- Project owner has full control
- Admin Access -- Platform admins can access all projects
- Collaborator Access -- Based on assigned role (editor/viewer)
- Organization Visibility -- Organization members can access if visibility is set to "organization"
- Global Visibility -- All users can access (Enterprise mode only)
Name uniqueness is enforced within each organization (excluding archived projects).
API Reference
Project Methods
| Method | Parameters | Description |
|---|---|---|
projects.create | { name, description, tags? } | Create a new project |
projects.update | projectId, updates | Update project settings |
projects.delete | projectId, { archiveData?, deleteVolumes? } | Delete a project |
projects.archive | projectId | Archive a project |
projects.restore | projectId | Restore an archived project |
projects.list | (none) | List all accessible projects |
projects.getStats | projectId | Get project statistics |
projects.trackAccess | projectId | Record project access |
projects.getRunningJobsCount | projectId | Count running jobs |
Collaborator Methods
| Method | Parameters | Description |
|---|---|---|
projects.addCollaborator | projectId, email, role, userId? | Add a collaborator |
projects.removeCollaborator | projectId, userId | Remove a collaborator |
projects.updateCollaboratorRole | projectId, userId, role | Change collaborator role |
Workspace Methods
| Method | Parameters | Description |
|---|---|---|
projects.createWorkspace | projectId, options | Create a new workspace |
projects.launchWorkspace | projectId, options? | Launch legacy single workspace |
projects.stopWorkspace | projectId | Stop a running workspace |
projects.archiveWorkspace | projectId | Delete workspace and its volume |
Volume Methods
| Method | Parameters | Description |
|---|---|---|
volumes.create | { projectId, label, description?, sizeGB, ... } | Create a new volume |
volumes.sync | volumeId | Trigger volume sync |
volumes.delete | volumeId, { archive? } | Delete a volume |
volumes.makeShared | volumeId | Convert to shared volume |
projects.attachVolume | projectId, volumeId | Attach volume to project |
projects.detachVolume | projectId, volumeId | Detach volume from project |
dataVolumes.getByIds | volumeIds[] | Get volumes by their IDs |
Start with a project closest to your needs. Use tags and categories to organize projects by team, department, or purpose. Take advantage of shared volumes to avoid duplicating large datasets across projects.