# Download Trigger URL: https://ark-ui.com/docs/utilities/download-trigger Source: https://raw.githubusercontent.com/chakra-ui/ark/refs/heads/main/website/src/content/pages/utilities/download-trigger.mdx Trigger file downloads programmatically. --- ## Motivation The `DownloadTrigger` component provides a convenient way to programmatically trigger file downloads in web applications. It handles the complexities of downloading files, whether they are URLs, Blobs, or other data types. ## Examples ### Basic Pass the data you want to download to the `data` prop, and specify the `fileName` and `mimeType` of the file. **Example: basic** #### React ```tsx import { DownloadTrigger } from '@ark-ui/react/download-trigger' import { DownloadIcon, FileIcon } from 'lucide-react' import button from 'styles/button.module.css' import styles from 'styles/download-trigger.module.css' const content = 'Hello, World! This is a sample text file.' export const Basic = () => { return (
{content}
Download txt
) } ``` #### Solid ```tsx import { DownloadTrigger } from '@ark-ui/solid/download-trigger' import { DownloadIcon, FileIcon } from 'lucide-solid' import button from 'styles/button.module.css' import styles from 'styles/download-trigger.module.css' const content = 'Hello, World! This is a sample text file.' export const Basic = () => { return (
{content}
Download txt
) } ``` #### Vue ```vue ``` #### Svelte ```svelte
{content}
Download txt
``` ### Download SVG Here's an example of how to download an SVG file. **Example: svg** #### React ```tsx import { DownloadTrigger } from '@ark-ui/react/download-trigger' import { DownloadIcon, FileIcon } from 'lucide-react' import button from 'styles/button.module.css' import styles from 'styles/download-trigger.module.css' const svgContent = ` ` export const Svg = () => { return (
circle.svg
Download SVG
) } ``` #### Solid ```tsx import { DownloadTrigger } from '@ark-ui/solid/download-trigger' import { DownloadIcon, FileIcon } from 'lucide-solid' import button from 'styles/button.module.css' import styles from 'styles/download-trigger.module.css' const svgContent = ` ` export const Svg = () => { return (
circle.svg
Download SVG
) } ``` #### Vue ```vue ``` #### Svelte ```svelte
circle.svg
Download SVG
``` ### Promise You can also trigger downloads from a promise that returns a `Blob`, `File`, or `string`. **Example: with-promise** #### React ```tsx import { DownloadTrigger } from '@ark-ui/react/download-trigger' import { DownloadIcon, ImageIcon } from 'lucide-react' import button from 'styles/button.module.css' import styles from 'styles/download-trigger.module.css' export const WithPromise = () => { const fetchImage = async () => { const response = await fetch('https://picsum.photos/200/300') return response.blob() } return (
random-image.jpg (fetched on download)
Download Image
) } ``` #### Solid ```tsx import { DownloadTrigger } from '@ark-ui/solid/download-trigger' import { DownloadIcon, ImageIcon } from 'lucide-solid' import button from 'styles/button.module.css' import styles from 'styles/download-trigger.module.css' export const WithPromise = () => { const fetchImage = async () => { const response = await fetch('https://picsum.photos/200/300') return response.blob() } return (
random-image.jpg (fetched on download)
Download Image
) } ``` #### Vue ```vue ``` #### Svelte ```svelte
random-image.jpg (fetched on download)
Download Image
``` ## API Reference **Component API Reference** #### React **DownloadTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `data` | `DownloadableData | (() => MaybePromise)` | Yes | The data to download | | `fileName` | `string` | Yes | The name of the file to download | | `mimeType` | `FileMimeType` | Yes | The MIME type of the data to download | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | #### Solid **DownloadTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `data` | `DownloadableData | (() => MaybePromise)` | Yes | The data to download | | `fileName` | `string` | Yes | The name of the file to download | | `mimeType` | `FileMimeType` | Yes | The MIME type of the data to download | | `asChild` | `(props: ParentProps<'button'>) => Element` | No | Use the provided child element as the default rendered element, combining their props and behavior. | #### Vue **DownloadTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `data` | `DownloadableData | (() => MaybePromise)` | Yes | The data to download | | `fileName` | `string` | Yes | The name of the file to download | | `mimeType` | `FileMimeType` | Yes | The MIME type of the data to download | | `asChild` | `boolean` | No | Use the provided child element as the default rendered element, combining their props and behavior. | #### Svelte **DownloadTrigger Props:** | Prop | Type | Required | Description | |------|------|----------|-------------| | `data` | `DownloadableData | (() => MaybePromise)` | Yes | | | `fileName` | `string` | Yes | | | `mimeType` | `FileMimeType` | Yes | | | `asChild` | `Snippet<[PropsFn<'button'>]>` | No | Use the provided child element as the default rendered element, combining their props and behavior. | | `ref` | `Element` | No | |