A web application for collaboratively writing screenplays in the Fountain markup language. Allows for collaborative real time editing on screenplays, and exporting them to multiple formats (such as HTML and PDF).
The recommended way to run Dionysus locally (e.g. during development) is via the compose file.
podman-compose --file compose.yml upThis starts the application, a local PostgreSQL instance, and a mock OIDC provider with sensible development defaults.
For production deployments, use the published Docker image and configure it as described in the Configuration section. Mount a configuration file to /etc/dionysus/config.toml or set DIONYSUS_ environment variables as needed.
| Setting | Required | Format |
|---|---|---|
| database.url | Yes | postgresql://USER:PWD@HOST:PORT/DB |
| oidc.base_external_id | Yes | Base for externally reachable url. E.g. "https://your-domain.com" |
| oidc.providers. | Yes | See OIDC provider config section |
| logging.filter | No | Default: "info,tower_http=debug" |
| logging.json | No | Default: False |
| listener.ip | No | Default: 0.0.0.0 (listen everywhere) |
| listener.port | No | Default: 8000 |
These settings can be configured either through a TOML file or DIONYSUS_ environment variables.
The default configuration file location is /etc/dionysus/config.toml. To use a different path, set DIONYSUS_CONFIG environment variable to desired path.
When using the Docker image, mount your configuration file to /etc/dionysus/config.toml (recommended read only).
Example (Compose):
services:
dionysus:
image: ghcr.io/frblo/dionysus:latest
volumes:
- ./dionysus.toml:/etc/dionysus/config.toml:roEnvironment variables are prefixed with DIONYSUS_. They use uppercase names and replace dots (.) with double underscores (__) to represent nested configuration keys (e.g. DIONYSUS_DATABASE__URL).
Environment variables override values from the configuration file.
For secrets, it is generally recommended to use environment variables rather than storing them in a file.
Dionysus supports having multiple OIDC providers at the same time. Each one of these needs the following information.
| Setting | Format |
|---|---|
| oidc.providers..issuer | Base url of the issuer |
| oidc.providers..client_id | Client id for issuer |
| oidc.providers..client_secret | Client secret for issuer |
| oidc.providers..scopes | A list of the scopes to request from the issuer |
These are configured in the same way as described above where specifies the identifier for the issuer.
[oidc.providers.your_oidc]
issuer = "https://your-oidc-domain"
client_id = "oidc-client"
client_secret = "oidc-secret" # Should preferably be stored in an environment variable
scopes = ["openid", "profile", "email"]or the same using environment variables
DIONYSUS_OIDC__PROVIDERS__YOUR_OIDC__ISSUER="https://your-oidc-domain"
DIONYSUS_OIDC__PROVIDERS__YOUR_OIDC__CLIENT_ID="oidc-client"
DIONYSUS_OIDC__PROVIDERS__YOUR_OIDC__CLIENT_SECRET="oidc-secret"
DIONYSUS_OIDC__PROVIDERS__YOUR_OIDC__SCOPES__0="openid"
DIONYSUS_OIDC__PROVIDERS__YOUR_OIDC__SCOPES__1="profile"
DIONYSUS_OIDC__PROVIDERS__YOUR_OIDC__SCOPES__2="email"Please make issues on this repository if you experience problems with the application. Please direct any issues concerning the screenplay exporting to the Rustwell repository instead, as that is the engine handling the exports.