diff --git a/docs/api/symlink.md b/docs/api/symlink.md
index f8b00f0c3..7fd1e790e 100644
--- a/docs/api/symlink.md
+++ b/docs/api/symlink.md
@@ -5,31 +5,84 @@ hide_title: true
sidebar_label: symlink()
-->
-# `gulp.symlink(folder[, options])`
+# symlink()
-Functions exactly like `gulp.dest`, but will create symlinks instead of copying
-a directory.
+Creates a stream for linking [Vinyl][vinyl-concepts] objects to the file system.
-## folder
-Type: `String` or `Function`
+## Usage
+'
+```js
+const { src, symlink } = require('gulp');
-A folder path or a function that receives in a file and returns a folder path.
+function link() {
+ return src('input/*.js')
+ .pipe(symlink('output/'));
+}
-## options
-Type: `Object`
+exports.link = link;
+```
-### options.cwd
-Type: `String`
+## Signature
-Default: `process.cwd()`
+```js
+symlink(directory, [options])
+```
-`cwd` for the output folder, only has an effect if provided output folder is
-relative.
+### Parameters
-### options.dirMode
-Type: `String` or `Number`
+| parameter | type | note |
+|:--------------:|:-----:|--------|
+| directory
**(required)** | string
function | The path of the output directory where symbolic links will be created. If a function is used, the function will be called with each Vinyl object and must return a string directory path. |
+| options | object | Detailed in [Options][options-section] below. |
-Default: Default is the process mode.
+### Returns
-Octal permission specifying the mode the directory should be created with: e.g.
-`"0755"`, `0755` or `493` (`0755` in base 10).
+A stream that can be used in the middle or at the end of a pipeline to create symbolic links on the file system.
+Whenever a Vinyl object is passed through the stream, it creates a symbolic link to the original file on the file system at the given directory.
+
+Whenever a symbolic link is created on the file system, the Vinyl object will be modified.
+* The `cwd`, `base`, and `path` properties will be updated to match the created symbolic link.
+* The `stat` property will be updated to match the symbolic link on the file system.
+* The `contents` property will be set to `null`.
+* The `symlink` property will be added or replaced with original path.
+
+**Note:** On Windows, directory links are created using junctions by default. The `useJunctions` option disables this behavior.
+
+
+### Errors
+
+When `directory` is an empty string, throws an error with the message, "Invalid symlink() folder argument. Please specify a non-empty string or a function."
+
+When `directory` is not a string or function, throws an error with the message, "Invalid symlink() folder argument. Please specify a non-empty string or a function."
+
+When `directory` is a function that returns an empty string or `undefined`, emits an error with the message, "Invalid output folder".
+
+### Options
+
+**For options that accept a function, the passed function will be called with each Vinyl object and must return a value of another listed type.**
+
+| name | type | default | note |
+|:-------:|:------:|-----------|-------|
+| cwd | string
function | `process.cwd()` |The directory that will be combined with any relative path to form an absolute path. Is ignored for absolute paths. Use to avoid combining `directory` with `path.join()`. |
+| dirMode | number
function | | The mode used when creating directories. If not set, the process' mode will be used. |
+| overwrite | boolean
function | true | When true, overwrites existing files with the same path. |
+| relativeSymlinks | boolean
function | false | When false, any symbolic links created will be absolute.
**Note**: Ignored if a junction is being created, as they must be absolute. |
+| useJunctions | boolean
function | true | This option is only relevant on Windows and ignored elsewhere. When true, creates directory symbolic link as a junction. Detailed in [Symbolic links on Windows][symbolic-links-section] below. |
+
+## Symbolic links on Windows
+
+When creating symbolic links on Windows, a `type` argument is passed to Node's `fs.symlink()` method which specifies the type of target being linked. The link type is set to:
+`'file'` when the target is a regular file
+`'junction'` when the target is a directory
+`'dir'` when the target is a directory and the user disables the `useJunctions` option
+
+
+If you try to create a dangling (pointing to a non-existent target) link, the link type can't be determined automatically. In these cases, behavior will vary depending on whether the dangling link is being created via `symlink()` or via `dest()`.
+
+For dangling links created via `symlink()`, the incoming Vinyl object represents the target, so its stats will determine the desired link type. If `isDirectory()` returns false then a `'file'` link is created, otherwise a `'junction'` or a `'dir'` link is created depending on the value of the `useJunctions` option.
+
+For dangling links created via `dest()`, the incoming Vinyl object represents the link - typically loaded from disk via `src(..., { resolveSymlinks: false })`. In this case, the link type can't be reasonably determined and defaults to using `'file'`. This may cause unexpected behavior when creating a dangling link to a directory. **Avoid this scenario.**
+
+[options-section]: #options
+[symbolic-links-section]: #symbolic-links-on-windows
+[vinyl-concepts]: concepts.md#vinyl