Motivation
TypeDoc is a document generator that, among other things, converts comments in TypeScript
source code into rendered HTML documentation. The generated HTML documentation can be hosted on
static website hosting services, such as GitHub Pages, GitLab Pages, Netlify, and
CloudFlare Pages. All of them by default use a 404.html file as the content of the 404 page of
the site. However, TypeDoc does not generate a 404.html by default. How can we make TypeDoc
generate such a 404.html file?
Solution
To make TypeDoc generate a 404.html, one easy way is to use typedoc-plugin-404 developed by 8
Hobbies. In your TypeDoc-enabled source tree, install this plugin by executing:
npm install --save-dev @8hobbies/typedoc-plugin-404
Then, in your typedoc.json file, add @8hobbies/typedoc-plugin-404 to the plugin field:
{
"plugin": ["@8hobbies/typedoc-plugin-404"],
"useHostedBaseUrlForAbsoluteLinks": true
}
Right now, you can run npx typedoc and you should be seeing a 404.html page at the root of the
generated HTML docs.
Address the Asset File Link Issue in the Default Theme For TypeDoc <= 0.25.x
If you use the default TypeDoc theme, the links to asset files in the generated HTML are relative.
There is also no useHostedBaseUrlForAbsoluteLinks option. This means, 404.html would not be
displayed properly if the user visits a non-existing page in a subdirectory. For example, assuming
that the HTML documentation is hosted at https://example.com, then
https://example.com/non-existing-page leads to a correctly rendered 404 page, but
https://example.com/non-existing-dir/page would not render the 404 page correctly.
This is because the default theme makes 404.html link to asset files by their relative paths. When
a user visits https://example.com/non-existing-dir/page, the static hosting service does not
redirect the browser to https://example.com/404.html; instead, it merely renders the content of
404.html without modifying the URL. As a result, relative links to asset files now refer to
incorrect locations. For example, consider the asset file https://example.com/assets/style.css.
404.html refers to it as assets/style.css, which in this case refers to a different (and
non-existing) location https://example.com/non-existing-dir/assets/style.css.
To address this issue, run a script to replace relative asset file links in 404.html with absolute
paths. This can be done by using replace-in-files-cli:
npm install --save-dev replace-in-files-cli
Assuming that the documentation is to be hosted at the root of the URL, add the following section to
package.json:
{
"scripts": {
"doc": "typedoc && replace-in-files --string '=\"assets/' --replacement '=\"/assets/' docs/404.html"
}
}
Now, running npm run doc generates the doc with a correct 404.html file.
After making this change, to preview 404.html locally, you will likely need to use a local http
server, such as npx http-server ./docs, or the one that comes with Python: python3 -m http.server -d docs.
Further Customization
The content of the 404 page can be further customized in typedoc.json:
{
"plugin": ["@8hobbies/typedoc-plugin-404"],
"useHostedBaseUrlForAbsoluteLinks": true,
"page404Content": "This page is not found 馃く"
}
Or with HTML:
{
"plugin": ["@8hobbies/typedoc-plugin-404"],
"useHostedBaseUrlForAbsoluteLinks": true,
"page404Content": "<em>This page is not found 馃く</em>"
}
Screenshot:

