Private Daily Diary — Write in Your Browser, Stay in Control of Your Data

Updated May 17, 2026
Share & Support

What's included

Features

One entry per day — structured around dates, always editable, instantly navigable via calendar
Auto-save 800ms after typing stops — no save button, no lost entries; confirmed with "✓ Saved" indicator
Mood tracker with 6 moods — Great, Good, Neutral, Bad, Anxious, Tired — colour-coded on the calendar
Calendar sidebar with mood dots — visual month overview of which days have entries and how you felt
Tag support — add comma-separated tags to group entries by topic, project, or theme
Full-text search — instantly searches all entry text, tags, and dates in your browser
Recent entries panel — last 12 entries with mood emoji and preview for quick navigation
GitHub Gist backup (optional) — automatic sync every 3 min to your own private Gist
Merge-first sync — most recently updated entry always wins; safe to write on multiple devices simultaneously
Export all entries as a JSON file — use alongside JSON Formatter to inspect or edit
Import JSON — merge a backup file with your current diary safely without overwriting newer entries
100% client-side — no login, no account, no server; your diary is only on your device and your GitHub

About this tool

A Private Journal That Lives in Your Browser — No Login, No Server, No Tracking

Runs in your browser
No install or signup
Free forever

You want to write daily — but you don't want your thoughts stored on someone else's server, tied to an account that can be hacked, or monetised as data. Most online diary and journaling apps require an account, store entries on their servers, and may use your writing for analytics or advertising. This tool is different. Every entry you write is saved to your browser's IndexedDB — a local database that exists only on your device. This tool runs fully in your browser — no data is uploaded. Your diary stays private by default.

One entry per day. The diary is structured around dates — each day gets one continuous entry. Navigate between days using the arrow buttons or click any date in the calendar sidebar. Past entries are always editable. You can write a quick note or a long reflection — the textarea expands to fill the available space and auto-saves everything 800 milliseconds after you stop typing.

Mood tracking. Each entry has a mood selector: Great, Good, Neutral, Bad, Anxious, and Tired. Your mood is stored with the entry and shown as a colour-coded dot on the calendar — green for good days, red for hard ones, purple for tired. Over time, the calendar becomes a visual mood map of your month. There are no algorithms, no mood analysis sent to a server — just a local colour you assign to each day.

Tags and search. Add tags to entries the same way as in the Bookmark Keeper — type them comma-separated in the tags field. The search panel searches across all entry content, tags, and dates in real time. Find any entry by keyword in seconds without any server round-trip. Everything happens in your browser.

Optional GitHub Gist backup. If you want your diary available on multiple devices, connect a GitHub Personal Access Token with the gist scope. The diary creates a private Gist called fwd-diary.json in your GitHub account and syncs automatically every 3 minutes while the tool is open. The sync is merge-first — if you wrote on your phone and laptop the same day, the more recently updated version of that entry is kept. Your token is stored only in localStorage and never passes through FWD Tools servers.

Export and import. Use the export button at any time to download all entries as a JSON file. Import any previously exported file to merge it with your current entries. Useful for offline backups, moving between browsers, or archiving old journals before clearing browser data. The import is also merge-safe — each day's entry is compared by update time and the newer version is kept.

Step by step

How to Use

  1. 1
    Write today's entryThe diary opens on today's date automatically. Click the large text area and start writing. Your entry auto-saves 800 milliseconds after you stop typing — you will see "✓ Saved" in the header. There is no save button to click. Write as little or as much as you want — a single sentence or several paragraphs.
  2. 2
    Select your moodAt the top of the editor, click one of the six mood emojis — Great (😊), Good (🙂), Neutral (😐), Bad (😔), Anxious (😰), or Tired (😴). Your mood is saved with the entry and shown as a colour dot on the calendar so you can see emotional patterns over time. Changing your mood auto-saves immediately.
  3. 3
    Add tagsType tags in the tags field below the mood row — separate them with commas or spaces. Examples: "work, stress", "gratitude", "ideas". Tags let you group entries by theme and find them quickly with search. You can search for any tag in the search panel to pull up all entries that share it.
  4. 4
    Browse past entries with the calendarThe left sidebar shows a monthly calendar. Days with entries are highlighted with a colour dot matching your mood. Click any past day to open and edit that entry. Use the arrow buttons to navigate between months. The recent entries list below the calendar shows your last 12 entries with their mood emoji and a text preview — click any to jump directly to it.
  5. 5
    Search old entriesClick the search icon in the header to open the search panel. Type any word, phrase, or tag and results appear instantly — the search checks your entry text, tags, and dates. Click any search result to jump to that day's entry. Search is 100% local — your content never leaves your browser.
  6. 6
    Set up GitHub Gist backup for multi-device accessClick the GitHub icon in the header and follow the 3-step setup: create a Personal Access Token with the gist scope on GitHub, paste it into the token field and click Save, then click Sync Now. A private Gist called fwd-diary.json is created in your GitHub account. The diary auto-syncs every 3 minutes. To access your diary on another device, enter the same token and Gist ID and the entries download automatically.
  7. 7
    Keep your Gist private — never share the URLGitHub private Gists are not truly encrypted — they are unlisted links. Anyone who has your Gist URL or Gist ID can read every diary entry you have written without logging in. Never share your Gist URL, Gist ID, or Personal Access Token with anyone. Your diary is personal — treat the Gist URL as a secret. For maximum privacy with nothing leaving your device, skip Gist sync and use the Export JSON and Import buttons to transfer entries manually instead.
  8. 8
    Export or import a backupClick the download arrow (↓) in the header to export all entries as a dated JSON file — keep this as an offline backup. To restore, click the upload arrow (↑) and select the file — entries are merged with your current diary by update time. Re-importing is safe. Use the JSON Formatter to inspect or clean up an exported diary file before re-importing it.

