Assets

Relative URLs

You can reference any assets using relative URLs in your Markdown content:

![An image](./image.png)

This is generally the suggested way to import images, as users usually place images near the Markdown file that references them.

Public Files

You can put some static assets inside public directory, and they will be copied to the root of the generated directory.

The default public directory is .vuepress/public, which can be changed in config.

It would be useful in some cases:

  • You may need to provide static assets that are not directly referenced in any of your Markdown files, for example, favicon and PWA icons.
  • You may need to serve some shared static assets, which may even be referenced outside your site, for example, logo images.
  • You may want to reference images using absolute URLs in your Markdown content.

Take our documentation source files as an example, we are putting the logo of VuePress inside the public directory:

└─ docs
   ├─ .vuepress
   |  └─ public
   |     └─ images
   |        └─ hero.png  # <- Logo file
   └─ guide
      └─ assets.md       # <- Here we are

We can reference our logo in current page like this:

Input

![VuePress Logo](/images/hero.png)

Output

VuePress Logo

TIP

Config reference: public

Base Helper

If your site is deployed to a non-root URL, i.e. the base is not "/", you will need to prepend the base to the absolute URLs of your public files.

For example, if you plan to deploy your site to https://foo.github.io/bar/, then base should be set to "/bar/", and you have to reference your public files in Markdown like this:

![VuePress Logo](/bar/images/hero.png)

Obviously, it is brittle if you ever decide to change the base. This is the reason why we suggest to reference static assets using relative URLs.

To help with that, VuePress provides a built-in helper $withBase that generates the correct path:

<img :src="$withBase('/images/hero.png')" alt="VuePress Logo">

The helper is verbose in Markdown. So it might be more helpful for theme and plugin authors.

TIP

Config reference: base

Packages and Path Aliases

Although it is not a common usage, you can reference images from dependent packages:

npm install -D package-name
![Image from dependency](package-name/image.png)

The path aliases that set in config file are also supported:

module.exports = {
  alias: {
    '@alias': path.resolve(__dirname, './path/to/some/dir'),
  },
}
![Image from path alias](@alias/image.png)

TIP

Config reference: alias