Install
Configuration
QuillSail reads the explicit --config path, then COPYDESK_CONFIG, then ./copydesk.toml, then /etc/copydesk/copydesk.toml. Relative paths resolve beside the selected file. Environment values override TOML. Restart both web and worker processes after changes.
quillsail init writes a commented configuration. The packaged src/copydesk/config_template.toml is the complete starting reference.
| Section | Settings |
|---|---|
| site | base_url, secret_key, data_dir, debug |
| database | SQLAlchemy url |
backend, host, port, security, username, password, timeout, from_email, rate_per_minute, file_dir |
|
| uploads | dir, max_size_mb |
| jobs | run_in_web (prefer a separate worker in production) |
| server | proxy_hops |
| extensions | enabled, optional dir, extension-specific option tables |
| themes | dir |
| logging | level |
Environment overrides: COPYDESK_BASE_URL, COPYDESK_SECRET_KEY, COPYDESK_DATA_DIR, COPYDESK_DEBUG, COPYDESK_DATABASE_URL, COPYDESK_MAIL_BACKEND, COPYDESK_MAIL_HOST, COPYDESK_MAIL_PORT, COPYDESK_MAIL_SECURITY, COPYDESK_MAIL_USERNAME, COPYDESK_MAIL_PASSWORD, COPYDESK_MAIL_FROM_EMAIL, COPYDESK_MAIL_RATE_PER_MINUTE, COPYDESK_UPLOADS_DIR, COPYDESK_UPLOADS_MAX_SIZE_MB, COPYDESK_JOBS_RUN_IN_WEB, COPYDESK_PROXY_HOPS, COPYDESK_EXTENSIONS (comma-separated names), and COPYDESK_LOG_LEVEL.
Use a stable random secret of at least 32 characters. Changing it invalidates sessions and signed email links. Keep debug = false on public servers. Publication settings such as name, description, timezone, registration rules, colors, theme, and newsletter subject format are edited in the dashboard and stored in the database.
Gmail and Outlook app registrations can be supplied under [oauth] or through the COPYDESK_GOOGLE_CLIENT_ID, COPYDESK_GOOGLE_CLIENT_SECRET, COPYDESK_MICROSOFT_CLIENT_ID, COPYDESK_MICROSOFT_CLIENT_SECRET, and COPYDESK_MICROSOFT_TENANT environment overrides. See email connectors.
An administrator’s saved email connection takes precedence over [mail] and is read by both web and worker processes without a restart. Disconnecting it resumes the server’s [mail] configuration. Provider app credentials saved in the dashboard take precedence over their server defaults. Dashboard secrets are encrypted with a key derived from site.secret_key; preserve that key when restoring the database.
Named local publications are selected with quillsail --instance NAME COMMAND. The desktop app and quillsail instance commands share their private registry and keep each publication’s files separate. Named instance commands ignore server environment overrides. See multiple local publications. Inside application code, database engines and sessions resolve through the active Flask application context; creating another application never rebinds an existing publication’s database.