</> with by imdone.io
A kanban board with an invisible user interface. It's cards and lists are made from TODOs in your code, markdown and text files.
Use alt(⌥)+t
to open your project's board.
Integrate your TODO comments into your team's issue tracker or backlog with imdone.io.
- Track your TODO comments in a kanban board
- For imdone.io subscribers!!!
- Task Board Features
- Install
- Commands
- Settings
- License
Imdone finds TODO comments in your project and organizes them in a drag and drop kanban board that can integrate with GitHub, waffle.io or whatever you want using imdone.io. It's great for keeping track of your work or better yet identifying, organizing and analyzing technical debt so it can be integrated into the product backlog.
imdone-atom recognizes the common TODO style comments we're all used to, with the added flexibility of todo.txt and markdown syntax. A complete syntax guide can be found in the task formats section of the imdone-core README.md.
Try adding some TODO's and press Alt (⌥ Option)+T to see your board!
A TODO in javascript
// TODO: Refactor and DRY up
A TODO in markdown
#TODO: As a user I would like to ... so that ...
In code files, imdone recognizes any comment line after a TODO as a description and adds it to the card. imdone stops looking for description lines if it encounters a new TODO or a line of code.
In non code files, imdone recognizes any line after a TODO as a description and adds it to the card. imdone stops looking for description lines if it encounters a new TODO or a blank line.
Checklists in your descriptions will render in your cards and will live update your file as they're checked.
// TODO: Refactor and DRY up
// - [x] Replace all duplicate code with this method
// - [ ] Make sure all tests are up to date
For imdone.io subscribers!!!
- replace
$now
with with the current timestamp (ex.2018-03-18T09:37:49-06:00
) - replace
$today
with the current date (ex.2018-03-18
)
Use plain text to set reminders and due dates for your tasks. Uses date.js.
- replace
due tomorrow at noon.
- with due:[timestamp of tomorrow at noon]
- (ex.
due:2018-03-19T10:00:00-06:00
)
- replace
remind me in 2 hours.
- with due:[timestamp in 2 hours]
- (ex.
remind:2018-03-18T11:45:06-06:00
)
- replace
due tomorrow at noon. remind me 30 min before.
- with due:[timestamp of tomorrow at noon] remind:[timestamp for 30 minutes before due]
- (ex.
due:2018-03-19T10:00:00-06:00 remind:2018-03-19T11:30:00-04:00
)
If you set a reminder for your task, you'll receive an OS notification that when clicked, will taske you to the task in the file containing it.
Adding this section to your .imdone/config.json
will cause all tasks in DONE
to have a completed:[timestamp]
added to the task text, and tasks not in DONE
to have a created:[timestamp]
added to the task text.
See rql for filter syntax.
"transformers": {
"autocomplete": {
"filter": "eq(list,DONE)"
},
"autocreate": {
"filter": "ne(list,DONE)"
}
}
imdone uses rql to filter your board. Click on the tags, contexts or the lightbulb icon next to metadata or the filename to see some examples. You can query for any property of a task. If the rql query doesn't return a result the filter will be treated as a regular expression and matched agains task.rawTask.
Metadata fields with the keys "created", "completed", "due" and "remind" are added as date fields to the task so you can filter them with lt() and gt() (e.g. gt(due,date:2018-04-20)
)
{
"frontMatter": {
"tags": [
"epic"
],
"context": [],
"meta": {}
},
"rawTask": "#DOING: As a user I would like to add new files from a template with front matter to be applied to all tasks in the file. id:40",
"text": "As a user I would like to add new files from a template with front matter to be applied to all tasks in the file. id:40",
"list": "DOING",
"order": "",
"hasColon": true,
"line": 5,
"id": "671df79dc689d6a16f8d6000e9ff55c0886805a4",
"repoId": "/Users/jesse/projects/imdone-core",
"source": {
"path": "docs/backlog/templates/readme.md",
"id": "docs/backlog/templates/readme.md",
"repoId": "/Users/jesse/projects/imdone-core",
"type": "File",
"ext": "md",
"lang": "markdown",
"modified": false,
"modifiedTime": "2018-05-19T15:45:19.843Z"
},
"type": "HASHTAG",
"tags": [],
"context": [],
"meta": {
"id": [
"40"
]
},
"description": [
"Acceptance Criteria",
"----",
"- User can select from all templates stored in .imdone/templates",
"- User will be asked to provide information based on 'model' param",
"- template files should have a .yml or .yaml extension"
],
"allTags": [
"epic"
],
"allContext": [],
"allMeta": {
"id": [
"40"
]
}
}
Add an ignore: true
property to the list in .imdone/config.js
to keep tasks in the given list off the board and ignored by imdone.io integrations.
If you add the ignore: true
property to a list in .imdone/config.json
like this...
"lists": [
{
"name": "ARCHIVE",
"hidden": false,
"ignore": true
}
]
The list will look like this...
Just click on the trash can icon and all the visible tasks will be deleted. imdone will also get rid of any blank lines left behind! Great for cleaning up!
Click on the lightning bolt icon and open all files for the visible tasks.
imdone uses a bit of Todo.txt format (except priority), so +bug
would be a tag. Tags in TODO content are turned into filter links, so clicking on it will filter the board.
You can use Todo.txt contexts in the same way. They'll also be turned into filter links.
Another great benefit of using Todo.txt format is the metadata. Just use the format key:value
, and your metadata will be listed in a table inside the task card. We use metadata for imdone.io integrations like gh:1
to represent github issue number 1 and id:1
to represent imdone task id 1.
You can add a token by just adding an all caps list using the add list button. If the list name matches this regex [A-Z]+[A-Z-_]{2,}
a new token will be created.
If the list name matches this this regex /[\w\-]+?/
, then you will have to use the hash style syntax like this...
// #to-do: This is in a list that doesn't have all caps!
Configure a directory to use as a daily journal. Open the daily journal with alt+j. If your like me, you'll just use dropbox directory for this. Remember, you can use TODO's in any text file if you put a #
in front of the token, like this...
This is my simple markdown journal
- #TODO: Finish this work
Configure a directory to use as a daily project journal. Open the daily project journal with alt+p. The daily project journal is stored in your project, and defaults to <project-dir>/journal/${month}/${date}.md
Use your project journal for anything, even planning your next set of features like this...
- #BACKLOG: As a user I would like to use templates to add a Definition of Done to my TODOs so that I spend less time context switching to my issue tracking system.
- [ ] Read templates from `.imdone/templates.md`
- [ ] Replace description lines with @<template-name>
You can add tags, context and metadata to all tasks in a markdown file with YAML front matter like this...
---
tags:
- story
- enhancement
context:
- github
meta:
sprint:
- 1
---
These attributes will be available to use in filters like this...
contains(frontMatter.tags,story)
If you also want to capture tasks with an inline story tag try this...
contains(allTags,story)
Open files in intellij and webstorm
- Open task links in intellij family of products with imdone-atom and imdone intellij plugin!
-
Configuration setting
You can ignore files with the "Exclude Vcs Ignored Paths" setting -
.imdoneignore
.imdoneignore
is implemented using the ignore package. Each file in your projects path is tested against the rules in.imdoneignore
.
To ignore all but some subdirectories, see this Stack Overflow question. git - .gitignore exclude folder but include specific subfolder - Stack Overflow -
.imdone/config.json
imdone will also ignore files and folders that match a regex in the.imdone/config.json
,exclude
array. The array is seeded with some common excludes on first run.IMPORTANT: If your project is large (#files > 1000) consider adding an .imdoneignore file.
$ apm install imdone-atom
or open Atom and go to Preferences > Install and search for imdone-atom
Command Palette | Key Mapping | Description |
---|---|---|
Imdone Atom: Tasks |
Alt (⌥ Option)+T | Open task board |
Imdone Atom: Todays Journal |
Alt (⌥ Option)+J | Open todays journal file |
Imdone Atom: Todays Project Journal |
Alt (⌥ Option)+P | Open todays project journal file |
Imdone Atom: Board Zoom In |
Alt (⌥ Option)+. | Zoom in board |
Imdone Atom: Board Zoom Out |
Alt (⌥ Option)+, | Zoom out board |
Imdone Atom: Export |
Alt (⌥ Option)+X | Create imdone-export.json |
Name | Type | Default | Description |
---|---|---|---|
Exclude Vcs Ignored Paths | boolean | false | Exclude files that are ignored by your version control system |
File Opener Port | integer | 9799 | Port the file opener communicates on |
Max Files Prompt | integer | 2500 | How many files is too many to parse without prompting to add ignores? |
Open in Intellij | string | '' | Glob pattern for files that should open in Intellij. |
Show Notifications | boolean | false | Show notifications upon clicking task source link. |
Show Tags Inline | boolean | false | Display inline tag and context links in task text? |
Today's Journal Date Format | string | YYYY-MM-DD | How would you like your date variable formatted? |
Today's Journal Directory | string | $HOME/notes | Where do you want your journal files to live? (Their project directory) |
Today's Journal File Name Template | string | ${date}.md | How do you want your journal files to be named? |
Today's Journal Project File Name Template | string | journal/${month}/${date}.md | How do you want your project journal files to be named? |
Today's Journal Month Format | string | YYYY-MM | How would you like your month variable formatted for use in directory or file name template? |
Use Alternate File Watcher | boolean | false | If your board won't update when you edit files, then try the alternate file watcher |
Zoom Level | Number | 1 | Set the default zoom level on startup. min: .2, max: 2.5 |