diff --git a/docs/using_pyodide_from_javascript.md b/docs/using_pyodide_from_javascript.md
index 8c0d92b6c..6f7a3cda4 100644
--- a/docs/using_pyodide_from_javascript.md
+++ b/docs/using_pyodide_from_javascript.md
@@ -75,4 +75,73 @@ pyodide.loadPackage('matplotlib').then(() => {
## Complete example
-TODO
+Grab the latest release tarball from the [releases
+page](https://github.com/iodide-project/pyodide/releases/) and expand its
+contents into a `pyodide_local` directory.
+
+Create and save a test `index.html` page (in the `pyodide_local` directory)
+with the following contents:
+```html
+
+
+
+
+
+
+
+ Pyodide test page
+ Open your browser console to see pyodide output
+
+
+```
+
+Because browsers require WebAssembly files to have mimetype of
+`application/wasm` we're unable to serve our files using Python's built-in
+`SimpleHTTPServer` module.
+
+Let's wrap Python's Simple HTTP Server and provide the appropiate mimetype for
+WebAssembly files into a `pyodide_server.py` file (in the `pyodide_local`
+directory):
+```python
+import sys
+import socketserver
+from http.server import SimpleHTTPRequestHandler
+
+
+class Handler(SimpleHTTPRequestHandler):
+
+ def end_headers(self):
+ # Enable Cross-Origin Resource Sharing (CORS)
+ self.send_header('Access-Control-Allow-Origin', '*')
+ super().end_headers()
+
+
+if sys.version_info < (3, 7, 5):
+ # Fix for WASM MIME type for older Python versions
+ Handler.extensions_map['.wasm'] = 'application/wasm'
+
+
+if __name__ == '__main__':
+ port = 8000
+ with socketserver.TCPServer(("", port), Handler) as httpd:
+ print("Serving at: http://127.0.0.1:{}".format(port))
+ httpd.serve_forever()
+```
+
+Let's test it out.
+In your favourite shell, let's start our WebAssembly aware web server:
+```bash
+python pyodide_server.py
+```
+
+Point your WebAssembly aware browser to
+[http://localhost:8000/index.html](http://localhost:8000/index.html) and open
+your browser console to see the output from python via pyodide!