···2121- [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) <small>(browser)</small>
2222- [IPFS](https://ipfs.io/)
2323- [RemoteStorage](https://remotestorage.io/)
2424-- [~~Solid~~](https://solid.inrupt.com/) <small>(TODO)</small>
2524- [Textile](https://github.com/textileio/go-textile)
26252726#### Music layer
···3231- [~~Blockstack Gaia Storage~~](https://github.com/blockstack/gaia) <small>(TODO)</small>
3332- [Dropbox](https://dropbox.com/)
3433- [Google Drive](https://drive.google.com/)
3535-- ~~HTTP Server~~ <small>(TODO)</small>
3634- [IPFS](https://ipfs.io/)
3735- [WebDAV](https://en.wikipedia.org/wiki/WebDAV)
3836···4240434144424545-### Development
4343+### Hosting on your own server
4444+4545+Diffuse is a static web application, which means it's just HTML, CSS and Javascript. No REST API, database, or anything backend-related involved. That said, the app does require a HTTP web server so it can have "clean urls". It also requires one special rule, and that is, no matter which HTML page is requested, it should always render the root `200.html` or `index.html` file. `https://diffuse.sh` uses Netlify, which in turn uses the `_redirects` file for this.
4646+4747+In short:
4848+- Diffuse is a static, serverless, web application
4949+- Diffuse requires a HTTP server
5050+- Always render root `200.html` or `index.html` file
5151+5252+```shell
5353+# Example of a nginx configuration
5454+# Disclaimer: I'm not confident this'll actually work,
5555+# but it should be something along these lines.
5656+location ~ .html$ {
5757+ try_files $uri /200.html;
5858+}
5959+```
6060+6161+6262+6363+---
6464+6565+6666+6767+### Building it yourself
46684769For version numbers,
4870see `.tool-versions` and `stack.yaml`.