Is it allowed to use relative path for manifest.json and place it outside of the root?

TL; DR Relative and absolute paths both work

Suppose you have the following files:

  • /content/favicon/android-chrome-192x192.png
  • /content/favicon/manifest.json, which references android-chrome-192x192.png
  • /index.html, which references manifest.json with <link rel="manifest" href="/content/favicon/manifest.json">

Then the corresponding src attribute of manifest.json can be set to:

  • /content/favicon/android-chrome-192x192.png (ie. absolute path). This is what you can test with the favicon compatibility test of RFG (full disclosure: I'm the author of this site).
  • android-chrome-192x192.png (ie. relative path). I've just tested this with Android Chrome 51. However, this option should be checked again as more browsers support the web app manifest.

Just to add some specific info., MDN says about the src attribute:

If src is a relative URL, the base URL will be the URL of the manifest.

C.f. https://developer.mozilla.org/en-US/docs/Web/Manifest/icons