diff --git a/README.md b/README.md
index 2bddc6b..38d52fb 100644
--- a/README.md
+++ b/README.md
@@ -2,29 +2,99 @@
More documentation coming soon! Things are changing too quickly right now.
-For development, run `go run cmd/server/main.go` to start the server, which by default listens on `127.0.0.1:5080`. Check out the [example configuration file](https://github.com/readium/go-toolkit/blob/master/cmd/server/configs/config.local.toml.example) for configuration options.
+## Running the server
+
+Run `go run cmd/server/main.go` to start the server, which by default listens on `127.0.0.1:5080`.
+
+Note: The example configuration file specifies `./publications` as the `publication-path`, but the actual test publications are located in the `test` directory in the project repository. To run the server, you will need to either create a `publications` directory and place your own publication files there, or update the `publication-path` setting in the config file to point to the `test` directory.
+
+The server exposes the following HTTP endpoints:
+
+- `/list.json` - Returns a list of available publications
+- `/{filename}/manifest.json` - Returns the Web Publication Manifest for the specified publication
+- `/{filename}/{asset}` - Returns a publication asset (e.g. chapters, images, etc.)
+
+### Accessing a publication
+
+1. Get the list of publications:
+
+```
+GET http://127.0.0.1:5080/list.json
+```
+
+This returns a JSON array of available publications:
+
+```json
+[
+ {"filename":"publication1", "path":"cHVibGljYXRpb24x"},
+ {"filename":"publication2", "path":"cHVibGljYXRpb24y"}
+]
+```
+
+2. Access the manifest for a publication:
+
+```
+GET http://127.0.0.1:5080/{path}/manifest.json
+```
+
+Where `{path}` is the base64 URL encoded filename of the publication.
+
+3. Access assets for the publication:
+
+```
+GET http://127.0.0.1:5080/{path}/{asset}
+```
+
+Where `{asset}` is the path of the asset within the publication. These paths can be discovered from the manifest.
+
+### Configuration
+
+Check out the [example configuration file](https://github.com/readium/go-toolkit/blob/master/cmd/server/configs/config.local.toml.example) for configuration options:
+
+```toml
+# Example of a local env config file, useful for development
+env-name = "local"
+sentry-dsn = "https://deadbeef@sentry.tld"
+cache-dsn = "local://not-yet-determined-scheme"
+origins = ["example.com", "localhost", "127.0.0.1"]
+log-level = "debug"
+bind-address = "localhost"
+bind-port = "15080"
+publication-path = "./publications" # Update this to "./test" to use the test publications
+static-path = "./public"
+```
+
+- `bind-address` - The network interface to bind the server to
+- `bind-port` - The port number to run the server on
+- `origins` - Allowed CORS origins
+- `publication-path` - Directory containing publication files to serve
+- `static-path` - Directory containing static assets for the server
+- `sentry-dsn` - Sentry error reporting DSN
+- `cache-dsn` - Connection string for caching (not yet implemented)
+
## Command line utility
-The `rwp` command provides utilities to parse and generate Web Publications.
+The `rwp` command provides utilities to parse and generate Web Publications.
To install `rwp` in `~/go/bin`, run `make install`. Use `make build` to build the binary in the current directory.
### Generating a Readium Web Publication Manifest
-The `rwp manifest` command will parse a publication file (such as EPUB, PDF, audiobook, etc.) and build a Readium Web Publication Manifest for it. The JSON manifest is
-printed to stdout.
+The `rwp manifest` command will parse a publication file (such as EPUB, PDF, audiobook, etc.) and build a Readium Web Publication Manifest for it. The JSON manifest is printed to stdout.
Examples:
* Print out a compact JSON RWPM.
```sh
- rwp manifest publication.epub
+ rwp manifest publication.epub
```
+
* Pretty-print a JSON RWPM using two-space indent.
```sh
rwp manifest --indent " " publication.epub
```
+
* Extract the publication title with `jq`.
```sh
rwp manifest publication.epub | jq -r .metadata.title
@@ -36,7 +106,7 @@ Examples:
| Option | Description |
|------------------|--------------------------------------------------------------------------------------------------------|
-| `no` (*default*) | No accessibility metadata will be inferred. |
+| `no` (_default_) | No accessibility metadata will be inferred. |
| `merged` | Accessibility metadata will be inferred and merged with the authored ones in `metadata.accessibility`. |
| `split` | Accessibility metadata will be inferred but stored separately in `metadata.inferredAccessibility`. |
@@ -46,18 +116,18 @@ rwp manifest --infer-a11y=merged publication.epub | jq .metadata
##### Inferred metadata
-| Key | Value | Inferred? |
-|-----|-------|-----------|
-| `accessMode` | `auditory` | If the publication contains a reference to an audio or video resource (inspect `resources` and `readingOrder` in RWPM) |
-| `accessMode` | `visual` | If the publications contains a reference to an image or a video resource (inspect `resources` and `readingOrder` in RWPM) |
-| `accessModeSufficient` | `textual` | If the publication is partially or fully accessible (WCAG A or above)
Or if the publication does not contain any image, audio or video resource (inspect "resources" and "readingOrder" in RWPM)
Or if the only image available can be identified as a cover |
-| `feature` | `displayTransformability` | If the publication is fully accessible (WCAG AA or above)
:warning: This property should only be inferred for reflowable EPUB files as it doesn't apply to other formats (FXL, PDF, audiobooks, CBZ/CBR). |
-| `feature` | `printPageNumbers` | If the publications contains a page list (check for the presence of a `pageList` collection in RWPM) |
-| `feature` | `tableOfContents` | If the publications contains a table of contents (check for the presence of a `toc` collection in RWPM) |
-| `feature` | `MathML` | If the publication contains any resource with MathML (check for the presence of the `contains` property where the value is `mathml` in `readingOrder` or `resources` in RWPM) |
-| `feature` | `synchronizedAudioText` | If the publication contains any reference to Media Overlays (TBD in RWPM) |
+| Key | Value | Inferred? |
+|------------------------|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `accessMode` | `auditory` | If the publication contains a reference to an audio or video resource (inspect `resources` and `readingOrder` in RWPM) |
+| `accessMode` | `visual` | If the publications contains a reference to an image or a video resource (inspect `resources` and `readingOrder` in RWPM) |
+| `accessModeSufficient` | `textual` | If the publication is partially or fully accessible (WCAG A or above)
Or if the publication does not contain any image, audio or video resource (inspect "resources" and "readingOrder" in RWPM)
Or if the only image available can be identified as a cover |
+| `feature` | `displayTransformability` | If the publication is fully accessible (WCAG AA or above)
:warning: This property should only be inferred for reflowable EPUB files as it doesn't apply to other formats (FXL, PDF, audiobooks, CBZ/CBR). |
+| `feature` | `printPageNumbers` | If the publications contains a page list (check for the presence of a `pageList` collection in RWPM) |
+| `feature` | `tableOfContents` | If the publications contains a table of contents (check for the presence of a `toc` collection in RWPM) |
+| `feature` | `MathML` | If the publication contains any resource with MathML (check for the presence of the `contains` property where the value is `mathml` in `readingOrder` or `resources` in RWPM) |
+| `feature` | `synchronizedAudioText` | If the publication contains any reference to Media Overlays (TBD in RWPM) |
### HTTP streaming of local publications
`rwp serve` starts an HTTP server that serves EPUB, CBZ and other compatible formats from a given directory.
-A log is printed to stdout.
\ No newline at end of file
+A log is printed to stdout. See the above section on "Running the server" for details on the HTTP API.