# Deploy from CLI

The `sling project` command helps you manage projects on the Sling Data Platform. It provides several subcommands for project management and job operations.

```bash
$ sling project
project - Manage a project on the Sling Data Platform

See more details at https://docs.slingdata.io/

  Usage:
    project [init|status|jobs|sync]

  Subcommands: 
    init     create or link to a sling project
    status   see project status
    jobs     manage project jobs
    sync     Push local file changes

  Flags: 
    --version   Displays the program version string.
    -h --help      Displays help with available flag, subcommand, and positional value parameters.
```

## Prerequisites

* A valid Sling Project Token (`SLING_PROJECT_TOKEN` environment variable, obtained from the `Settings` section)
* For self-hosted platform setups, the `SLING_PLATFORM_HOST` environment variable pointing to your platform server (e.g. `https://sling.mycompany.com`)

## Commands

### Initialize Project

Links your local directory to a Sling project:

```bash
# navigate to the root folder of your project first
$ sling project init
```

This command will:

* Create or link to an existing Sling project
* Generate a `.sling.json` file in your project directory
* Configure project settings like paths and ID

#### Project File (.sling.json)

The project configuration is stored in `.sling.json`:

```json
{
  "id": "project_id",
  "paths": ["subfolder1", "subfolder2"]
}
```

* `id`: The Sling project ID
* `paths`: Array of subfolders to monitor for files (relative to project root). This is optional. If not provided, the root directory will be used.

### Check Project Status

View the current project status and configuration:

```bash
$ sling project status
```

This displays:

* Project ID and name
* Organization details
* Owner information
* Project folder location
* Configured project paths
* Additional project status details

### Manage Jobs

#### List Jobs

View all jobs in the project:

```bash
$ sling project jobs list
```

Shows a table with:

* Job ID
* Name
* File Name
* Status
* Active status
* Schedule information

#### View Job History

See run history for project jobs:

```bash
$ sling project jobs history
```

#### Trigger Job

Run a specific job by its ID:

```bash
$ sling project jobs trigger job_123456
```

### Sync Files

Push local file changes to the Sling platform (one way sync):

```bash
$ sling project sync [--force]
```

The sync command:

* Compares local files with remote versions
* Identifies new and modified files
* Prompts for confirmation before pushing changes (unless --force is used)
* Shows a summary of synced files

#### Options

* `--force`: Skip confirmation prompt and push changes immediately

## Examples

```bash
# Initialize a new project
$ sling project init

# Check project status
$ sling project status

# List all jobs
$ sling project jobs list

# Trigger a specific job
$ sling project jobs trigger job_abc123

# Sync local changes
$ sling project sync

# Force sync without confirmation
$ sling project sync --force
```

## Environment Variables

| Variable              | Description                                                                            | Required                    |
| --------------------- | -------------------------------------------------------------------------------------- | --------------------------- |
| `SLING_PROJECT_TOKEN` | Your project token, obtained from the **Settings** section of the Sling Platform       | Yes                         |
| `SLING_PLATFORM_HOST` | The URL of your self-hosted Sling Platform server (e.g. `https://sling.mycompany.com`) | Only for self-hosted setups |

### Cloud-Hosted (Default)

For Sling's cloud platform, you only need to set the project token:

```bash
export SLING_PROJECT_TOKEN="your_project_token_here"
```

### Self-Hosted Platform

If you are running a self-hosted Sling Platform, you must also set `SLING_PLATFORM_HOST` so the CLI knows where to validate your project token and communicate with the platform API:

```bash
export SLING_PLATFORM_HOST="https://sling.mycompany.com"
export SLING_PROJECT_TOKEN="your_project_token_here"
```

When `SLING_PLATFORM_HOST` is set, all project commands (init, status, jobs, sync) will communicate with your self-hosted server instead of the Sling cloud API.

## Notes

* The project token must be valid and have appropriate permissions
* File syncing only pushes changes from local to remote (not from remote to local)
* Jobs can be managed through both CLI and the Sling Platform interface
* Project paths are relative to the project root directory


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.slingdata.io/sling-platform/platform/cli-usage.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
