BlueScreen Journal is an encrypted, local-first journaling app for macOS terminals. It is built for people who want the focused feel of an old DOS word processor, but with modern safety features: encrypted storage, append-only history, encrypted drafts, encrypted backups, and encrypted sync.
The product goal is narrow on purpose: launch, unlock once, and start writing immediately in a blue-screen full-screen editor that feels like a dedicated writing appliance.
- write-first terminal experience with a consistent DOS-style workspace
- encrypted vault, drafts, backups, and sync blobs
- append-only revisions and integrity verification
- menu-driven discoverability so new users are not blocked by key memorization
- local-first design with encrypted folder sync plus S3/WebDAV and direct Google Drive/Dropbox API connectors
- optional AI summary and reflective coach mode (off by default)
- fixed the installer
Launch BlueScreen Journal here nowpath when the installer is started withcurl | bash - the post-install same-terminal handoff now allocates a clean PTY before entering the blue-screen TUI
- installer QA now exercises the real piped-launch + option
1path with a TUI smoke check instead of only asserting--version - the stable line stays focused on release durability and first-run trust, not feature churn
Most journaling tools force one of two bad tradeoffs:
- modern note apps give you sync and search, but pull you into a GUI workflow full of chrome
- plaintext file workflows keep control local, but leave sensitive writing exposed on disk and in cloud folders
bsj is designed to avoid both.
It gives you:
- a keyboard-only writing flow with a persistent command strip and nostalgic
80x25screen discipline - encrypted-at-rest journal content, drafts, backups, and sync blobs
- append-only revisions so intentional saves create history instead of overwriting it
- menu-driven discovery so the app still feels learnable without memorizing every function key
- real editor commands for line movement, stamps, and structural writing work
- in-product review and admin surfaces so daily use stays inside the TUI
- platform: macOS
- interface: full-screen Rust TUI in Terminal.app and iTerm2
- visual direction: royal-blue background, white monospaced text, classic DOS-era workspace
- storage model: local-first encrypted vault on disk
- sync model: encrypted folder sync, plus S3/WebDAV and direct Google Drive/Dropbox API backends
- history model: append-only revisions plus encrypted per-date autosave drafts
- search model: in-memory index after unlock, with no plaintext search index on disk
| Goal | Read this first |
|---|---|
| Install and get writing quickly | README install section, What’s New, Cheat Sheet, Quickstart, Setup Guide |
| Understand product capabilities | Product Guide, Datasheet, Compare |
| Understand the nostalgia UX contract | Nostalgia Guardrails, Terminal Guide |
| Resolve install/runtime issues | Troubleshooting, Terminal Guide, Support |
| Operate sync/backup safely | Sync Guide, Backup Restore, Privacy |
| Configure and tune behavior | Settings Guide, config.example.json |
| Package or distribute releases | Distribution Guide, Release Certification, Maintenance Baseline, Release Notes |
Public one-line install:
curl -fsSL https://raw.githubusercontent.com/Awassee/bluescreenjournal/main/install.sh | bashPin a specific release:
curl -fsSL https://raw.githubusercontent.com/Awassee/bluescreenjournal/main/install.sh | bash -s -- --version v2.2.3Install from source instead of the prebuilt release:
curl -fsSL https://raw.githubusercontent.com/Awassee/bluescreenjournal/main/install.sh | bash -s -- --sourceLocal install from a checkout:
./install.shUninstall options:
./install.sh --uninstall
./install.sh --factory-resetInstaller troubleshooting options:
./install.sh --doctor
./install.sh --repair-path
./install.sh --about./install.sh now opens an interactive installer menu in a local terminal session, including uninstall and full factory-reset actions.
What the installer does:
- first install defaults to the latest public prebuilt release
- rerun on a machine that already has
bsjdefaults to latestmainsource build (so updates include newest commits) - installs
bsj - installs bundled docs and the man page
- installs shell completions for Bash, Zsh, and Fish
- prints the exact
PATHfix if your install directory is not already onPATH - prints installed
bsj --versionand the activebsjpath resolved fromPATH - verifies the downloaded archive against its
.sha256file when available
Default prebuilt install path:
~/.local/bin/bsj
- Run
bsj - If this is the first launch, complete the in-product setup wizard:
- vault path
- passphrase
- passphrase confirmation
- optional legacy epoch date (kept in vault metadata for older imports)
- Start typing immediately into today's entry
- Press
F2to create your first encrypted saved revision - Reopen with
bsjor jump to another date withbsj open YYYY-MM-DD
Default vault path:
~/Documents/BlueScreenJournal
The live screen is intentionally constrained to a centered DOS-style 80x25 workspace, even on a large terminal.
The layout is stable:
- header: product title, date/time, entry number, lock state, verify state, save state
- menu bar:
FILE,EDIT,SEARCH,GO,TOOLS,SETUP,HELP - body: text editor plus optional Reveal Codes line and Closing Thought line
- footer: always-visible function-key command strip
The app is direct by design:
- launch into the editor, not a dashboard
- type without reaching for the mouse
- save milestones intentionally
- let encrypted drafts protect the gap between saves
- navigate by date, index, or search when needed
- lock the vault when you step away
| Feature | What it does | User value |
|---|---|---|
| Full-screen editor | Opens directly into the current entry | Removes friction between launch and writing |
| Menu-driven TUI | Keeps all major commands discoverable in-product | Makes the app usable without memorizing everything |
| Writing commands | Adds duplicate/move/delete line tools plus date/time, divider, stats, and metadata stamps | Makes the editor feel like a complete journaling workstation |
| Append-only revisions | Every manual save creates a new revision file | Preserves history and supports safer recovery |
| Encrypted autosave drafts | Autosaves per-date draft state without making revision spam | Protects unsaved work without plaintext leakage |
| Crash recovery | Prompts to recover a newer draft | Prevents accidental loss after interruption |
| Entry numbers | Advances ENTRY NO. with each saved revision and shows the next serial on a fresh page |
Makes same-day saves and clean next-entry flow visible at a glance |
| Real index and calendar | Browse saved dates as a journal, not just as files | Faster recall and better chronological navigation |
| Favorite and random navigation | Jump by favorites, recents, and random saved entries | Makes larger journals easier to roam |
| In-entry find and replace | Incremental find and retro Y/N/A/Q replace flow |
Keeps editing fast inside the writing surface |
| In-entry spellcheck | Suggests corrections, typo auto-fix, and temporary session ignore words | Catches low-signal mistakes without breaking writing momentum |
| Global search | Searches saved entries after unlock without disk plaintext index | Fast retrieval without leaving search residue on disk |
| Search presets and cache status | Adds today/month/all scopes plus encrypted cache inspection | Makes search faster to aim and easier to trust |
| Encrypted sync | Syncs encrypted revision blobs to folder, S3, WebDAV, Google Drive API, or Dropbox API targets | Lets you use cloud storage without uploading plaintext |
| Provider presets | Auto-detects Google Drive, Dropbox, OneDrive, iCloud Drive, and Box Drive folders | Makes mainstream cloud setup one command/menu step instead of manual path hunting |
| Cloud recovery status | Shows upload/download queues plus verify status in TOOLS -> Cloud Status and bsj cloud status |
Makes recovery readiness visible before something goes wrong |
| Pull-only cloud recovery | Pulls missing encrypted blobs from remote without uploading local-only data (TOOLS -> Recover From Cloud, bsj cloud recover) |
Safely rebuilds a machine after loss while preserving remote history |
| Integrity verify | Checks revision hashchains | Detects missing or tampered history |
| Review and dashboard surfaces | Show streaks, mood distribution, backup policy, sync preview, and doctor output | Keeps operational awareness inside the product |
| Insights Center | Adds ten actionable reports (momentum, readiness, volume, streak, metadata trends, cadence gaps, conflict/backup risk) | Turns journal history into immediate writing and safety feedback from menus |
| Reveal Codes | Shows metadata inline in a retro-friendly way | Gives structural visibility without cluttering normal view |
| Opening Line Template | Auto-seeds a configurable header line on blank entry pages | Gives each entry a consistent, personal starting line |
| Closing Thought | Dedicated final line field for each entry | Encourages deliberate endings and cleaner exports |
| Optional AI reflection | Adds summary and guided prompts on demand from TOOLS |
Offers an alternate entry path without changing default writing flow |
| Encrypted backup and restore | Creates encrypted snapshots with retention support | Gives offline recovery without plaintext archives |
| Lock command | Wipes unlocked state and returns to passphrase prompt | Safer on visible or shared terminals |
bsjlaunches the TUI on the current date- type immediately into the editor
F2orFILE -> Save Entrycreates a new encrypted revision- type
**save**on its own line and press Enter to save and open the next same-day entry Alt+Nopens the next blank day when you want to move forward in time- autosave maintains an encrypted draft every few seconds
F3orGO -> Open Calendaropens the month grid for deliberate old-entry browsingF7orGO -> Index Timelinelists existing saved entries when you want archive/history viewbsj open YYYY-MM-DDlaunches directly into a date from the CLI
F4orEDIT -> Find in Entrysearches inside the current entryF6orEDIT -> Replace in Entryruns replace confirmation in a retro styleCtrl+Shift+ForTOOLS -> Spellcheck Entryopens correction pickerTOOLS -> Auto-Fix Common Typosapplies safe typo correctionsbsj spellcheck --date YYYY-MM-DDchecks one saved entry from CLIbsj spellcheck --range last7 --count-onlygives fast typo-count signalF5orSEARCH -> Search Vaultsearches across saved entriesSEARCH -> Saved Presetsreopens named query+range presets- in Search overlay:
Ctrl+Shift+Bsaves current query as a preset andCtrl+1..9loads preset slots bsj search "query" --from YYYY-MM-DD --to YYYY-MM-DDsearches from the CLIbsj search "query" --range last7 --summaryprints quick aggregate signal for recent entriesbsj search "query" --match-mode any|all|phrase --sort relevance --hits-per-entry 5enables richer retrieval controlbsj search --preset "Weekly Review"runs a saved presetbsj search --list-presetslists saved presetsbsj search "query" --save-preset "Name"saves and runs a preset in one commandbsj search --delete-preset "Name"removes a saved presetbsj review --range last30 --goal 750 --jsonexports range-bounded review metrics plus word-goal hit ratebsj timeline --summary --format jsonoutputs aggregate timeline analyticsbsj timeline --group-by week --range last30rolls entries into weekly groupsTOOLS -> Insights Centeropens ten focused writing/safety reports without leaving the TUI flowbsj timeline --save-preset "Recent Work" --query ship --tag workstores a reusable timeline filterbsj timeline --preset "Recent Work"applies a saved timeline presetbsj prompts pick --category reflection --jsonreturns deterministic prompt payloads
TOOLS -> AI Summary (Optional)summarizes the current in-memory entry contextTOOLS -> AI Coach Mode (Optional)opens guided day-reflection prompts and inserts your Q/A transcript back into the editorCtrl+Shift+Aopens AI Coach quicklybsj ai summary --date YYYY-MM-DDprints a concise summary in the terminalbsj ai coach --date YYYY-MM-DD --questions 5prints reflective prompts in the terminal- remote AI is opt-in only: set
BSJ_AI_ENABLE_REMOTE=1andBSJ_OPENAI_API_KEY(orOPENAI_API_KEY) - when remote is not configured, bsj falls back to local heuristic summary/prompt generation
F8orTOOLS -> Sync Vaultsyncs encrypted blobsSETUP -> Cloud Provider Setuphandles both:- folder sync detection for Google Drive, Dropbox, OneDrive, iCloud Drive, and Box
- direct Google Drive / Dropbox API mode with saved non-secret defaults
TOOLS -> Cloud Statusshows upload/download queues and verify stateTOOLS -> Recover From Cloudruns pull-only cloud recovery without pushing local-only revisionsTOOLS -> Soundtrack Sourcesets the MIDI URL/path used for playback- soundtrack auto-starts on launch when a source is configured
TOOLS -> Toggle SoundtrackorAlt+Mplays/stops the configured MIDI theme sourceTOOLS -> Verify Integritychecks the revision chainbsj backupcreates an encrypted snapshot under<vault>/backups/bsj restore ... --into ...restores a backup to another directory
F12orFILE -> Lock Vaultclears unlocked state and returns to the passphrase prompt
The menu bar is the primary discoverability surface.
Escopens the menu bar- arrows move between menus and menu items
Enterruns the selected command- function keys remain as direct shortcuts
FILEincludes save, quick export, export history, backup policy, backup snapshot, restore, lock, and quitEDITincludes line tools, stamps, metadata, reveal, and writing-mode togglesSEARCHincludes today/month/all presets, filter clearing, and encrypted cache statusGOincludes recents, favorites, random entry jump, calendar, and index timelineTOOLSincludes dashboard, spellcheck, review, sync, soundtrack source + toggle, integrity details, optional AI, and aSYSOP Centermenu for operator audits/runbooksSETUPincludesCloud Provider Setup, saved sync backend defaults, direct cloud target fields, and other runtime settingsTOOLSalso includesAI Summary (Optional)andAI Coach Mode (Optional)for guided reflection workflowsHELPincludes quick start, first-run coaching, key/menu guides, update checks, doctor output, and AboutHELP -> Check for Updatesnow offers an in-app install action that runs the installer in the backgroundSETUPincludes a live settings summary plus editable vault/sync/device/opening-line/retention/clock/display valuesHELPincludes About (version/credits), the key sheet, quick-start guide, and searchable guide topics inside the TUI
Primary keys:
F1helpF2save revisionF3date pickerF4find in entryF5global searchF6replace in entryF7indexF8syncF9closing thoughtF10quitF11reveal codesF12lockCtrl+Ssave fallbackCtrl+Ffind fallbackAlt+Mtoggle soundtrackCtrl+Shift+Aopen AI coach mode (optional)
Keyboard verification:
- run
cargo test keybinding_ -- --nocaptureto exercise function-key and Ctrl fallback routing in tests - on Mac laptops, press
fnwithF1..F12unless system settings already treat them as standard function keys
Additional screen-level controls:
- soundtrack source defaults to
https://www.midi-karaoke.info/21b56501.midand can be changed inSETUP -> Soundtrack URL/Path - soundtrack source can also be edited directly from
TOOLS -> Soundtrack Source - URL sources are cached locally before playback so macOS
afplaycan play MIDI reliably - search overlay:
Ttoday,Mmonth,Aall time,Cclear filters - date picker: type
YYYY-MM-DD, use[and]for saved-day jumps,<and>for months with entries - index overlay: type to filter,
Shift+Ssort,Shift+Ffavorites only,Shift+Cconflicts only - command palette:
Ctrl+K - updater logs are written to
$TMPDIR/bsj-updater/update.logwhen started from the TUI
bsj is local-first, not service-first.
Practical implications:
- journal content is not intended to be written to disk in plaintext
vault.jsonstores metadata and KDF parameters, not entry text- saved revisions, autosave drafts, and backups are encrypted before write
- sync targets receive encrypted revision blobs, not plaintext bodies
- search indexes are built in memory after unlock and not persisted as plaintext
- logs intentionally avoid secrets and journal text
Daily use is menu-first inside the TUI. These CLI commands are optional references:
bsj --help
bsj settings
bsj settings --json
bsj doctor
bsj doctor --unlock
bsj guide docs
bsj guide cheatsheet
bsj guide quickstart
bsj guide troubleshooting
bsj guide sync
bsj guide backup
bsj guide macros
bsj guide terminal
bsj guide privacy
bsj guide product
bsj guide datasheet
bsj guide faq
bsj guide support
bsj guide setup
bsj guide settings
bsj guide distributionbsj
bsj open 2026-03-16
bsj search "quiet morning" --from 2026-03-01 --to 2026-03-31
bsj search "focus" --whole-word --case-sensitive --limit 20
bsj search "focus" --match-mode any --sort relevance --hits-per-entry 5
bsj search "focus" --range last7 --summary
bsj search "mood:7" --json --context 40
bsj search "ship" --count-only
bsj spellcheck --date 2026-03-16
bsj spellcheck --range last7 --count-only
bsj spellcheck --from 2026-03-01 --to 2026-03-31 --json --limit 50
bsj review --range last30 --goal 750 --json --min-count 2
bsj timeline --query ship --tag work --person Riley --project Phoenix --metadata
bsj timeline --range last30 --group-by week
bsj timeline --save-preset "Recent Work" --query ship --tag work
bsj timeline --preset "Recent Work"
bsj timeline --mood 7 --has-tags --weekday mon,fri --format csv
bsj timeline --from 2026-03-01 --to 2026-03-31 --summary --format json
bsj prompts list --category focus --json
bsj prompts pick --category reflection --json
bsj ai summary --date 2026-03-16
bsj ai summary --range last7 --max-points 5
BSJ_AI_ENABLE_REMOTE=1 BSJ_OPENAI_API_KEY=*** bsj ai summary --date 2026-03-16 --remote
bsj ai coach --date 2026-03-16 --questions 5
bsj export 2026-03-16
bsj export 2026-03-16 --format markdown --output ~/Desktop/entry.md
bsj sync --backend folder --remote ~/Library/Mobile\ Documents/com~apple~CloudDocs/BlueScreenJournal
bsj sync --provider google-drive
bsj sync --provider dropbox
bsj sync --provider onedrive
bsj sync --backend gdrive
bsj sync --backend dropbox
bsj cloud status --backend folder --remote ~/Library/Mobile\ Documents/com~apple~CloudDocs/BlueScreenJournal
bsj cloud status --provider google-drive
bsj cloud status --backend gdrive
bsj cloud status --backend dropbox
bsj cloud recover --backend folder --remote ~/Library/Mobile\ Documents/com~apple~CloudDocs/BlueScreenJournal
bsj cloud recover --provider google-drive
bsj cloud recover --backend gdrive
bsj cloud recover --backend dropbox
bsj backup
bsj backup list
bsj backup prune
bsj backup prune --apply
bsj sysop dashboard
bsj sysop runbook
bsj sysop sync-preview --backend folder --remote ~/Library/Mobile\ Documents/com~apple~CloudDocs/BlueScreenJournal
bsj restore ~/Documents/BlueScreenJournal/backups/backup-20260316T120000Z.bsjbak.enc --into ~/Documents/BlueScreenJournal-Restore
bsj verifyStart here on GitHub:
- Start Here
- Quickstart
- Troubleshooting
- Sync Guide
- Backup And Restore
- Macro Guide
- Terminal Guide
- Privacy Guide
- Product Guide
- Datasheet
- FAQ
- Compare bsj
- Maintenance Baseline
- Release Notes
- v1.3 Milestone Plan
- v1.3 UX Checklist
- v3.0 Planning
- Next 10 Feature Pack
- Feature Pass v1.0.3 (Archive)
- SYSOP Features
- Setup Guide
- Settings Guide
- Distribution Guide
- Man Page
- Example Config
- Changelog
- Roadmap
- Contributing
- Support
- Security Policy
- Need help getting unstuck: SUPPORT.md
- Need common answers first: docs/FAQ.md
- Need troubleshooting steps: docs/TROUBLESHOOTING.md
- Need sync or backup operating guidance: docs/SYNC_GUIDE.md and docs/BACKUP_RESTORE.md
- Need to evaluate fit: docs/COMPARE.md
- Need security disclosure guidance: SECURITY.md
Build a host-architecture bundle:
./scripts/package-release.shBuild a universal macOS bundle:
./scripts/package-release.sh --universalSmoke-test a bundle install:
./scripts/smoke-release-install.shRun the full QA gate (same checks enforced in CI):
./scripts/qa-gate.sh
# or
just qabsj is intentionally not trying to be:
- a collaborative multi-user editor
- a mobile journaling app
- a rich-text desktop publishing tool
- a markdown PKM platform with backlinks and plugins
- a hosted cloud account product