Real-world uses

Common Use Cases

📝
Write a daily journal without signing up for another app
Open the tool, start writing. No account, no email verification, no subscription. Your entries are in your browser immediately. Write every day and come back whenever you want — the calendar shows every day you've written.
🎭
Track your emotional state over time with mood dots
Select a mood emoji each day and the calendar fills with colour dots over the month. At a glance you can see whether last month had more good days or hard ones. No mood analysis sent anywhere — just a local visual pattern you control.
💼
Keep a private work journal alongside your freelance tools
Use Daily Diary to log what you worked on, decisions made, and problems solved each day. Pair it with the Freelance Dashboard for time tracking and the Daily Focus Log for structured productivity tracking.
🔍
Search past reflections and ideas by keyword
Had an idea three months ago that you want to find? Type a keyword in the search panel and all matching entries appear instantly. Tag entries with themes like "ideas" or "product" to make searching even faster.
📱
Sync your diary across phone, laptop, and desktop
Connect GitHub Gist once on each device. Write on your phone at night, open your laptop in the morning — the diary syncs automatically when you open it. Changes from both devices are merged by timestamp so nothing is lost.
🛡️
Keep sensitive thoughts private without third-party storage
Unlike Day One, Notion, or Notion-alternatives, your diary entries never touch a cloud server unless you explicitly choose Gist sync — and even then they only go to your own private GitHub Gist. No company reads your diary. No ads are targeted from it.

Got questions?

Frequently Asked Questions

No. FWD Tools cannot read your entries because they are never sent to any FWD Tools server. All diary entries are stored in your browser's IndexedDB — a local database on your device. This tool runs fully in your browser — no data is uploaded. If you use the optional GitHub Gist backup, your data goes directly from your browser to GitHub's API using your own Personal Access Token — not through FWD Tools infrastructure.

Clearing site data for fwdtools.com will delete all entries from IndexedDB. To prevent data loss, use the Export JSON button regularly to keep an offline backup, or set up GitHub Gist sync for automatic cloud backup. To restore, click Import and select your JSON file, or open the Gist panel on a fresh browser — the diary will download all entries from your Gist automatically.

Click the GitHub icon in the header, follow the 3 steps: create a Personal Access Token with the gist scope at GitHub (there's a direct link in the panel), paste it into the token field and click Save, then click Sync Now. A private Gist named fwd-diary.json is created in your GitHub account. The diary auto-syncs every 3 minutes while it's open. Your token is stored only in your browser's localStorage.

Yes. Set up the same GitHub Personal Access Token and Gist ID on each device. When you open the diary, it downloads the latest Gist and merges it with your local entries. Changes made on different devices are merged by comparing the updatedAt timestamp — the version with the most recent update wins. You can safely write on multiple devices without risking data overwrite.

Each day's entry has six mood options: Great (😊), Good (🙂), Neutral (😐), Bad (😔), Anxious (😰), and Tired (😴). Click the emoji that matches how you feel. Your mood is saved with the entry and displayed as a colour dot on the calendar sidebar — green for Great, red for Bad, purple for Tired, orange for Anxious. The calendar gives you a visual mood overview of the month. No mood data is analysed or transmitted.

Yes. Click the search icon (magnifying glass) in the header toolbar. A search panel opens where you can type any keyword — the diary searches across all entry content, tags, and dates in real time. Results show the mood emoji, date, and a preview of the matching entry. Click any result to navigate to that date. Search runs entirely in your browser.

The diary saves your entry automatically 800 milliseconds after you stop typing. A "Saving…" indicator appears briefly in the header, followed by "✓ Saved". Changing your mood or tags also triggers auto-save. There is no manual save button. Wait for "✓ Saved" before closing the tab to ensure your latest changes are written to IndexedDB.

Yes. Click the download arrow (↓) in the header to export all entries as a JSON file with a date-stamped name like fwd-diary-2026-05-11.json. You can open this in the JSON Formatter to browse, search, or edit the raw entry data. To import, click the upload arrow (↑) and select the file — entries are merged with your current diary by update timestamp.

Each diary entry is a JSON object with: date (YYYY-MM-DD, the unique key), content (the text you wrote), mood (one of: great, good, neutral, bad, anxious, tired), tags (array of strings), createdAt (ISO timestamp), updatedAt (ISO timestamp), and deletedAt (null unless soft-deleted). The exported JSON file is a plain array of these objects — readable and editable in any text editor or the JSON Formatter tool.

Yes — treat your Gist URL as a secret. GitHub "private" Gists are not encrypted — they are unlisted links. Anyone who has your Gist URL or Gist ID can read every diary entry you have written without needing a GitHub login. Never share your Gist URL, Gist ID, or Personal Access Token with anyone. Your diary is personal — if privacy is a priority, skip Gist sync entirely and use Export JSON and Import to move your diary manually via USB or your own encrypted storage.