---
sidebar_position: 1
slug: /dashboard
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import UppyCdnExample from '/src/components/UppyCdnExample';
# Dashboard
The all you need Dashboard — powerful, responsive, and pluggable. Kickstart your
uploading experience and gradually add more functionality. Add files from
[remote sources](/docs/companion), [edit images](/docs/image-editor),
[generate thumbnails](/docs/thumbnail-generator), and more.
Checkout [integrations](#integrations) for the full list of plugins you can
integrate.
:::tip
[Try out the live example with all plugins](/examples) or take it for a spin in
[StackBlitz](https://stackblitz.com/edit/vitejs-vite-zaqyaf?file=main.js).
:::
## When should I use this?
There could be many reasons why you may want to use the Dashboard, but some
could be:
- when you need a battle tested plug-and-play uploading UI to save time.
- when your users need to add files from [remote sources](/docs/companion), such
[Google Drive](/docs/google-drive), [Dropbox](/docs/dropbox), and others.
- when you need to collect [meta data](#metafields) from your users per file.
- when your users want to take a picture with their [webcam](/docs/webcam) or
[capture their screen](/docs/screen-capture).
## Install
```shell
npm install @uppy/core @uppy/dashboard
```
```shell
yarn add @uppy/core @uppy/dashboard
```
{`
import { Uppy, Dashboard } from "{{UPPY_JS_URL}}"
const uppy = new Uppy()
uppy.use(Dashboard, { target: '#uppy', inline: true })
`}
## Use
```js showLineNumbers
import Uppy from '@uppy/core';
import Dashboard from '@uppy/dashboard';
import '@uppy/core/dist/style.min.css';
import '@uppy/dashboard/dist/style.min.css';
new Uppy().use(Dashboard, { inline: true, target: '#uppy-dashboard' });
```
:::note
The `@uppy/dashboard` plugin includes CSS for the Dashboard itself, and the
various plugins used by the Dashboard, such as
([`@uppy/status-bar`](/docs/status-bar) and [`@uppy/informer`](/docs/informer)).
If you also use the `@uppy/status-bar` or `@uppy/informer` plugin directly, you
should not include their CSS files, but instead only use the one from the
`@uppy/dashboard` plugin.
:::
:::note
Styles for Provider plugins, like Google Drive and Instagram, are also bundled
with Dashboard styles. Styles for other plugins, such as `@uppy/url` and
`@uppy/webcam`, are not included. If you are using those, please see their docs
and make sure to include styles for them as well.
:::
## API
### Options
#### `id`
A unique identifier for this plugin (`string`, default: `'Dashboard'`).
Plugins that are added by the Dashboard get unique IDs based on this ID, like
`'Dashboard:StatusBar'` and `'Dashboard:Informer'`.
#### `target`
Where to render the Dashboard (`string` or `Element`, default: `'body'`).
You can pass an element, class, or id as a string. Dashboard is rendered into
`body`, because it’s hidden by default and only opened as a modal when `trigger`
is clicked.
#### `inline`
Render the Dashboard as a modal or inline (`boolean`, default: `false`).
When `false`, Dashboard is opened by clicking on [`trigger`](#trigger). If
`inline: true`, Dashboard will be rendered into [`target`](#target) and fit
right in.
#### `trigger`
A CSS selector for a button that will trigger opening the Dashboard modal
(`string`, default: `null`).
Several buttons or links can be used, as long as they are selected using the
same selector (`.select-file-button`, for example).
#### `width`
Width of the Dashboard in pixels (`number`, default: `750`). Used when
`inline: true`.
#### `height`
Height of the Dashboard in pixels (`number`, default: `550`). Used when
`inline: true`.
#### `waitForThumbnailsBeforeUpload`
Whether to wait for all thumbnails from `@uppy/thumbnail-generator` to be ready
before starting the upload (`boolean`, default `false`).
If set to `true`, Thumbnail Generator will envoke Uppy’s internal processing
stage, displaying “Generating thumbnails...” message, and wait for
`thumbnail:all-generated` event, before proceeding to the uploading stage.
This is useful because Thumbnail Generator also adds EXIF data to images, and if
we wait until it’s done processing, this data will be available on the server
after the upload.
#### `showLinkToFileUploadResult`
Turn the file icon and thumbnail in the Dashboard into a link to the uploaded
file (`boolean`, default: `false`).
Please make sure to return the `url` key (or the one set via
`responseUrlFieldName`) from your server.
#### `showProgressDetails`
Show or hide progress details in the status bar (`boolean`, default: `false`).
By default, progress in Status Bar is shown as a percentage. If you would like
to also display remaining upload size and time, set this to `true`.
`showProgressDetails: false`: Uploading: 45%
`showProgressDetails: true`: Uploading: 45%・43 MB of 101 MB・8s left
#### `hideUploadButton`
Show or hide the upload button (`boolean`, default: `false`).
Use this if you are providing a custom upload button somewhere, and are using
the `uppy.upload()` API.
#### `hideRetryButton`
Hide the retry button in the status bar and on each individual file (`boolean`,
default: `false`).
Use this if you are providing a custom retry button somewhere and if you are
using the `uppy.retryAll()` or `uppy.retryUpload(fileID)` API.
#### `hidePauseResumeButton`
Hide the pause/resume button (for resumable uploads, via [tus](http://tus.io),
for example) in the status bar and on each individual file (`boolean`, default:
`false`).
Use this if you are providing custom cancel or pause/resume buttons somewhere,
and using the `uppy.pauseResume(fileID)` or `uppy.removeFile(fileID)` API.
#### `hideCancelButton`
Hide the cancel button in status bar and on each individual file (`boolean`,
default: `false`).
Use this if you are providing a custom retry button somewhere, and using the
`uppy.cancelAll()` API.
#### `hideProgressAfterFinish`
Hide the status bar after the upload has finished (`boolean`, default: `false`).
#### `doneButtonHandler`
This option is passed to the status bar and will render a “Done” button in place
of pause/resume/cancel buttons, once the upload/encoding is done. The behaviour
of this “Done” button is defined by this handler function, for instance to close
the file picker modals or clear the upload state.
This is what the Dashboard sets by default:
```js
const doneButtonHandler = () => {
this.uppy.cancelAll();
this.requestCloseModal();
};
```
Set to `null` to disable the “Done” button.
#### `showSelectedFiles`
Show the list of added files with a preview and file information (`boolean`,
default: `true`).
In case you are showing selected files in your own app’s UI and want the Uppy
Dashboard to only be a picker, the list can be hidden with this option.
See also [`disableStatusBar`](#disablestatusbar) option, which can hide the
progress and upload button.
#### `showRemoveButtonAfterComplete`
Show the remove button on every file after a successful upload (`boolean`,
default: `false`).
Enabling this option only shows the remove `X` button in the Dashboard UI, but
to actually send a request you should listen to
[`file-removed`](https://uppy.io/docs/uppy/#file-removed) event and add your
logic there.
Example:
```js
uppy.on('file-removed', (file, reason) => {
if (reason === 'removed-by-user') {
sendDeleteRequestForFile(file);
}
});
```
For an implementation example, please see
[#2301](https://github.com/transloadit/uppy/issues/2301#issue-628931176).
#### `singleFileFullScreen`
When only one file is selected, its preview and meta information will be
centered and enlarged (`boolean`, default: `true`).
Often times Uppy used for photo / profile image uploads, or maybe a single
document. Then it makes sense to occupy the whole space of the available
Dashboard UI, giving the stage to this one file. This feature is automatically
disabled when Dashboard is small in height, since there’s not enough room.
#### `note`
A string of text to be placed in the Dashboard UI (`string`, default: `null`).
This could for instance be used to explain any [`restrictions`](#restrictions)
that are put in place. For example:
`'Images and video only, 2–3 files, up to 1 MB'`.
#### `metaFields`
Create text or custom input fields for the user to fill in (`Array