Creates an nginx-alike minimal index (dark themed)
why not?
pnpm create @3xpo/index
Unless in Serve mode, it outputs static files! This means anything from nginx try_files to github pages is supported!
In Serve mode, it serves a directory instead of generating index files. This is similar to nginx with autoindex on.
Warning We don't implement rate limiting on routes that access the file system, meaning this can cause a denial of service if improperly used
It's dark themed - No eye pain here!
Nginx-styled single-file outputs that are so small minification isn't even needed!
READMEs are included in the index, and are parsed as HTML (with XSS filtering via sanitize-html
) - that is if they're in the text forms README.txt
and README
, or in the HTML form of .html
(in which case they aren't wrapped in <pre> tags).
Text READMEs can create a handful of html tags (most notably <h1>
, <h2>
, etc...), although not many.
If you're surprised as to why your plain text is getting formatted, that's likely why - add some zero-width spaces or encode the characters to prevent this (intentional) behaviour.
When serving untrusted directories on sensitive domains, it may be worth removing README.html
's, README.txt
s and README
s (or pass the env var NO_READMES), as they're included (with XSS filtering via sanitize-html
, may not always be sufficient) in the index.
Additionally, you may want to remove img
from lib.SanitizerOptions.allowedTags
if you're serving untrusted directories on sensitive domains.
Don't want all files to be listed (or, want links to anywhere else)? No problem! Just add a indexoverwrite.json
(indexoverwrite.json5
also works) file to the directory, structured similarly to this, or this, or even this
Want to serve a static directory instead of generating index files? No problem! Use pnpm create @3xpo/index serve [dir=.]
to serve a directory instead of generating index files.
...where NodeJS can run.
Yes, this includes github actions (via create-index-bin, or create-index-action).
It's just a library, so you can use it in your own projects!
Here's an example of this repository, after CI builds everything!