Show HN: A plain-text file format for todos and check lists
452 points| jotaen | 4 years ago
Rather than having to memorise CLI commands for these interactions (which I’m not super good at), I figured that it’s easier for me to use my text editor directly, and have an editor plugin help me with the visual structure and some convenience functionality. So, kind-of similar to Emacs Org Mode, but without having to use Emacs. I personally use Sublime Text, and even though I enjoy it a lot, I don’t like being bound to specific tools.
I think the best basis for staying independent is to have a data format that’s properly specified and meaningful on its own. This puts the data first, and it allows the tools to be built on top and shared (or interchanged) more easily.
This is what [x]it! is about, which is a plain-text file format for todos and check lists. I’m curious for thoughts and feedback. There is obviously not much tooling support (yet), but feel free to create something if the idea resonates with you.
Website with demo: https://xit.jotaen.net
File specification: https://github.com/jotaen/xit/blob/main/Specification.md
[+] [-] tconfrey|4 years ago|reply
There are an increasing number of tools using org-mode as a plain-text data store, so you are more likely to be able to participate in a tool ecosystem. In addition to my own https://braintool.org see the list below. BrainTool (mainly a bookmark manager) has an elemental to-do system, I'd love to have my users be able to use your tool for todos.
NB see also Karl Voit's push for org markup awareness outside of Emacs via Orgdown: https://gitlab.com/publicvoit/orgdown.
------ ORG-MODE TOOLS OUTSIDE EMACS
https://plainorg.com
https://flathabits.com
https://beorg.app
https://braintool.org
https://easyorgmode.com
https://logseq.com
https://organice.200ok.ch
https://orgro.org
http://orgzly.com
[+] [-] barankilic|4 years ago|reply
[+] [-] kesslern|4 years ago|reply
Is there a formal specification or documentation on the format? When I've previously read about integrating org-mode support in other threads, the lack of specification outside of "whatever org-mode does" was the biggest blocker.
[+] [-] kaladin-jasnah|4 years ago|reply
[+] [-] greggman3|4 years ago|reply
[+] [-] unknown|4 years ago|reply
[deleted]
[+] [-] D13Fd|4 years ago|reply
The spec is nice. I love the recognition that dates may be imprecise (e.g., 2022-05 -- although I would count that as the last day of the period, 23:59:59 on 2022-05-31, rather than the first day of the next period, 2022-06-01). I like the thought that went into it and the nice presentation.
On the other hand, I do not think this is necessary or even all that helpful in the real world. You don't need a standardized format if you are writing to do items manually in a text editor. You just write them. In the vast majority of cases no one is going to see them but you. Time spent conforming to a spec is time wasted.
A formal spec also doesn't help much for apps to use this format. There is not a huge need for portability between to do apps, and for most users to do items are ephemeral and not something that needs to be archived and revisited. Even if an app adopted this, being tied to a plain text format would likely hinder feature development, including the ability to sync across multiple devices. Beyond that, different to do apps use different systems of categorization and tagging, so really in practice I doubt this will become any kind of standardized format.
So, all told, it is a beautiful effort, nicely presented, but I think it is unnecessary.
[+] [-] vhanda|4 years ago|reply
I disagree. I maintain a rather popular plain-text-based app [1] and the formal spec makes this something very very easy to add support for. Infact the only thing that could make this even easier is if there was a way to verify my own implementation.
[1] https://gitjournal.io
[+] [-] haswell|4 years ago|reply
To add some counterpoint to this, I try a lot of apps. Partially because I'm always looking for the one that's better than what I use now - looking for the thing that fits me the best - but also because I just like trying things.
Portability means a greater chance that I'll fully dive in and use an app to its potential vs. some light use.
There have been a few times that I've found a new app/solution that was clearly better than what I was currently using, and this was both exciting and frustrating. Frustrating because it meant I'd either have to leave my history behind, or spend a ton of time trying to port it over somehow.
I realize I'm part of a niche group of people, but I feel like a spec like this was meant for a pretty niche group of people.
I for one do not agree that this is unnecessary, but I do acknowledge that it's probably not necessary for a lot of people.
[+] [-] jotaen|4 years ago|reply
What I agree with is that standards limit the creative freedom of tool creators. But that’s the same balancing act all over again, no matter where you look at.
[+] [-] mufufu|4 years ago|reply
[+] [-] posharma|4 years ago|reply
[+] [-] zamubafoo|4 years ago|reply
So just having the autocompletion for people editing in text does wonders.
As for standardization, applications don't have to target it as their on-disk format for it to be useful. Instead of bespoke JSON/XML schemas or proprietary formats, having a plain text export format is a big win. Specially if it's human readable and human writeable.
[+] [-] oezi|4 years ago|reply
In particular, Markdown has a todos (using the same `[ ]`) and just uses indentation for grouping. I find this more intuitive and it renders in markdown renderers.
For priorities, I have adopted the notation of OneNote which puts exclamation and Unicode star symbol next to the todo brackets.
I also use some other conventions:
[-] for obsolete rather than [~].
[>] for postponed until later
Implemented in my Todo manager TUI: https://github.com/coezbek/rodo
[+] [-] eigenvalue|4 years ago|reply
[+] [-] smoe|4 years ago|reply
[+] [-] RankingMember|4 years ago|reply
[+] [-] divbzero|4 years ago|reply
[1]: https://github.com/todotxt/todo.txt
[2]: http://todotxt.org/
[3]: https://web.archive.org/web/20060701121920/https://lifehacke...
[+] [-] neilv|4 years ago|reply
I have a few tweaks: https://www.neilvandyke.org/todotxt/
[+] [-] WesternWind|4 years ago|reply
[+] [-] jotaen|4 years ago|reply
Website with demo: https://xit.jotaen.net
File specification: https://github.com/jotaen/xit/blob/main/Specification.md
[+] [-] MattyRad|4 years ago|reply
For example, say this is my (out of order) to-do list:
- [ ] Mix ingredients
- [ ] Eat cake
- [ ] Bake a cake
- [ ] Find cake pan
These tasks need to be done in a specific order, but reading the list top to bottom doesn't make sense.
So let's denote dependencies with indentation:
- [ ] Eat cake
By specifying order through indentation, we've now created a DAG that orders and contextualizes tasks; with the most actionable tasks having the largest indentation. This is how I organize my plaintext to-do files, but afaict no todo list software is able to handle large task trees gracefully- with the exception of grit, which is more of an experiment (but the readme is incredibly well written and describes the DAG problem to a tee).https://github.com/climech/grit
Does anyone know if org-mode handles complex task trees gracefully? All the examples I've found online were trivial (i.e. one task deep)
[+] [-] drran|3 years ago|reply
[0]: https://github.com/vlisivka/bash-modules/blob/master/bash-mo...
[+] [-] halostatue|4 years ago|reply
There are lots of things that support the basic TaskPaper format: https://support.hogbaysoftware.com/t/taskpaper-extensions-wi...
[+] [-] kitplummer|4 years ago|reply
One challenge I've had is the file-based concept. And it losing "shape" quickly. I taken a few whacks at something different and have settled on a CLI-based kanban-y thing: https://github.com/kitplummer/clikan
But this lacks things like tags - which I appreciate as long as they are searchable in some form.
[+] [-] pixxel|4 years ago|reply
[+] [-] oezi|4 years ago|reply
I call it Rodo (Todos in Ruby): https://github.com/coezbek/rodo
It uses Markdown for syntax.
[+] [-] jotaen|4 years ago|reply
[+] [-] jrib|4 years ago|reply
I do something similar for my todo file but organize by date. Most recent date first. Every day I review unchecked items from the previous day and move them to today or mark them obsolete.
It has the added functionality of serving as a nice log of my work.
So it looks something like this:
[+] [-] gcarvalho|4 years ago|reply
I also record the creation date and timestamped notes on the progression of the task. And I use @ to keep tabs on tasks that I've delegated.
[+] [-] Giho|4 years ago|reply
http://todotxt.org/ https://syncthing.net/
[+] [-] _h9mb|4 years ago|reply
https://github.com/danisztls/journal
Lately I'm rarely using it because most of the things that I really have to do (work) are on my email inbox or containerized in project dirs. And for the later I just run 'rg "TODO:"' in the project dir.
[+] [-] ma2rten|4 years ago|reply
[+] [-] dugmartin|4 years ago|reply
[+] [-] kseistrup|4 years ago|reply
[+] [-] yardshop|4 years ago|reply
I wrote a script at one point to convert these kinds of notes into a web page with various background colors per status. It helps to visualize it sometimes but I don't actually use it that often.
[+] [-] tyingq|4 years ago|reply
[1] https://orgmode.org/org.html#TODO-Extensions
[+] [-] neurocat123|4 years ago|reply
[+] [-] ryanolsonx|4 years ago|reply
I like that there's a Sublime Text package for it. Seeing my plain text todos with nice syntax highlighting is a perk.
I maintain a Zenburn color scheme[0] for Sublime Text. After playing with this, I added specialized support for [x]it! and I think it looks pretty good[1].
[0]: https://packagecontrol.io/packages/Zenburn%20Color%20Scheme
[1]: https://github.com/ryanolsonx/sublimetext-zenburn-theme/issu...
[+] [-] _andrei_|4 years ago|reply
I wrote a small library to parse mine, and built many tools on top of it, including editor support, various CLIs for task management, calendar, activity tracking, content consumption, etc.
I invested a lot of time into learning Emacs, got into using Org, but Emacs is just too slow, and I got to a point where customizing the tool for what I want was harder than building a custom tool.
[1] https://i.imgur.com/Nm6e31W.png * sorry for ma english
[+] [-] wim|4 years ago|reply
We're actually building an editor/IDE of sorts from scratch, but specifically for "todo.txt" (https://thymer.com if you're interested). I think a lot of parts of your spec would fit really well with the concepts we were thinking of (like the status in between [ ], due dates, #tags..). Maybe we should add compatibility for this spec as well (for things like autocomplete, and export/import).
Thanks for posting, really helpful for portability to have more standards like these!
[+] [-] mpalczewski|4 years ago|reply
I prefer vimwiki for this purpose https://github.com/vimwiki/vimwiki
You can get plugins that sync it to a git repository. I love this.
There's also task warrior plugins, though I haven't figured out how that would for me, seems to get away from simple text files at that point.
[+] [-] sloankev|4 years ago|reply
[1] https://marketplace.visualstudio.com/items?itemName=blt.blt
[+] [-] geoelectric|4 years ago|reply
https://news.ycombinator.com/item?id=21580133
I'd quit using that one since because too many Markdown editors have forgotten tabs are legal whitespace after a UL bullet, and that there are three different UL bullet characters (and it really doesn't help that the CommonMark examples page only docs `-` and `*`, even though `+` is part of the CommonMark spec too). In particular, without the tab support being implemented, there's no fixed gutter for the BuJo-style sigil and queries get much harder.
But I do miss the idea of those simple bullets. I may have to check out your extension.
[+] [-] prideout|4 years ago|reply
In fact, I like your format slightly more, because when I complete tasks I usually just delete them -- no need for a checkbox.
[+] [-] softwarebeware|4 years ago|reply
My approach is similar. I already take notes via a Bash script. I configure a particular "label" for any todos and (essentially) just grep for them, excluding those that are crossed out (with Markdown tildes). This approach works great for me as a Staff Engineer in a large tech company. Reference: https://github.com/scottashipp/noted/blob/main/subcommands.m...
I also wanted to mention there are several related ideas / movements around the web. One of the biggest is todotxt. In case you hadn't heard of it: https://github.com/todotxt/todo.txt
[+] [-] jotaen|4 years ago|reply
That being said, I drew a great deal of inspiration from todo.txt, and I think it’s a well-made and powerful tool.
[+] [-] zamubafoo|4 years ago|reply
It also allows users more generic organization options, with filtering based on the namespaced tags being something trivial, but ultimately up to the user or the app that is interfacing with the xit file.