There are lots of dedicated apps out there for journaling. You may have already settled on a favorite one, in which case you’re all set.
But if you’re still in the market, or just curious about your options, read on.
You can keep a journal as a set of plain-text files, one for each day. No special apps required. No third party collects your data.
All of the better plain-text editors enable you to open multiple files and folders in a “project” view and explore their contents without having to open these folders or launch their enclosed files from your Finder or File Explorer. That means you can easily access all your journal files from within your editor’s interface.
In addition, better editors enable you to search rapidly across your whole collection of journal files from within the editor’s interface. You can readily find content from days, weeks, months, or even years ago. Searching is even easier if you use some consistent keywords for ideas and topics within your journal files. These can go right in your Markdown headings.
One approach you might take is to create a folder named “Journal” within your Home folder. Inside Journal, you can create a folder for each year and keep that year’s daily files within it.
Let’s say you have a folder whose path is Home > Journal > 2026. If you follow a consistent naming scheme for the files inside it, you can make them appear in your editor’s interface (as well as your Finder or File Explorer) in chronological order. For example, you might name each file “journal_” followed by the date in YYYY-MM-DD format, like so:
journal_2026-08-05.mdAutomating journal file creation: macOS and Linux
If you want to get fancy, you can automate the creation of these files. Here’s a Bash script you can use on macOS or Linux (including Linux on Windows, if you’ve installed it) that, when it runs, creates a new file with the file name as above, except that it also adds the hour and minute. The script will also automatically create a new yearly folder every time a new year rolls around.
Open your plain-text editor of choice, copy the script into a new file, and save the file in your Home folder with the name “journal.sh”.
#!/bin/bash
# A script to create and open a daily journal file
# Create directory when needed (once a year)
year=$( date +%Y )
journal_dir="$HOME/Journal/$year"
mkdir -p "$journal_dir"
# Create file in directory
filename="$journal_dir"/journal_$( date '+%Y-%m-%d_%H-%M' ).md
# Add a reader-friendly date inside the file as a level-one heading
echo "# $( date '+%A, %B %d, %Y' )" >> "$filename"
# Open the file in VS Code
# code "$filename"If you’re using VS Code and have installed the command-line tools that come packaged with it, and you remove the “#” in front of the final line of the script, the script will not only create your daily journal file but open it in VS Code. Alternatively, replacing that last line (again without the “#”) with
open "$filename"will simply cause the file to open in whatever application you’ve set as your default application for opening .md files, whether that’s VS Code or something else.
To run this script in macOS, you’ll first have to give yourself permission to execute it. Search inside your Applications folder for the folder named “Utilities,” and inside there for Terminal.app. Double-click to launch it.
At the command line prompt, type
chmod u+x journal.shthen press “Return” or “Enter” on your keyboard.
You can now run the script from the command line by typing, at the prompt,
./journal.shAlternatively, on a Mac, you can go to the file in your Finder, right-click its icon, choose Get Info, and tell macOS to open the file using Terminal.app. From now on, double-clicking it will run the script. Put an alias of the file in your Sidebar and you can run it with a single click.
Automating journal file creation: Windows
Microsoft Copilot recommends the below script to accomplish the same task the above one does, using Windows shell commands. If you’re a Windows user, paste the code below into your plain text editor and save the file to your Home folder as “journal.ps1”. The script puts your files in a folder for each year living inside Documents > Journal.
# Generate timestamp for filename
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm"
# Get the Documents folder
$documentsPath = [Environment]::GetFolderPath("MyDocuments")
# Create a year-based Journal folder path
$year = Get-Date -Format "yyyy"
$journalPath = Join-Path $documentsPath "Journal\$year"
# Create the folder if it doesn't already exist
New-Item -Path $journalPath -ItemType Directory -Force | Out-Null
# Build the filename and full file path
$fileName = "journal_$timestamp.md"
$filePath = Join-Path $journalPath $fileName
# Create the date string for the top of the file
$fileDate = Get-Date -Format "MMMM d, yyyy"
# Create the file and add the date as a Markdown heading
Set-Content -Path $filePath -Value "# $fileDate`r`n"
# Open the file in Visual Studio Code
code $filePathAs an alternative to that last command, you can use the following command to open the file in whatever application you’ve set as the default application for opening files with the .md extension.
Invoke-Item $filePathLet’s say you’ve saved “journal.ps1” to your Desktop in Windows. You can use the Windows “Start” button to open PowerShell, then, at the prompt, use the “cd” command to navigate to your Desktop.
cd $HOME\Desktop So your session will look something like this:
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows
PS C:\WINDOWS\system32> cd $HOME\Desktop
PS C:\Users\schacht\Desktop>Once at the Desktop, you can run the file by typing
.\journal.shAs on Mac, you can run the script from an icon in your computer’s graphical user interface (File Explorer). To do this, go to your Desktop (assuming that’s where you’ve saved “journal.ps1”), choose New > Shortcut, and for the location, paste the following, then substitute your actual username (without brackets) for [yourusername]:
powershell.exe -NoExit -ExecutionPolicy Bypass -File "C:\Users\[yourusername]\Desktop\journal.ps1"Name the shortcut something convenient, like “New Journal Entry.”
Now double-clicking the shortcut will run your script. It will open a PowerShell window in doing so, which is helpful at first, anyway, in order to troubleshoot in case anything goes wrong.
Once you’re satisfied that the shortcut works, you can edit it to remove -NoExit and the PowerShell will close automatically after the script runs.
