Ruby script to generate a year's worth of WorkFlowy daily notes, using official WorkFlowy dates as bullet titles, organized by year and month.
Pass in the year of the calendar to generate.
ruby calendar_generator.rb --year 2025
The output will be written to a new file in the current directory of the form workflowy-calendar-#{year}.xml.
Copy the contents of the generated xml file and paste directly into WorkFlowy.
Sample Output:
<?xml version="1.0"?>
<opml version="2.0">
<body>
<outline text="2025">
<outline text="January">
<outline text="<time startYear="2025" startMonth="1" startDay="1">Wed, Jan 1, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="2">Thu, Jan 2, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="3">Fri, Jan 3, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="4">Sat, Jan 4, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="5">Sun, Jan 5, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="6">Mon, Jan 6, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="7">Tue, Jan 7, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="8">Wed, Jan 8, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="9">Thu, Jan 9, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="10">Fri, Jan 10, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="11">Sat, Jan 11, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="12">Sun, Jan 12, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="13">Mon, Jan 13, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="14">Tue, Jan 14, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="15">Wed, Jan 15, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="16">Thu, Jan 16, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="17">Fri, Jan 17, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="18">Sat, Jan 18, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="19">Sun, Jan 19, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="20">Mon, Jan 20, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="21">Tue, Jan 21, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="22">Wed, Jan 22, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="23">Thu, Jan 23, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="24">Fri, Jan 24, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="25">Sat, Jan 25, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="26">Sun, Jan 26, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="27">Mon, Jan 27, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="28">Tue, Jan 28, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="29">Wed, Jan 29, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="30">Thu, Jan 30, 2025</time>" />
<outline text="<time startYear="2025" startMonth="1" startDay="31">Fri, Jan 31, 2025</time>" />
</outline>
</outline>
</body>
</opml>
In WorkFlowy, the pasted data will be converted into a nice, simple calendar using official WorkFlowy dates: