Skip to content

Settings reference

Every key in settings.json, the file in your data directory that the app’s Settings writes. Keys are dotted paths into the file: appearance.theme is {"appearance": {"theme": …}}. For what each section of Settings does, see Settings.

KeyValueDefaultWhat it does
appearance.theme"system", "dark", "light""system"The theme of the app and of every plugin view. system follows the operating system.
appearance.text_size"small", "default", "large""default"The size of the interface’s text.
autostarttrue or falsefalseStart Pinrail when you log in.
close_window"hide", "quit""hide"What closing the window does: hide it and keep running in the menu bar, or quit.
menu_bar_icontrue or falsetrueShow the menu bar icon, with the number of waiting reviews.
sidebar.opentrue or falsetrueWhether the sidebar is open. The app keeps it, so a new window matches the last.
notifications.enabledtrue or falsetrueAnnounce new reviews with a system notification.
notifications.paused_untilan RFC 3339 time, or nullnullNo notifications until this time. The menu bar and Settings pause them for a while.
notifications.soundtrue or falsetruePlay the system sound with each notification.
notifications.muted_pluginsa list of non-empty strings[]Plugins whose reviews are not announced. They are still counted in the menu bar.
notifications.quiet_hours{"from": "HH:MM", "to": "HH:MM"}, or nullnullNo notifications between from and to, local time. A review that arrives then is not announced later.
shortcut.globala non-empty string"alt+shift+w"The shortcut that brings Pinrail forward from any app.
shortcut.global_opens"oldest", "inbox""oldest"What the global shortcut opens: the oldest pending review, or the inbox.
porta port, 1 to 655354747The port of the server on 127.0.0.1. Takes effect after a restart; the CLI follows it.
history.keep_daysa positive number of days, or nullnullDelete ended reviews older than this many days. null keeps them forever.
updates.checktrue or falsetrueLook for a new version of Pinrail at start and every few hours, and download it in the background. It is installed when Pinrail restarts.
welcome.seentrue or falsefalseWhether the setup has been finished or skipped. While false, Pinrail opens on it.

Under plugins.<name>, each plugin keeps the settings its manifest declares in settings_schema, checked against that schema. See Settings and keys of a plugin.

Under links.<name>, Pinrail keeps the sites a plugin may open without asking: source, where the plugin was installed from when the sites were allowed, and origins, such as ["https://github.com"]. The permission applies only while the plugin is installed from that source, and removing the plugin removes it. The app writes it when you allow a site, and a plugin’s view cannot change it.

The app writes the file as settings change, and notices an edit made outside it. A key it does not know is kept as it is. A script can read and change settings through the local API, which checks every change the same way:

Terminal window
curl http://127.0.0.1:4747/api/v1/settings
curl -X PATCH http://127.0.0.1:4747/api/v1/settings \
-H 'content-type: application/json' -d '{"notifications": {"sound": false}}'