Skip to content

Authentication

The app supports optional sign-in and an Offline / Online toggle. You can use denoise without logging in; authentication determines what syncs when you go online.

  • GitHub — Sign in with your GitHub account. Required for GitHub integration (linking milestones, syncing issues, converting tasks to issues).
  • Google — Sign in with your Google account. Gives you a stable identity and cloud sync; GitHub features still require GitHub auth.

Sign-in uses OAuth: click Sign In, choose GitHub or Google, complete the flow in your browser, and you are redirected back to the app with a session. Your session is stored in a cookie and validated by the server.

You can use denoise without signing in. In that case:

  • All data stays local (IndexedDB). Tasks and milestones are stored only on your device.
  • You can create and edit tasks, use milestones, and use the focus timer.
  • GitHub integration (link milestone, create issue, sync with GitHub) is not available.

So “offline-first” applies either way: the app works locally first; sign-in and the online toggle add cloud sync and collaboration.

The header shows a toggle with three possible states:

StateMeaning
OfflineNo cloud sync. All data is stored only in IndexedDB on this device.
Syncing…You chose Online; the app is connecting to the server (or will time out).
OnlineConnected to the server. Todos for the current list sync to the cloud.

When you switch from Offline to Online, a confirmation asks: “Do you want to sync your todos across devices?” If you confirm, the app tries to open a WebSocket to the server. Whether it reaches Online depends on authentication and what you have selected.

How authentication and the toggle interact

Section titled “How authentication and the toggle interact”
  • Online works fully:
    • Milestone sync — Your milestones (create, update, delete, share) sync to the server and are available on other devices and to collaborators.
    • Todo sync — Todos for the current list (milestone or “My Tasks”) sync in real time. Data is stored in the cloud (Deno KV) and keyed by your user id or milestone id.
  • Offline — Everything is local only; no server connection.
  • Offline — Same as above: everything is local.
  • Online — Behavior is limited:
    • Milestone sync is not available. The server requires authentication for uploading or requesting milestones. So you cannot sync milestones across devices or use sharing when not signed in.
    • Todo sync can still work only if a milestone is selected.
      The app needs a “list id” to connect (either your user id or a milestone id). When you’re not signed in, there is no user id. If you’re on “My Tasks” (no milestone), there is no list id, so the WebSocket never connects and the toggle will stay Offline (or show Syncing… then fall back to Offline after a few seconds).
      If you select a milestone, the list id is that milestone’s id. The server accepts the connection as an anonymous user and syncs todos for that list to the cloud. So you get real-time todo sync for that one list only, without a stable account or cross-device identity.

In short: online without signing in = todo sync for the currently selected milestone only; no milestone sync and no persistent identity across devices.

Signed in?ToggleResult
NoOfflineLocal only; no server.
NoOnlineTodo sync only when a milestone is selected; no milestone sync.
YesOfflineLocal only; no server.
YesOnlineFull sync: milestones and todos, multi-device and collaboration.

For full cloud sync, cross-device use, and GitHub integration, sign in (GitHub for GitHub features, or Google for identity and sync) and switch to Online.