{"id":14156668,"url":"https://github.com/mkloubert/vscode-remote-workspace","last_synced_at":"2025-08-06T03:31:06.502Z","repository":{"id":71664211,"uuid":"133083090","full_name":"mkloubert/vscode-remote-workspace","owner":"mkloubert","description":"Multi protocol support for handling remote files like local ones in Visual Studio Code.","archived":true,"fork":false,"pushed_at":"2020-04-04T12:59:03.000Z","size":3241,"stargazers_count":205,"open_issues_count":94,"forks_count":37,"subscribers_count":17,"default_branch":"master","last_synced_at":"2024-08-17T08:07:46.971Z","etag":null,"topics":["azure-blob","dropbox","filesystem","ftp","ftps","remote","s3-bucket","sftp","slack","uri","url","vscode-extension","webdav","workspaces"],"latest_commit_sha":null,"homepage":"https://marketplace.visualstudio.com/items?itemName=mkloubert.vscode-remote-workspace","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mkloubert.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["https://paypal.me/MarcelKloubert"]}},"created_at":"2018-05-11T19:56:36.000Z","updated_at":"2024-08-17T08:07:49.238Z","dependencies_parsed_at":"2023-03-04T07:00:29.056Z","dependency_job_id":null,"html_url":"https://github.com/mkloubert/vscode-remote-workspace","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkloubert%2Fvscode-remote-workspace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkloubert%2Fvscode-remote-workspace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkloubert%2Fvscode-remote-workspace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkloubert%2Fvscode-remote-workspace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mkloubert","download_url":"https://codeload.github.com/mkloubert/vscode-remote-workspace/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228835541,"owners_count":17979163,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["azure-blob","dropbox","filesystem","ftp","ftps","remote","s3-bucket","sftp","slack","uri","url","vscode-extension","webdav","workspaces"],"created_at":"2024-08-17T08:07:45.661Z","updated_at":"2024-12-09T04:30:46.882Z","avatar_url":"https://github.com/mkloubert.png","language":"TypeScript","funding_links":["https://paypal.me/MarcelKloubert"],"categories":["vscode-extension"],"sub_categories":[],"readme":"# vscode-remote-workspace\r\n\r\n[![Share via Facebook](https://raw.githubusercontent.com/mkloubert/vscode-remote-workspace/master/img/share/Facebook.png)](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-remote-workspace\u0026quote=Remote%20Workspace) [![Share via Twitter](https://raw.githubusercontent.com/mkloubert/vscode-remote-workspace/master/img/share/Twitter.png)](https://twitter.com/intent/tweet?source=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-remote-workspace\u0026text=Remote%20Workspace:%20https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-remote-workspace\u0026via=mjkloubert) [![Share via Pinterest](https://raw.githubusercontent.com/mkloubert/vscode-remote-workspace/master/img/share/Pinterest.png)](http://pinterest.com/pin/create/button/?url=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-remote-workspace\u0026description=Visual%20Studio%20Code%20extension%2C%20which%20receives%20and%20shows%20git%20events%20from%20webhooks.) [![Share via Reddit](https://raw.githubusercontent.com/mkloubert/vscode-remote-workspace/master/img/share/Reddit.png)](http://www.reddit.com/submit?url=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-remote-workspace\u0026title=Remote%20Workspace) [![Share via LinkedIn](https://raw.githubusercontent.com/mkloubert/vscode-remote-workspace/master/img/share/LinkedIn.png)](http://www.linkedin.com/shareArticle?mini=true\u0026url=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-remote-workspace\u0026title=Remote%20Workspace\u0026summary=Visual%20Studio%20Code%20extension%2C%20which%20receives%20and%20shows%20git%20events%20from%20webhooks.\u0026source=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-remote-workspace) [![Share via Wordpress](https://raw.githubusercontent.com/mkloubert/vscode-remote-workspace/master/img/share/Wordpress.png)](http://wordpress.com/press-this.php?u=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-remote-workspace\u0026quote=Remote%20Workspace\u0026s=Visual%20Studio%20Code%20extension%2C%20which%20receives%20and%20shows%20git%20events%20from%20webhooks.) [![Share via Email](https://raw.githubusercontent.com/mkloubert/vscode-remote-workspace/master/img/share/Email.png)](mailto:?subject=Remote%20Workspace\u0026body=Visual%20Studio%20Code%20extension%2C%20which%20receives%20and%20shows%20git%20events%20from%20webhooks.:%20https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-remote-workspace)\r\n\r\n\r\n[![Latest Release](https://vsmarketplacebadge.apphb.com/version-short/mkloubert.vscode-remote-workspace.svg)](https://marketplace.visualstudio.com/items?itemName=mkloubert.vscode-remote-workspace)\r\n[![Installs](https://vsmarketplacebadge.apphb.com/installs/mkloubert.vscode-remote-workspace.svg)](https://marketplace.visualstudio.com/items?itemName=mkloubert.vscode-remote-workspace)\r\n[![Rating](https://vsmarketplacebadge.apphb.com/rating-short/mkloubert.vscode-remote-workspace.svg)](https://marketplace.visualstudio.com/items?itemName=mkloubert.vscode-remote-workspace#review-details)\r\n\r\nMulti protocol support of new [Visual Studio Code](https://code.visualstudio.com) [FileSystem API](https://code.visualstudio.com/docs/extensionAPI/vscode-api#FileSystemProvider), especially for handling remote files like local ones.\r\n\r\n![Demo 1](https://raw.githubusercontent.com/mkloubert/vscode-remote-workspace/master/img/demo1.gif)\r\n\r\n## Table of contents\r\n\r\n1. [Install](#install-)\r\n2. [How to use](#how-to-use-)\r\n   * [About parameters](#about-parameters-)\r\n     * [Import parameters](#import-parameters-)\r\n     * [Placeholders](#placeholders-)\r\n       * [Code](#code-)\r\n       * [Environment variables](#environment-variables-)\r\n       * [Static](#static-)\r\n   * [Azure](#azure-)\r\n     * [Parameters](#parameters-)\r\n     * [Remarks](#remarks-)\r\n   * [Dropbox](#dropbox-)\r\n     * [Parameters](#parameters--1)\r\n   * [FTP](#ftp-)\r\n     * [Parameters](#parameters--2)\r\n   * [FTPs](#ftps-)\r\n     * [Parameters](#parameters--3)\r\n   * [S3 Buckets](#s3-buckets-)\r\n     * [credential_type](#credential_type-)\r\n     * [Parameters](#parameters--4)\r\n   * [SFTP](#sftp-)\r\n     * [Parameters](#parameters--5)\r\n       * [mode](#mode-)\r\n       * [Using ssh-agent](#using-ssh-agent-)\r\n   * [Slack](#slack-)\r\n     * [Parameters](#parameters--6)\r\n     * [Remarks](#remarks--1)\r\n   * [WebDAV](#webdav-)\r\n     * [Parameters](#parameters--7)\r\n       * [authType](#authtype-)\r\n3. [Commands](#commands-)\r\n4. [Logs](#logs-)\r\n5. [Support and contribute](#support-and-contribute-)\r\n   * [Contributors](#contributors-)\r\n6. [Related projects](#related-projects-)\r\n   * [node-simple-socket](#node-simple-socket-)\r\n   * [vscode-helpers](#vscode-helpers-)\r\n\r\n## Install [[\u0026uarr;](#table-of-contents)]\r\n\r\nLaunch VS Code Quick Open (`Ctrl + P`), paste the following command, and press enter:\r\n\r\n```bash\r\next install vscode-remote-workspace\r\n```\r\n\r\nOr search for things like `vscode-remote-workspace` in your editor.\r\n\r\n## How to use [[\u0026uarr;](#table-of-contents)]\r\n\r\nCreate (or update) a `.code-workspace` file and open it by using `File \u003e\u003e Open Workspace...` in the GUI:\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"sftp://my-user:my-password@example.com?debug=1\",\r\n        \"name\": \"My SFTP folder\"\r\n    }]\r\n}\r\n```\r\n\r\nIf you've never created a `.code-workspace` file, you might start with a new folder in your home directory, for instance you could name it \"VSCodeWorkspace\" or \"MyApp\". Copy the example configuration (shown above) into a new file, and make sure you edit the URI to be specific to your desired protocol and path. Save the file, ensuring the file name ends with `.code-workspace`. Then, in the VS Code GUI, open that file using `File \u003e\u003e Open Workspace...`; after a few moments you'll be connected to the URI you specified.\r\n\r\n### About parameters [[\u0026uarr;](#how-to-use-)]\r\n\r\nA parameter is a key-value-pair, which has to be setup in the URI and NOT in the `settings` section of a `.code-workspace` file.\r\n\r\nIf you want to set the `debug` parameter to `1` for a [SFTP connection](#sftp-), e.g.:\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"sftp://myUser:myPass@example.com?debug=1\",\r\n        \"name\": \"My SFTP folder\"\r\n    }]\r\n}\r\n```\r\n\r\n#### Import parameters [[\u0026uarr;](#about-parameters-)]\r\n\r\nAny URI / protocol supports a general parameter, called `params`, which can load / import parameters from an external file, that contains a JSON object.\r\n\r\nFor example, you can create a file, lets say `sftp_server1_uri_params.json`, inside your home directory with the following content:\r\n\r\n```json\r\n{\r\n    \"debug\": 1,\r\n    \"mode\": 664,\r\n    \"key\": \"id_rsa\",\r\n    \"phrase\": \"My Key Passphrase\",\r\n    \"noPhraseFile\": 1\r\n}\r\n```\r\n\r\nIn the URI, inside your `.code-workspace` file, you have to define the `params` parameter and set it to the path / name of that JSON file:\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"sftp://myUser:myPass@example.com?params=sftp_server1_uri_params.json\",\r\n        \"name\": \"My SFTP folder\"\r\n    }]\r\n}\r\n```\r\n\r\nRelative paths will be mapped to the user's home directory.\r\n\r\nExplicit URI parameters, which are also defined in such an external file, will be overwritten by the values of the file.\r\n\r\n#### Placeholders [[\u0026uarr;](#about-parameters-)]\r\n\r\nAn URI parameter can store placeholders, which are replaced by the values of an external file.\r\n\r\nFor example, you can create a file, like `my_values.json`, inside your home directory with the following content:\r\n\r\n```json\r\n{\r\n    \"importEnvVars\": true,\r\n    \"exclude\": [\r\n        \"fooParam\"\r\n    ],\r\n    \"values\": {\r\n        \"ENC\": {\r\n            \"code\": \" ('UTF' + '8').toLowerCase() \",\r\n            \"type\": \"code\"\r\n        },\r\n        \"FOO\": \"bar\",\r\n        \"SSL\": {\r\n            \"value\": 1\r\n        }\r\n    }\r\n}\r\n```\r\n\r\nYou can now place them into the values of parameters, by using the format `${VAR_NAME}`:\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"webdav://myUser:myPassword@webdav.example.com/?values=my_values.json\u0026ssl=${SSL}\u0026encoding=${ENC}\u0026binEncoding=${ENC}\u0026fooParam=${FOO}\",\r\n        \"name\": \"My WebDAV folder\"\r\n    }]\r\n}\r\n```\r\n\r\nIf `importEnvVars` is set to `(true)`, all [environment variables of the current process](https://nodejs.org/api/process.html#process_process_env) will be imported automatically. The default value is `(false)`.\r\n\r\nParameters, where placeholders DO NOT work:\r\n\r\n* `params`\r\n* `values`\r\n\r\n##### Code [[\u0026uarr;](#placeholders-)]\r\n\r\n```json\r\n{\r\n    \"values\": {\r\n        \"FOO\": {\r\n            \"code\": \" $h.normalizeString('b' + 'AR') \",\r\n            \"type\": \"code\"\r\n        }\r\n    }\r\n}\r\n```\r\n\r\nCode execution allows you to access the following constants, which contain modules, functions and special values:\r\n\r\n| Name | Description |\r\n| ---- | --------- |\r\n| `_` | [lodash](https://lodash.com/) module |\r\n| `$fs` | [fs-extra](https://github.com/jprichardson/node-fs-extra) module |\r\n| `$h` | [vscode-helpers](https://github.com/mkloubert/vscode-helpers) module |\r\n| `$l` | [Logger](https://mkloubert.github.io/vscode-helpers/modules/_logging_index_.html) object (s. [Logs](#logs-)) |\r\n| `$m` | [Moment.js](https://momentjs.com/) module, with [timezone](https://momentjs.com/timezone/) support |\r\n| `$os` | [os](https://nodejs.org/api/os.html) module |\r\n| `$p` | [path](https://nodejs.org/api/path.html) module |\r\n| `$r` | Extened `require()` function, which also allows to use [the modules of that extension](https://github.com/mkloubert/vscode-remote-workspace/blob/master/package.json). |\r\n| `$v` | An object with variables, like `$v['cache']`, which stores an object for caching values for later executions. |\r\n\r\n**Keep in mind**: Code is always executed synchronous and NOT via things like [promises](https://developers.google.com/web/fundamentals/primers/promises)!\r\n\r\n##### Environment variables [[\u0026uarr;](#placeholders-)]\r\n\r\n```json\r\n{\r\n    \"values\": {\r\n        \"FOO\": {\r\n            \"name\": \"SSH_AUTH_SOCK\",\r\n            \"type\": \"env\"\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n##### Static [[\u0026uarr;](#placeholders-)]\r\n\r\n```json\r\n{\r\n    \"values\": {\r\n        \"foo1\": \"bar1\",\r\n        \"Foo2\": {\r\n            \"value\": 2\r\n        }\r\n    }\r\n}\r\n```\r\n\r\n### Azure [[\u0026uarr;](#how-to-use-)]\r\n\r\nURL Format: `azure://[account:key@][container][/path/to/file/or/folder][?param1=value1\u0026param2=value2]`\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"azure://my-account:my-storage-key@my-container/\",\r\n        \"name\": \"My Azure folder\"\r\n    }]\r\n}\r\n```\r\n\r\nFor accessing local storage emulator, use something like that:\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"azure://mycontainer/\",\r\n        \"name\": \"My local Azure folder\"\r\n    }]\r\n}\r\n```\r\n\r\n#### Parameters [[\u0026uarr;](#azure-)]\r\n\r\n| Name | Description | Example | \r\n| ---- | --------- | --------- |\r\n| `auth` | A path to a file, that contains the part left to `@` (the credentials). Relative paths will be mapped to the user's home directory. | `auth=my_azure_account` |\r\n| `host` | The custom host address. | `host=azure.example.com` | \r\n| `params` | The name of an external file, which contains other parameters for the URI. s. [Import parameters](#import-parameters-) | `params=azure_uri_params.json` | \r\n| `values` | The name of an external file, which contains [placeholders](#placeholders-) | `values=my_values.json` |\r\n\r\n#### Remarks [[\u0026uarr;](#azure-)]\r\n\r\nIf you create a new folder, a file called `.vscode-remote-workspace` with 0 size is created there, to keep sure to detect that new folder later.\r\nBefore you delete that file, you should store another file there, otherwise the directory will disappear.\r\n\r\n### Dropbox [[\u0026uarr;](#how-to-use-)]\r\n\r\nURL Format: `dropbox://token[/path/to/file/or/folder][?param1=value1\u0026param2=value2]`\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"dropbox://\u003cAPI-TOKEN\u003e/\",\r\n        \"name\": \"My Dropbox folder\"\r\n    }]\r\n}\r\n```\r\n\r\n#### Parameters [[\u0026uarr;](#dropbox-)]\r\n\r\n| Name | Description | Example | \r\n| ---- | --------- | --------- |\r\n| `auth` | A path to a file, that contains the part left to `@` (the API token). Relative paths will be mapped to the user's home directory. | `auth=dropbox_token` |\r\n| `params` | The name of an external file, which contains other parameters for the URI. s. [Import parameters](#import-parameters-) | `params=dropbox_uri_params.json` | \r\n| `values` | The name of an external file, which contains [placeholders](#placeholders-) | `values=my_values.json` |\r\n\r\n### FTP [[\u0026uarr;](#how-to-use-)]\r\n\r\nURL Format: `ftp://[user:password@]host[:port][/path/to/a/folder][?param1=value1\u0026param2=value2]`\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"ftp://my-user:my-password@ftp.example.com/\",\r\n        \"name\": \"My FTP folder\"\r\n    }]\r\n}\r\n```\r\n\r\n#### Parameters [[\u0026uarr;](#ftp-)]\r\n\r\n| Name | Description | Example | \r\n| ---- | --------- | --------- | \r\n| `auth` | A path to a file, that contains the part left to `@` (the credentials). Relative paths will be mapped to the user's home directory. | `auth=ftp_server1` |\r\n| `follow` | Follow symbolic links or not. Default: `1` | `follow=0` |\r\n| `keepAlive` | Defines a time interval, in seconds, that sends a `NOOP` command automatically to keep the connection alive. | `keepAlive=15` |\r\n| `noop` | The custom [FTP command](https://en.wikipedia.org/wiki/List_of_FTP_commands) to execute to check if connection is still alive. Default: `NOOP` | `noop=SYST` |\r\n| `params` | The name of an external file, which contains other parameters for the URI. s. [Import parameters](#import-parameters-) | `params=ftp_uri_params.json` | \r\n| `queue` | Use a queue for each action inside the connection. Default: `1` | `queue=0` |\r\n| `queueSize` | Maximum number of actions to execute at once inside a connection. Default: `1` | `queueSize=3` |\r\n| `values` | The name of an external file, which contains [placeholders](#placeholders-) | `values=my_values.json` |\r\n\r\n### FTPs [[\u0026uarr;](#how-to-use-)]\r\n\r\nURL Format: `ftps://[user:password@]host[:port][/path/to/a/folder][?param1=value1\u0026param2=value2]`\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"ftps://my-user:my-password@ftps.example.com/\",\r\n        \"name\": \"My (secure) FTP folder\"\r\n    }]\r\n}\r\n```\r\n\r\n#### Parameters [[\u0026uarr;](#ftps-)]\r\n\r\n| Name | Description | Example | \r\n| ---- | --------- | --------- | \r\n| `auth` | A path to a file, that contains the part left to `@` (the credentials). Relative paths will be mapped to the user's home directory. | `auth=ftps_server1` |\r\n| `follow` | Follow symbolic links or not. Default: `1` | `follow=0` |\r\n| `keepAlive` | Defines a time interval, in seconds, that sends a `NOOP` command automatically to keep the connection alive. Default `10` | `keepAlive=45` |\r\n| `legacy` | Use [ftp](https://www.npmjs.com/package/ftp) module instead of forked [@icetee/ftp](https://www.npmjs.com/package/@icetee/ftp), if you have problems. Default: `0` | `legacy=1` |\r\n| `params` | The name of an external file, which contains other parameters for the URI. s. [Import parameters](#import-parameters-) | `params=ftps_uri_params.json` | \r\n| `queue` | Use a queue for each action inside the connection. Default: `1` | `queue=0` |\r\n| `queueSize` | Maximum number of actions to execute at once inside a connection. Default: `1` | `queueSize=3` |\r\n| `rejectUnauthorized` | Reject unauthorized server certificates or not. Default: `0` | `rejectUnauthorized=1` |\r\n| `secure` | Use secure (`1`) or plain (`0`) FTP connection. Default: `1` | `secure=0` |\r\n| `values` | The name of an external file, which contains [placeholders](#placeholders-) | `values=my_values.json` |\r\n\r\n### S3 Buckets [[\u0026uarr;](#how-to-use-)]\r\n\r\nURL Format: `s3://[credential_type@]bucket[/path/to/file/or/folder][?param1=value1\u0026param2=value2]`\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"s3://my-bucket/?acl=public-read\",\r\n        \"name\": \"My S3 Bucket\"\r\n    }]\r\n}\r\n```\r\n\r\n#### credential_type [[\u0026uarr;](#s3-buckets-)]\r\n\r\nDefault value: `shared`\r\n\r\n| Name | Description | Class in [AWS SDK](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/index.html) |\r\n| ---- | --------- | --------- |\r\n| `environment` | Represents credentials from the environment. | [EnvironmentCredentials](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/EnvironmentCredentials.html) |\r\n| `file` | Represents credentials from a JSON file on disk. | [FileSystemCredentials](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/FileSystemCredentials.html) |\r\n| `shared` | Represents credentials loaded from shared credentials file. | [SharedIniFileCredentials](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SharedIniFileCredentials.html) |\r\n| `values` | The name of an external file, which contains [placeholders](#placeholders-) | `values=my_values.json` |\r\n\r\n#### Parameters [[\u0026uarr;](#s3-buckets-)]\r\n\r\n| Name | Description | Example | \r\n| ---- | --------- | --------- | \r\n| `api` | A string in `YYYY-MM-DD` format that represents the latest possible API version that can be used in this service. Specify `latest` to use the latest possible version. | `api=latest` | \r\n| `acl` | The [ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html) for new or updated files to use. Default: `private` | `acl=public-read` | \r\n| `debug` | Set to `1`, to debug a connection, by writing all messages to [log files](#logs-). Default: `0` | `debug=1` |\r\n| `endpoint` | The endpoint URI to send requests to. The default endpoint is built from the configured region. The endpoint should be a string like `https://{service}.{region}.amazonaws.com`. | `endpoint=https%3A%2F%2Ffoo.bar.amazonaws.com` | \r\n| `file` | If credential type is set to `file`, this defines the path to the `.json` file, which should be used. Relative paths will be mapped to the `.aws` sub folder inside the user's home directory. | `file=aws.json` |\r\n| `params` | The name of an external file, which contains other parameters for the URI. s. [Import parameters](#import-parameters-) | `params=s3_uri_params.json` | \r\n| `profile` | If credential type is set to `shared`, this defines the name of the section inside the `.ini` file, which should be used. Default: `default` | `profile=mkloubert` |\r\n| `values` | The name of an external file, which contains [placeholders](#placeholders-) | `values=my_values.json` |\r\n| `varPrefix` | If credential type is set to `environment`, this defines the custom prefix for the environment variables (without `_` suffix!), which contain the credentials. Default: `AWS` | `varPrefix=MY_AWS_PREFIX` |\r\n\r\n### SFTP [[\u0026uarr;](#how-to-use-)]\r\n\r\nURL Format: `sftp://[user:password@]host[:port][/path/to/a/folder][?param1=value1\u0026param2=value2]`\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"sftp://my-user:my-password@sftp.example.com/\",\r\n        \"name\": \"My SFTP folder\"\r\n    }]\r\n}\r\n```\r\n\r\n#### Parameters [[\u0026uarr;](#sftp-)]\r\n\r\n| Name | Description | Example | \r\n| ---- | --------- | --------- | \r\n| `agent` | Name or [path to ssh-agent](#using-ssh-agent-) for ssh-agent-based user authentication. | `agent=myAgent` |\r\n| `agentForward` | Set to `1`, to use OpenSSH agent forwarding (`auth-agent@openssh.com`) for the life of the connection. Default: `0` | `agentForward=1` |\r\n| `allowedHashes` | Comma-separated list of hashes to verify. | `allowedHashes=md5,sha-1` |\r\n| `auth` | A path to a file, that contains the part left to `@` (the credentials). Relative paths will be mapped to the user's home directory. | `auth=ftp_server1` |\r\n| `debug` | Set to `1`, to debug a connection, by writing all messages to [log files](#logs-). Default: `0` | `debug=1` |\r\n| `dirMode` | Defines a special [chmod](https://en.wikipedia.org/wiki/Chmod) access permission value for the folders on server. This can be an octal number or the path to a JSON file, that contains a \"mapper\" object. If not defined, the value of `mode` parameter is used. s. [mode](#mode-) for more information. | `dirMode=755` |\r\n| `follow` | Follow symbolic links or not. Default: `1` | `follow=0` |\r\n| `hash` | The algorithm to use to verify the fingerprint of a host. Possible values are `md5` and `sha-1` Default: `md5` | `hash=sha-1` |\r\n| `keepAlive` | Defines a time interval, in seconds, that sends \"keep alive packages\" automatically. | `keepAlive=15` |\r\n| `keepMode` | Tries to detect the current [chmod](https://en.wikipedia.org/wiki/Chmod) access permission value of an existing file on server and tries to apply it when saving. Default: `1` | `keepMode=0` |\r\n| `key` | The path to the key file or the [Base64](https://en.wikipedia.org/wiki/Base64) string with its content. Relative paths will be mapped to the sub folder `.ssh` inside the user's home directory. | `key=id_rsa` |\r\n| `mode` | Defines the [chmod](https://en.wikipedia.org/wiki/Chmod) access permission value for the files / folders on server. This can be an octal number or the path to a JSON file, that contains a \"mapper\" object. s. [mode](#mode-) for more information. | `mode=644` |\r\n| `noop` | By default, a list operation is done for the root directory of the server, to check if a connection is alive. You can change this by executing a fast command on the server, which does not produce much response, e.g. | `noop=uname` |\r\n| `noPhraseFile` | `1` indicates, that `phrase` parameter will NEVER handled as file path. Default: `0` | `noPhraseFile=1` |\r\n| `params` | The name of an external file, which contains other parameters for the URI. s. [Import parameters](#import-parameters-) | `params=sftp_uri_params.json` | \r\n| `phrase` | The passphrase (or path to a file with it) for the key file, if needed. To prevent conflicts, you should additionally set `noPhraseFile` to `1`, if that value is explicitly a passphrase value and NO path to an external file. Relative file paths will be mapped to the user's home directory. | `phrase=myPassphrase` |\r\n| `queue` | Use a queue for each action inside the connection. Default: `1` | `queue=0` |\r\n| `queueSize` | Maximum number of actions to execute at once inside a connection. Default: `1` | `queueSize=3` |\r\n| `timeout` | How long (in milliseconds) to wait for the SSH handshake to complete. Default: `20000` | `timeout=60000` |\r\n| `tryKeyboard` | Try keyboard-interactive user authentication if primary user authentication method fails. Can be `0` or `1`. Default: `0` | `tryKeyboard=1` |\r\n| `values` | The name of an external file, which contains [placeholders](#placeholders-) | `values=my_values.json` |\r\n\r\n##### mode [[\u0026uarr;](#parameters--4)]\r\n\r\nFor the parameters `dirMode` and `mode`, you can define an octal number, which will be applied to all files and folders, which are created or changed.\r\n\r\nYou also can define a path to a JSON file, which contains a mapper object:\r\n\r\n```json\r\n{\r\n    \"644\": [\r\n        \"**/*.php\",\r\n        \"**/*.phtml\"\r\n    ],\r\n    \"777\": \"/*.txt\"\r\n}\r\n```\r\n\r\nSave the content to a file, like `sftp_modes.json`, inside your user directory, e.g., and save your mapping in the format as described by the upper JSON snippet.\r\n\r\nTo use the mappings, setup the `mode` parameter with the path of that file (in that example to `sftp_modes.json`). Relative paths will be mapped to the user's home directory.\r\n\r\nGlob patterns are handled by [minimatch](https://github.com/isaacs/minimatch).\r\n\r\n##### Using ssh-agent [[\u0026uarr;](#parameters--5)]\r\n\r\nIf you use ssh-agent for ssh login, you will likely need to use an environment variable to get the path for the `agent` parameter. To do this, you'll need to create a values json file to pull the appropriate variable. For instance, in MacOS X, the default ssh-agent path is in `$SSH_AUTH_SOCK`:\r\n\r\n```bash\r\n$ ssh-agent\r\nSSH_AUTH_SOCK=/var/folders/w9/mq8x8g87880wn99v2pdx77vr0000gn/T//ssh-VCVBAx48ZEXj/agent.37705; export SSH_AUTH_SOCK;\r\n...\r\n```\r\n\r\nMake a [json file](#placeholders-) to get this value. For instance:\r\n\r\n```json\r\n{\r\n    \"values\": {\r\n        \"SSHSOCK\": {\r\n            \"name\": \"SSH_AUTH_SOCK\",\r\n            \"type\": \"env\"\r\n        }\r\n    }\r\n}\r\n```\r\n\r\nFinally, in your `.code-workspace` file, reference the values json file, and the agent. For instance, if your values json file is named `remotessh.json` in `~/VSCodeworkspace`, your `.code-workspace` file might have\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"sftp://my-user:my-password@sftp.example.com/?values=VSCodeworkspace/remotessh.json\u0026agent=${SSHSOCK}\",\r\n        \"name\": \"My SFTP folder\"\r\n    }]\r\n}\r\n```\r\n\r\n### Slack [[\u0026uarr;](#how-to-use-)]\r\n\r\nURL Format: `slack://token@channel[/][?param1=value1\u0026param2=value2]`\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"slack://\u003cAPI-TOKEN\u003e@\u003cCHANNEL-ID\u003e\",\r\n        \"name\": \"My Slack channel\"\r\n    }]\r\n}\r\n```\r\n\r\n#### Parameters [[\u0026uarr;](#slack-)]\r\n\r\n| Name | Description | Example | \r\n| ---- | --------- | --------- | \r\n| `auth` | A path to a file, that contains the part left to `@` (the API token). Relative paths will be mapped to the user's home directory. | `auth=slack_token` |\r\n| `params` | The name of an external file, which contains other parameters for the URI. s. [Import parameters](#import-parameters-) | `params=slack_uri_params.json` | \r\n| `values` | The name of an external file, which contains [placeholders](#placeholders-) | `values=my_values.json` |\r\n\r\n#### Remarks [[\u0026uarr;](#slack-)]\r\n\r\nThe protocol only supports read and list operations.\r\n\r\n### WebDAV [[\u0026uarr;](#how-to-use-)]\r\n\r\nURL Format: `webdav://[user:password@]host[:port][/path/to/file/or/folder][?param1=value1\u0026param2=value2]`\r\n\r\n```json\r\n{\r\n    \"folders\": [{\r\n        \"uri\": \"webdav://myUser:myPassword@webdav.example.com/?ssl=1\",\r\n        \"name\": \"My WebDAV server\"\r\n    }]\r\n}\r\n```\r\n\r\n#### Parameters [[\u0026uarr;](#webdav-)]\r\n\r\n| Name | Description | Example | \r\n| ---- | --------- | --------- |\r\n| `auth` | A path to a file, that contains the part left to `@` (the credentials). Relative paths will be mapped to the user's home directory. | `auth=webdav_server1` |\r\n| `base` | The base path, that is used as prefix for all requests. | `base=nextcloud/remote.php/webdav/` |\r\n| `binEncoding` | The [encoding](https://nodejs.org/api/buffer.html#buffer_buf_tostring_encoding_start_end) for reading and writing binary files to use. Default: `binary` | `binEncoding=utf8` |\r\n| `encoding` | The [encoding](https://nodejs.org/api/buffer.html#buffer_buf_tostring_encoding_start_end) for reading and writing text files to use. Default: `binary` | `encoding=utf8` |\r\n| `authType` | Kind of authentication to use if at least a username and/or password is defined (s. [authType](#authtype-). Default: `basic` | `authType=digest` |\r\n| `params` | The name of an external file, which contains other parameters for the URI. s. [Import parameters](#import-parameters-) | `params=webdav_uri_params.json` |\r\n| `ssl` | Use secure HTTP or not. Can be `0` or `1`. Default: `0` | `ssl=1` |\r\n| `values` | The name of an external file, which contains [placeholders](#placeholders-) | `values=my_values.json` |\r\n\r\n#### authType [[\u0026uarr;](#parameters--7)]\r\n\r\nDefines, what type of authentication should be used, if at least a username and/or password is defined. Possible values are:\r\n\r\n| Name | Alternatives | Description |\r\n| ---- | ------------ | ----------- |\r\n| `basic` | `b` | [Basic access authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) |\r\n| `digest` | `d` | [Digest access authentication](https://en.wikipedia.org/wiki/Digest_access_authentication) |\r\n\r\n## Commands [[\u0026uarr;](#table-of-contents)]\r\n\r\nPress `F1` and enter one of the following commands:\r\n\r\n| Name | Description | ID |\r\n| ---- | ----------- | -- |\r\n| `Remote Workspace: Execute 'git' Command ...` | Executes `git` CLI tool on a remote workspace. | `extension.remote.workspace.executeGit` |\r\n| `Remote Workspace: Execute Remote Command ...` | Executes a command on a remote workspace. | `extension.remote.workspace.executeRemoteCommmand` |\r\n| `Remote Workspace: Open URI ...` | Adds / opens a new workspace folder with a [supported URI](#how-to-use-). | `extension.remote.workspace.openURI` |\r\n| `Remote Workspace: Receive Remote URI ...` | Receives a remote URI from another editor. | `extension.remote.workspace.receiveWorkspaceURI` |\r\n| `Remote Workspace: Reset Remote Command History ...` | Resets all values of last executed remote commands. | `extension.remote.workspace.resetRemoteCommandHistory` |\r\n| `Remote Workspace: Share Remote URI ...` | Shares a remote URI with another editor. | `extension.remote.workspace.sendWorkspaceURI` |\r\n\r\nIf you want to define shortcuts for one or more command(s), have a look at the article [Key Bindings for Visual Studio Code](https://code.visualstudio.com/docs/getstarted/keybindings).\r\n\r\n## Logs [[\u0026uarr;](#table-of-contents)]\r\n\r\nLog files are stored inside the `.vscode-remote-workspace/.logs` subfolder of the user's home directory, separated by day.\r\n\r\n## Support and contribute [[\u0026uarr;](#table-of-contents)]\r\n\r\nIf you like the extension, you can support the project by sending a [donation via PayPal](https://paypal.me/MarcelKloubert) to [me](https://github.com/mkloubert).\r\n\r\nTo contribute, you can [open an issue](https://github.com/mkloubert/vscode-remote-workspace/issues) and/or fork this repository.\r\n\r\nTo work with the code:\r\n\r\n* clone [this repository](https://github.com/mkloubert/vscode-remote-workspace)\r\n* create and change to a new branch, like `git checkout -b my_new_feature`\r\n* run `npm install` from your project folder\r\n* open that project folder in Visual Studio Code\r\n* now you can edit and debug there\r\n* commit your changes to your new branch and sync it with your forked GitHub repo\r\n* make a [pull request](https://github.com/mkloubert/vscode-remote-workspace/pulls)\r\n\r\n### Contributors [[\u0026uarr;](#support-and-contribute-)]\r\n\r\n* [Angeart](https://github.com/Angeart)\r\n* [drpark](https://github.com/drpark)\r\n* [Massimiliano Torromeo](https://github.com/mtorromeo)\r\n* [mlibbey](https://github.com/mlibbey)\r\n* [Sandro](https://github.com/SuperSandro2000)\r\n* [TurekBot](https://github.com/TurekBot)\r\n\r\n## Related projects [[\u0026uarr;](#table-of-contents)]\r\n\r\n### node-simple-socket [[\u0026uarr;](#related-projects-)]\r\n\r\n[node-simple-socket](https://github.com/mkloubert/node-simple-socket) is a simple socket class, which supports automatic [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) encryption and compression for two connected endpoints and runs in [Node.js](https://nodejs.org/).\r\n\r\n### vscode-helpers [[\u0026uarr;](#related-projects-)]\r\n\r\n[vscode-helpers](https://github.com/mkloubert/vscode-helpers) is a NPM module, which you can use in your own [VSCode extension](https://code.visualstudio.com/docs/extensions/overview) and contains a lot of helpful classes and functions.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkloubert%2Fvscode-remote-workspace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmkloubert%2Fvscode-remote-workspace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkloubert%2Fvscode-remote-workspace/lists"}