Skip to content

Latest commit

 

History

History
374 lines (227 loc) · 64.7 KB

usage.md

File metadata and controls

374 lines (227 loc) · 64.7 KB

Using Lists

The apps for macOS and Android and the web interface work on the same data and offer the same actions; where a platform differs, the section says so. Installation is described in the README.

Lists and views

A task belongs to one list. Inbox always exists and takes everything that has no list.

People who do not use Inbox can hide it: Settings → General → Show Inbox, on macOS in the Sidebar group. Hiding asks for a list. When Inbox holds open tasks, Move and Hide sends them, with their subtasks, to the end of that list, and Hide Without Moving leaves them where they are. Hiding also sets the list for new tasks to the list used last and makes the chosen list the one used last; Edit → Undo on macOS or Undo in the notice on Android takes all of it back. Hiding needs at least one list that is not archived. The setting syncs to all devices. While Inbox is hidden its row is gone, except when open tasks reach it anyway (from another device, over CalDAV, or after Hide Without Moving): then the row shows with its counter until they are moved out. An import puts tasks without a list into the default list for new tasks. The web interface keeps showing Inbox.

Each list has a name, a colour, an icon, a sort order (manual, by due date, by priority, by title), a switch for showing completed tasks, and defaults for new tasks: a priority and an optional due date of today. Lists can be archived and brought back. These settings sync with the tasks. A list is created with the "+" next to the heading Lists, or from the File menu on macOS, and the lists are put in order by hand.

The fixed views next to the lists:

View Shows
Inbox tasks without a list
Today tasks due today or earlier, and tasks without a due date whose start date has come; on macOS and Android in two groups, Overdue for the tasks whose due date has passed and Today for the rest
Upcoming tasks with a future date, by day
All every open task
Completed finished tasks and the record of each finished repeat, tasks marked "won't do" among them; Clear… at the bottom removes those older than a month, older than a year, or all of them
Won't do the part of Completed that was closed as "won't do"; it has no Clear… of its own
Trash deleted tasks; they can be restored until the trash is emptied by hand

On macOS, Settings → General → Sidebar says for each built-in view other than Inbox (Today, Upcoming, All, Completed, Won't do, Trash) when it has a row in the sidebar: always, when it holds something, or never. The row of Inbox follows Show Inbox above; a choice of "never" for Inbox made before that no longer applies. Today, Upcoming and All start as "always"; Completed, Won't do and Trash appear when they hold something. A view without a row is not opened from the Go menu or by its key (⌘1–⌘6) either, and when the row of the view on screen goes away the app goes to Inbox. It is a setting of that Mac and does not sync. It is not the per-list switch "Keep completed tasks in this list" (context menu of a list → Configure…), which decides whether finished tasks stay at the end of that one list.

On macOS a click on the heading of Lists, Tags, Projects or Filters in the sidebar folds that section and unfolds it again; the chevron at the right of the heading shows which. A folded section keeps only the row of the view on screen, when that view is one of its rows, and the "+" of its heading still creates a list, a project or a filter. What is folded is a setting of that Mac and does not sync.

Search looks through titles and notes in all lists. On macOS it stands behind the magnifier at the top right of the window: a click on it or ⌘F opens the field, and Esc clears and closes it.

Tasks

Only the title is required. A task can also have notes, a start date, a due date, a priority, tags, a repeat rule, a reminder, attachments and subtasks.

In the list on macOS and Android a task takes one line, and two in a view that mixes lists. The priority is a thin bar after the checkbox: red for high, orange for medium, blue for low. Before the title stands the mark of a project. After the title stand small marks for what is set: a repeat, a note, attachments, subtasks; in a view that mixes lists (Today, Upcoming, All, a tag, search, a filter) the name of the list of the task stands under the title in a smaller font, in the colour of the list, and for a task of a project the name of the project after it: "Home – Repair". The Inbox is a list like the others here: its tasks carry "Inbox". The marks carry no text; the note, the files and the subtasks are read in the card, and so are the start date, the tags and the list. The due date stands at the right edge, in red when it has passed. Where the heading of the group already names the day, in Today and in Upcoming, only the time is written. On Android the rows of a group stand in a rounded card, the mark is a circle that fills in when the task is done, the title of a done task is greyed out rather than struck through, and the due date is a small pill under the title, after the list, so a row with a date takes two lines in any view. The headings of groups are pills too, Overdue in red, and new tasks come from the New task button at the bottom right. The title itself takes one line: a title that does not fit ends with an ellipsis, and the card of the task shows the full title, wrapped over as many lines as it needs. Return in the title still finishes the edit. What is being typed into the title or the note of an open task is saved when the app quits or goes to the background, on macOS and on Android.

  • Dates are a day or a day with a time, without a time zone: "tomorrow at 9:00" stays nine in the morning after a flight. A task with a start date in the future is hidden from Today until that day.
  • Priority is none, low, medium or high.
  • Tags are created by typing them. A tag is one word of at most 196 bytes: 196 Latin letters or 98 Cyrillic ones. A longer tag is refused with an error, and an import skips it and says how many it skipped. A tag that no task carries disappears from the sidebar.
  • Attachments are files and images in any number. Once downloaded to a device they open without a network. A file whose name does not tell its type is shown by its content: "Image" that holds a JPEG is listed as "Image.jpg" and opens as a picture. A downloaded file can be saved outside the app and handed to another one: Save As… under the ⋯ button of the file on macOS, or a drag from the card to Finder; Save to…, Share and Open in another app in the ⋮ menu of the file on Android, where the viewer of an image or a PDF offers saving and sharing as well. In the web interface a file is added with "Attach file" in the card of a task. A task with more than one file saves them all in one action: Save All… in the menu of a file or of the task on macOS asks for a folder and writes every file there; Save all to… in the ⋮ menu of a file or of the task on Android does the same, and Share all hands every file to another app. Nothing in the folder is replaced: a file whose name is taken is saved next to it under a free name, such as "Image 2.jpg". Files that are not downloaded yet are downloaded first; a file that could not be downloaded or written is named in a message, and the rest are saved. A task reaches the other devices before the content of its files: the attachment is listed as not downloaded yet and arrives a little later by itself. A click or a tap on such an attachment downloads it right away and opens it; in the web interface the server fetches the file from the storage first. When the file has not reached the storage yet, its row says that the download failed, and the next click tries again. The sync icon, and the sync button of the web interface, tell how many attachments still wait. With CalDAV sync, attachments up to 5 MB are synced, up to 20 MB per task; the rest stay on the device they were added on. An image or a PDF opens inside the app: on macOS a click on the name or Space on the selected file shows it in Quick Look, and the context menu still opens it in the default app; while a file is selected Space belongs to it and not to the task, and Esc closes the card; on Android it opens full screen, where an image zooms with two fingers or a double tap and a PDF scrolls page by page; on the web PNG, JPEG, GIF, WebP and PDF open over the page, and every other file is downloaded. Images show a thumbnail in the task card. A file above the limits of the device is refused with an error that names the limit: by default 512 MiB for one file and 2 GiB for all files of one task. The web server takes its limits from LISTS_MAX_FILE_MB and LISTS_MAX_TASK_MB, where 0 means no limit (see self-hosting.md). Files are read and written in pieces, so memory does not grow with the size of the file, and on macOS adding a file and importing run in the background, so the window stays responsive. The web server sends a file from its disk without reading it whole: a request for a byte range, such as the one a PDF viewer makes, is answered with that part of the file.

On macOS a task opens in place in the list as an outlined card; on Android it opens as a bottom sheet over the list. On macOS and Android the card has one row of fields: a field that is set stands at the left as a chip with its value, a field that is not set is a light icon at the right. A tap on either opens the choice; a tap on the chip of a tag removes the tag. On Android subtasks have a small round mark; a completed one is filled in and its title turns grey. Dragging the handle of the sheet up stretches it to the full screen without changing what it shows; dragging the handle down brings it back to the height of its content, and one more drag down closes it.

On Android a tap on a date opens one card. Today, Tomorrow and In a week at the top set the day with one tap. Below them is the month: tap a day to choose it, and the arrows to move to another month. The Time row under the month shows the time of the task or "Off"; tap it to type the hour and the minute, or to remove the time. Done saves the day, with or without a time; Remove takes the date away. The same card opens after a swipe to the left on a row and for a reminder, where the time is always asked for.

On Android the title, the note, a subtask and the name of a list or a filter start with a capital letter when the keyboard has auto-capitalisation turned on; a tag, the search and the tag and text fields of a filter are typed as they are. Suggestions and autocorrection follow the settings of the keyboard.

On macOS several tasks of a view can be selected and changed together. A click with ⌘ adds a row to the selection or takes it out, a click with Shift selects the range from the row selected before, Shift with ↑ or ↓ grows and shrinks it, ⌘A selects every row, and Esc goes back to one. A right click on one of the selected rows opens a menu for all of them: Complete, Due, Start, Priority, Move to list, Tag, Won't do, Delete. Space, ⌫, ⌘Return, ⌘T and ⇧⌘T act on all the selected rows as well. A view chosen in the sidebar takes the keyboard, so the arrows select its tasks at once; its row in the sidebar keeps its colour. One ⌘Z takes the whole action back. Dragging one of the selected rows takes all of them; dropped on Inbox or a list in the sidebar they move there, on a project they become its tasks at its end, and on Today they get today as the due date. A task with subtasks does not go into a project. One ⌘Z takes the drop back too. In the Trash the menu of several selected tasks is Restore. On Android the same is done from "Select" in the menu of a task. In the web interface "Select" in the header opens the same mode: tap the rows, then choose an action in the bar at the bottom; one "Undo" takes it back.

On macOS Return on the selected row, or a double click, opens its card with the cursor at the end of the title, and Esc closes the card and hands the keyboard back to the list with the same row selected. Esc closes the card of the selected row as well when the list has the keyboard, after a click on the chevron or inside the card. The chevron at the end of a row opens the card; an open card has no chevron and is closed by Esc, by Return or a double click on its title row, or by opening another task. In the card what is set (dates, repeat, reminder, priority, tags) stands at the left as chips with their values, and what is not set at the right as light icons: a click on an icon sets the field. One card is open at a time. Opening another task, or moving to another row with a click or the arrow keys, closes the open card and keeps what was typed in it. A task stays open while one of its subtasks is selected. The card of a new task closes an open task, and opening a task closes the card of a new one the way Esc does.

On macOS ⌘N, or the "+" button at the top right of the window, opens the card of a new task as a row of the list, at the place the task will take (see Quick entry), with every field at hand: title, notes, start date, due date, repeat, priority, tags, list and files. Return in the title creates the task, and so does ⌘Return from any field of the card. Esc closes the card and keeps the task when it has a title, like Return in the title; there is no cancel, and ⌘Z right after takes a new task back to the trash. What is set stands at the left of the row of fields as a chip with its value; what is not set stands at the right as an icon.

Files get into a card on macOS in three ways: the paperclip button, dropping them on the card, and ⌘V with files or an image on the clipboard. This works in the card of a new task, in the quick-entry window and in an open task. ⌘V with text on the clipboard pastes the text as usual.

Return in the notes starts a new line and Esc finishes editing. Settings → Tasks → New tasks can turn that around: Return finishes, ⌥Return starts a new line. ⌘S and ⌘D open the start date and the due date from anywhere in the card; the calendar takes the arrow keys, and Return confirms. In the open date popover one key sets a common choice and closes it: T for today, M for tomorrow, W for a week from now, and a digit from 1 to 9 for that many days ahead. + and − move the day selected in the calendar forward and back and leave the popover open; ⌫ removes the date. The keys are the same in any keyboard layout, and each is shown next to its button. While the time field has the keyboard, they go to it, and Return still confirms. ⇧⌘R opens the repeat the same way. Esc in an open popover closes the popover and the card at once; in the quick entry window it closes the popover alone.

Notes in Markdown

Notes are read as Markdown and styled while you type; there is no separate preview. Headings (#), bold (**), italic (*), strikethrough (~~), inline code and code blocks, bullet and numbered lists, block quotes (>), a horizontal rule and links are shown formatted. The markup characters are hidden everywhere except in the paragraph, heading or list item the cursor is in, where they are shown dimmed. The note is stored exactly as typed, so sync, CalDAV and search see the plain text.

  • - [ ] and - [x] are shown as a checkbox. A click on macOS or a tap on Android toggles it and saves the note. These checkboxes are part of the text; they are not subtasks.
  • Return at the end of a list item starts the next one, with the next number in a numbered list and an empty checkbox in a task list. Return on an empty item removes its marker. A block quote continues the same way.
  • A link opens with a click on macOS and with a tap on Android, also while the note is being edited. To change the text of a link, put the cursor next to it and move in with the arrow keys; a long press on Android selects a word of it. Only http, https and mailto addresses are links; the scheme may be typed in any case, so Https://example.org, as a phone keyboard starts a sentence, is a link too.
  • A table is laid out as a grid: aligned columns, a header row, the alignment set by :---, :---: and ---:. On macOS and Android the grid shows while the cursor is outside the table; put the cursor into it and you edit the text as typed. There a table wider than the note, or one inside a list item or a quote, stays as typed. An image is shown as a link with its text and is not loaded. HTML is shown as typed.

In the web interface a note is shown formatted until you click it; the click opens the plain text for editing, and leaving the field saves it. Checkboxes are not toggled there. Quick entry on Android and the share sheets keep a plain text field.

A completed task does not leave its view at once: it stays where it was, struck through and dimmed, for the time chosen in Settings → General → "Completed tasks leave the view" (on macOS: Settings → General → Completed tasks → Leave the view; at once, after 5 or 15 seconds, or at the end of the day; after 5 seconds unless changed; in the web interface the choice is under Settings at the bottom of the sidebar), and a tap on its mark during that time reopens it. In a list that keeps its completed tasks, in a project and in a filter that shows all tasks it then moves to the end instead of leaving. "At the end of the day" keeps it until midnight on the clock of the device; in the web interface, of the browser. A time in minutes chosen in an earlier version stays in force, and in the list of choices, until another one is picked; a device that still runs such a version keeps completed tasks for 5 minutes while one of the new choices is in force. The setting is shared by all devices and syncs; over CalDAV it does not travel, so there it is set on each device.

The setting covers repeating tasks too. A completed repeating task moves to its next date at once and shows up wherever that date puts it, while the record of the completed occurrence stands in its old place, struck through, for the same time. A tap on the mark of the record takes the completion back.

A task that will not be done, but should not be deleted either, is closed as "won't do": the item Won't do in the context menu of a task on macOS, in the long-press menu of a task on Android, and the button in the card in the web interface. The mark then shows a cross in place of the tick. From there the task behaves like a completed one: it stays in view for the same time, a tap on its mark reopens it, its open subtasks get the same mark, and a repeating task moves to its next occurrence, leaving a "won't do" record. Such tasks are listed in Completed and in the Won't do view. They are left out of both numbers of the "done/total" counter of a project and of a task with subtasks. Over CalDAV such a task has STATUS:CANCELLED, and a task cancelled in another CalDAV app arrives as "won't do". A device with an earlier version of the app shows such a task as completed.

Every change of a task can be undone, the last one first: creating, the title and the notes, the dates, the reminder, the repeat, the priority, the tags, completing and "won't do", reopening, deleting and restoring, moving to another list, into a project or to another place in the list, adding and removing a file. On macOS it is ⌘Z (while a text field has the keyboard, ⌘Z first takes back the typing in it). On Android a bar with Undo appears after every change but an edit of the title or the notes, and Undo stays in the menu at the top right after the bar is gone. In the web interface the same bar appears, and Ctrl+Z or ⌘Z outside a text field takes the last change back. Undo brings back the subtasks that were closed together with a task, puts a moved task back in its former place, and sends a created task to the trash; a task that was changed since, here or on another device, is left as it is. The history is kept while the app runs, the last 100 changes; in the web interface each signed-in browser has its own. Completing is also undone by tapping the mark again while the task is still in the view; the mark reopens the task alone. Emptying the trash and clearing Completed ask for confirmation: both remove tasks for good. Deleting a list asks too, on macOS and in the web interface: undo does not bring a list back, and its tasks are restored from the trash one by one. Clearing takes finished tasks with their subtasks and the records of finished repeats; open tasks and the trash stay as they are. Over CalDAV the cleared tasks end up in the trash of the other devices instead of disappearing there.

Subtasks and projects

On macOS subtasks stay folded behind a "Subtasks 1/3" line in the open card, and a task without subtasks does not mention them: add the first one from the subtask icon in the row of fields or with Add subtask in the context menu.

The card of a new task takes subtasks as well, in the main window and in quick entry: click the subtask icon in the row of fields and type them one by one, Return (Done on Android) after each. They are created with the task when the card is saved; what is still in the field becomes the last one. On macOS Esc closes the card and keeps the task, like Return in the title; a task made by mistake is deleted, or taken back with ⌘Z right away.

A subtask is a line with a mark and a title, and nothing else: it has no note, dates, repeat, reminder, priority, tags, attachments or subtasks of its own. Type its title under the task to add it. Rename it in its line: on macOS press Return on the selected subtask or double-click it, on Android tap its title. Its menu (a right click on macOS, a long press on Android) holds rename, complete, won't do and delete. A subtask stays with its task: it is not moved to another task or list and does not become a task. It never stands in Today, Upcoming or another view on its own; search finds a task by the title of its subtask and shows the subtask under it. Completing a task completes its open subtasks; reopening it leaves them as they are.

Subtasks made by an earlier version, by an import or by a CalDAV client may carry dates, notes, tags, files or subtasks of their own. Lists removes those fields and raises a subtask of a subtask one level, right after its former parent. Before it does so for the first time it makes a backup of the data (see Backups).

A project is a top-level task marked as a project. It appears in the sidebar with a "done/total" counter and opens as its own view. A project is made from a task with Make it a project, or created at once: on macOS with New project in the "+ New list" menu at the bottom of the sidebar, the "+" in the heading of Projects or File → New Project…; on Android with New project under the projects in the drawer; in the web interface with "+ New project" under the projects. Only the title is asked for. The project goes to the list on screen, to the list of the open project, or, where the view has no list, to the default list for new tasks; the defaults of that list for new tasks are not applied to it. Its view opens at once. A task entered in that view becomes a task of the project: a full task with dates and all other fields, which can have subtasks of its own. A project is also chosen wherever a task's list is chosen: in Move to list on macOS, Android and in the web interface, in the list of the new-task card and of quick entry, in Move to list of the task card on Android and in Move to of the task card in the web interface. The projects stand under the lists, under the heading Projects. A task moved into a project goes to its end and to its list; a new task for which a project is chosen is created in it. Choosing a list for a task of a project takes it out of the project. A project, a task with subtasks and a task already in that project do not go into it: for one task such an item is dimmed, and of several selected tasks they are skipped. In quick entry @name picks a list only, not a project. A project that has tasks is not turned back into a plain task; an empty one is: from the context menu of the project in the sidebar on macOS, a long press on the project in the drawer on Android, and the "Turn back into a task" button above the tasks of the project in the web interface.

In the sidebar a project looks like a large task: in place of an icon it has a round mark, filled in as its tasks get done. A click on the mark completes the project whatever the state of its tasks; the tasks still open are completed with it. The same is the item Complete Project in the context menu of the project on macOS and in the long-press menu on Android, and the "Complete project" button above the tasks of the project in the web interface. A completed project leaves the sidebar and is found in Completed and in search. One undo (⌘Z on macOS, Undo in the bar on Android and in the web interface) brings back the project and the tasks completed with it; tasks completed before stay completed.

A project is shown only in the sidebar: it is not a row in its list, the Inbox, All, Today, Upcoming, a tag or a filter, and the counters of those views leave it out. Its own dates, tags and priority do not bring it there; Today and Upcoming show the tasks of the project that have dates.

The dates of a project apply to its tasks. A task without a due date of its own goes by the due date of the project: it is in Today, Upcoming, the overdue count and filters by that date, and its reminder comes on it. In the row such a date is dimmed, with the project's folder mark before it; a task with its own due date keeps it, even when it is later than the project's. A task with a date does not start before its project: until the project's start date it is not in Today, and Upcoming shows it on that day. A task with no dates at all, in a project without a due date, stays without dates. These dates are worked out when the tasks are shown: the card of the task shows and changes only its own dates, moving the project's dates moves its tasks at once, and sync, CalDAV included, carries only the task's own dates. Making a task a project takes its row away; turning an empty project back into a task brings the row back to its place. Completed, Won't do, the trash and search still show a project as a row, so a finished or deleted project can be found and restored.

Repeats

A repeat is set in the card of a task. On macOS the card of a new task, in the main window, in the quick-entry window and in the menu bar, always has a Repeat chip. In an open task the chip appears once a rule is set; until then it is an icon at the right of the row of fields. ⇧⌘R opens it from anywhere in either card. On Android the card of a new task and the quick-entry window have a Repeat icon, and in the editor Repeat is a light icon in the row of fields until a rule is set. The rule counts from the due date, or from the start date when there is no due date.

Presets: every day, on weekdays, every week, every two weeks, every month, every quarter, every year.

A custom rule repeats every N days, weeks, months or years. Weekly rules take a set of weekdays; monthly rules take a day of the month or "the first … fifth, last" weekday. A rule ends never, after N repeats or on a date, and counts either from the due date or from the day the task was completed. The same choice is in Custom… on macOS, on Android and in the web interface, where it opens under the fields of the task. Day 31 in a shorter month means its last day.

Completing a repeating task moves its dates to the next occurrence, reopens its subtasks and adds a record to Completed. After the last occurrence the task completes like any other.

The completion of a repeat can be taken back like any change: ⌘Z on macOS, Undo in the "Moved to the next occurrence" bar or in the menu on Android, Undo or Ctrl+Z in the web interface, or a tap on the mark of the record, while it still stands in the view or later in Completed and Won't do. The task gets back its dates, its reminder and the repeats it had left, the subtasks that were done before are done again, and the record leaves Completed. Taking a completion back this way is itself a change that can be undone. Once the task has moved on again, or its date was changed, the earlier completion is no longer taken back: its record shows the repeat icon in place of the mark, and the icon does nothing.

On Android the end date of a repeat cannot be set; the web interface offers the presets only.

Quick entry

One line becomes a task. Recognized parts are removed from the title and shown as chips before saving. Nothing has to be typed as text, though: the quick-entry window carries the same fields as the task card, and a value set in a field wins over one read from the title. Recognition can be turned off in Settings; the title is then kept as typed. Files can be added there too: on Android the paperclip in the card picks any number of them. A task that cannot be saved is not half saved: the card stays open with everything typed and the error is shown, so Save can be tried again. A file that could not be attached is named in the message, and the task is kept without it.

Typed Meaning
#tag tag
@List list
!, !!, !!! low, medium, high priority
today, tomorrow, a weekday due date
DD.MM, DD.MM.YYYY due date
HH:MM time of the due date

Dates are understood in English and in Russian. Example: buy milk tomorrow 18:30 !! #home @Shopping creates "buy milk" due tomorrow at 18:30 with medium priority and the tag "home" in the list Shopping.

Settings → Tasks → New tasks (Settings in the drawer on Android) chooses the list a task goes to when neither the line nor the view names one: Inbox, the list used last, or a fixed list. The choice syncs to all devices; which list was used last each device remembers by itself. When the chosen list is archived, or Inbox is chosen while hidden, or the device has not used a list yet, the task goes to Inbox, and while Inbox is hidden to the first list that is not archived. On macOS the share sheet starts with the same list, except that it does not know the list used last.

In the quick-entry window on macOS a strip at the bottom shows the list the task goes to and holds Cancel and Save. The quick-entry window starts the note with the clipboard: copy a link or a piece of text, open the window, and it is already in the note while the cursor waits in the title. On macOS that text is shown as a block of at most three lines marked "From the clipboard", with a button that removes it; a click on the block opens it as an ordinary note. This applies to the window opened with the global shortcut on macOS and from the launcher shortcut or the tile on Android; Share and the text-selection menu bring their own text. Each copy is used once, so opening the window again gives an empty note. Only text of up to 2000 characters is taken; files, images, longer text and what a password manager marks as hidden are left alone. The button next to the note removes the text in one go until you edit it. Settings → Tasks → New tasks → "Start the note with the clipboard in quick entry" turns this off, and the clipboard is then not read at all. The setting belongs to the device and does not sync. Android 12 and later show their own notice when an app reads the clipboard; it appears once per copy.

Where the entry field is:

  • macOS: the card in the main window (⌘N); a global hotkey that opens a small window over any app (⌃⌥Space by default, changeable in Settings → Tasks → Quick Entry); the menu bar item, which also lists today's tasks; the share extension; the Services menu; the lists://add?text=… URL.

On macOS the hotkey can work without Lists being open. Settings → General → At login → "Quick entry without opening Lists" starts a small helper at login. It has no icon in the Dock or in the menu bar: it waits for the hotkey and shows the same quick-entry window, with the settings of Lists. While Lists is running, Lists answers the hotkey itself. The helper does not sync and sets no reminders: a task written through it is on this Mac at once, and reaches the storage and gets its notifications when Lists is opened. Settings → General → At login → "Open Lists at login" starts Lists itself with the system. Both switches are off by default and show what the system holds: Lists removed in System Settings → General → Login Items shows as off, and when the system wants your approval, or the helper is not allowed to run in the background there, a line under the switch says so and opens that place. The helper is started by a file in ~/Library/LaunchAgents; turn the switch off before you delete Lists, and the file goes with it.

  • Android: the "+" button on the main screen, which opens the card of a new task as a bottom sheet and keeps it open for the next task after Done on the keyboard or Save (back or a tap outside closes it). The card is compact: the title, the note, a row of fields and a strip at the bottom with the list the task goes to and Save. In the row the start date, the due date, the repeat, the priority and files are light icons at the right until they are set, and chips with their value at the left after that; what is read from the title stands there as chips as well. The note grows with its text up to five lines and scrolls inside itself after that. Dragging the handle of the card up expands it to the full screen, where the note has room and the fields are rows with names; dragging the handle down brings it back, and nothing typed is lost. A drag down on the compact card closes it. Closing the card without saving discards what was entered; for three seconds a bar at the bottom offers Restore, which opens the card again with everything in it. Besides the button there is a small window over the current app from Share, from the text-selection menu, from the launcher shortcut and from the quick settings tile. On Android 10 and newer Lists also stands in the row of quick targets at the top of the share sheet, once it has been started; that target opens the same window. Its card has the same handle. That window turns with the app under it, and in landscape its card is always expanded.
  • Web: the New task field in the task list.

A new task takes its place from the view it is created in: the list on screen, the project it is added to or chosen for it in the card, or the default list from the settings where the view has no list of its own (Today, Upcoming, All, a tag, a filter). The view sets nothing else. A task created in Today has no due date, and a task created in the view of a tag has no tag, until you set them in the card or type them in the title; without them the task is not in that view once it is saved.

With manual order a new task goes to the top of its list, or of its project in the view of a project. On macOS, when a task of that list is selected, the new task goes right under it, and under the parent when a subtask is selected. With another sort order, and in Today, Upcoming, a tag or a filter, the sort order places it. Quick entry, the menu bar, the Services menu, lists://add and tasks shared from other apps put the task at the top of its list. Subtasks are added at the end, and a duplicate goes right after the original. The defaults of a list, a priority and "due today", stand next to their icons in the card on macOS and Android before the task is saved. They follow the list chosen in the card and can be changed or removed like a value you picked, and what the title says wins over them.

Saved filters

A filter is made with the "+" next to Filters in the sidebar on macOS (or File → New Filter…), with New filter in the drawer on Android, and from the sidebar in the web interface. It is a named view with conditions that must all hold: date (any, overdue, today, the next N days including overdue, no date), lists, tags (all of the chosen ones), a minimum priority, state (open, completed, won't do, all) and words in the title or notes. Four come ready: Next 7 days, Overdue, High priority, No date.

Filters sync like the rest of the data. Over CalDAV they are kept in a property of the Inbox calendar and are lost on servers that do not store such properties.

Sync

Open Settings → Sync and choose the kind:

  • WebDAV: address, user name and password. For Nextcloud and similar servers use an app password.
  • CalDAV: address, user name and password. Lists become calendars, and tasks stay visible to other CalDAV apps.
  • Folder (macOS and the web server): a directory, for example one that another tool keeps in sync. Android does not offer it. Changes that the other tool brings into the folder are picked up within a few seconds.

On macOS and Android, Test connection asks the server with the address, user name and password as typed, before anything is saved, and says whether it answered. For WebDAV it also says when the folder at the address does not exist yet and the first sync will create it. Saving does not require the test.

Use the same kind and the same address on every device. After that sync needs no attention: a small icon shows the state, and an error does not block work. With WebDAV and a folder the content of attachments moves after the tasks themselves; the icon on macOS and Settings → Sync on both apps show how many attachments still wait, and a file that the storage refuses does not stop the rest. On Android sync also runs in the background every 15 minutes, and a change made on the phone is sent even if the app is closed right after.

The content of an attachment stays while its task is in the Trash, so a restored task gets its files back. Once the task is deleted for good (Empty Trash, clearing Completed) or the attachment is removed from a task, the file is deleted from the device. With WebDAV and a folder it is deleted from the storage and from the other devices too; with CalDAV, whose Trash is not shared, each device deletes it when the task is deleted for good there.

A phone that restricts background work puts these runs off. Settings → Sync → Background work shows whether Lists is restricted; tap it to let Lists run without battery restrictions. The app asks once by itself: when sync is turned on, or when it is opened with sync already on. Do the same for the ntfy app if you use it, and on phones that have an "autostart" setting allow it for both.

Encrypting the storage

A WebDAV storage or a folder can be encrypted with a passphrase you make up, so that whoever runs the storage reads nothing and cannot slip in a change. CalDAV stays as it is, so that other calendar apps keep reading the tasks.

  • Turn it on on a Mac or a phone: Settings → Sync → Encrypt the storage…, the passphrase twice. The device syncs first, attachments included, then writes everything encrypted and removes the copies in the clear. This takes as long as downloading the attachments it does not have yet.
  • Other devices stop syncing and say that the storage is encrypted. Put the passphrase in Settings → Sync → Storage passphrase and save; the web server takes it from LISTS_SYNC_PASSPHRASE. The passphrase is kept where the storage password is kept.
  • Change it with Settings → Sync → Change passphrase… on a device that has the current one. Only the key file is written again. The other devices ask for the new passphrase the next time the app starts.

A forgotten passphrase cannot be recovered, and the data in the storage is lost with it. The copies on the devices stay: connect one of them to a new, empty storage and encrypt that one. Encryption cannot be turned off; to go back, connect the devices to a new storage. The names of the log files (which device, which number), their sizes and times stay visible.

Faster delivery

Storage cannot tell a device that something changed, so an edit made elsewhere waits for the next run: up to a minute in an open app. To shorten the wait, a device that uploads a change can ask the others to sync, and they do so within seconds.

  • Mac app and web server: give them the address of an ntfy server, the public https://ntfy.sh or your own, in Settings → Sync → Push server and in LISTS_PUSH_SERVER.
  • Android: install a UnifiedPush app such as ntfy, open it once, then turn on Settings → Sync → "Sync at once after a change elsewhere". This works with the app closed too.

The request carries no data, only "sync now"; tasks still travel through your storage. The Mac app and the web server that use the same ntfy server listen on one topic with a random name, so one request reaches them all; they agree on the name through the storage, with nothing to set up. A phone keeps the address its UnifiedPush app gave it and gets a request of its own. On a server open to everyone the name of the topic is the only protection: the ntfy server can see when you edit, not what. Devices may use different servers, as long as each can reach the others'; a device on another server keeps a topic of its own. The requests go out together after the sync run has finished, so an address that does not answer does not hold the run back.

An ntfy server that requires sign-in

A server closed to anonymous users takes an access token. Create one on the server with ntfy token add <user> or on the account page of its web app. Lists does not take a user name and a password.

  • Mac app and web server: in Settings → Sync turn on "The push server requires sign-in" and put the token in Push token; the web server takes it from LISTS_PUSH_TOKEN.
  • Android: the ntfy app receives under the account set in it, so Lists needs nothing for that. To let the phone ask the other devices to sync, turn on Settings → Sync → "ntfy server that requires sign-in" and fill in Push server and Push token.

On the public ntfy.sh and on any server open to everyone leave these switches off: the fields behind them are not needed, and turning a switch off clears them.

The token is sent only to the server named in the same settings: when the device subscribes, and when it asks a device that listens on that server. Requests to any other server go without it, so keep all devices on the one server. The user behind the token needs read and write access to the topics, for example ntfy access <user> '*' rw; the topics of the Android ntfy app start with up.

When the server turns the token down, the sync settings say "The push server refused access", and the web server writes that to its log. Sync itself goes on as scheduled. The Mac keeps the token in the keychain and Android encrypts it with a key from the system keystore; it is never written to the storage.

On the Mac the password of the storage and the token of the push server are in one item of the login keychain, named "Lists". A release that is not signed with a Developer ID is another app to the keychain after every update, so the first launch after an update asks for the password of the keychain once; "Always Allow" lasts until the next update. The first launch of the version that brought the one item asks twice, once for each secret kept the old way, and moves them over.

When a device that already has tasks is connected to a storage that has tasks as well, Save and sync on macOS and Android asks which side to keep:

  • Merge keeps the tasks of both sides. This is what happens without the question, when one of the sides is empty.
  • Use the data of the storage erases the tasks, lists and filters of this device and reads them again from the storage. Changes that were not synced are lost.
  • Use the data of this device puts the state of this device over the storage and every other device. What this device does not have goes to the Trash on all devices and can be restored from there; edits made elsewhere are undone. An edit that another device made before and uploads only later is still merged in.

The two replacements ask for a confirmation first; Cancel leaves the settings unsaved. To get the question for a storage that is already connected, turn sync off, save, and connect again. The web server, whose storage comes from the environment, always merges.

Edits are saved locally at once. Two devices that change different fields of one task both keep their change; when they change the same field, the later edit wins. How the two kinds compare is in the README.

Notifications

Each device has its own notification settings, and they do not sync:

  • whether to show notifications at all;
  • how long before a timed due date to remind: at the time, from 5 minutes to a day before. Several can be on at once, for example a day before and again 15 minutes before. Until you choose, the reminder comes at the time the task is due;
  • at what time to remind about tasks due on a day;
  • an optional summary of the day and its time;
  • the sound. On macOS turn it on or off and choose the standard notification sound or one of the system alert sounds; a system sound plays when you choose it. On Android tap "Sound" to open the system settings of the "Reminders" channel and choose the sound there.

A reminder set on a task itself replaces the one derived from its due date.

The web interface notifies through the browser: open "Notifications…" in the side panel and turn on "Show notifications in this browser". The same settings apply, except the sound, which the browser decides. This needs a page opened over HTTPS; on iPhone and iPad, Lists has to be added to the Home Screen first. A click on a notification opens the task. Signing out stops the notifications of that browser. Without a connection to the server the page still opens and says "The server cannot be reached." with "Try again".

On macOS the system decides whether Lists may show notifications. When it does not allow them, Settings → Notifications shows "macOS does not allow notifications for Lists." with the button "Open System Settings…": click it and allow the notifications of Lists there. Until then no notification is shown, whatever the other settings say.

On macOS the item in the menu bar and the icon in the Dock can be switched off: Settings → General → Menu bar and Dock. "Show Lists in the menu bar" is on by default. "Hide Lists from the Dock" can be chosen while the item in the menu bar is shown; Lists is then opened from that item ("Open Lists", "Settings…"), is not among the apps of ⌘Tab and shows no menus in the menu bar, while the keys of its commands still work in its windows. Switching the item in the menu bar off brings the Dock icon back. Under "Open Lists at login", "Show the window at login" decides whether Lists started by the system at login shows its window or stays hidden until it is opened.

A second global shortcut on macOS shows the main window from any app. It has no key by default: record one in Settings → Tasks → Show Lists. It brings back Lists hidden with ⌘H, a window minimised to the Dock and a closed window; pressed while the main window of Lists is in front, it hides Lists. It works while Lists is running: the helper of quick entry does not listen to it.

On macOS the icon in the Dock carries a count of tasks. While Lists is hidden from the Dock there is no count. Settings → Notifications → "Count on the icon" chooses what is counted: "Today" (the open tasks of the Today view, the overdue ones among them; the default), "Overdue tasks" or "Do not show". With nothing to count the icon has no number. The choice belongs to the Mac and does not sync.

On Android, Settings → Notifications → "Today's tasks in the notification shade" keeps a permanent notification with the open tasks of Today: their count, the first five titles and a "New task" button that opens quick entry. It is off by default and does not depend on "Show notifications". It is silent and has channels of its own, "Quick add" and "Quick add, with the count on the icon", which the system settings can hide apart from the reminders. It comes back when it is swiped away, after a restart of the device and after an update of the app; only the switch removes it.

On Android the launcher icon can carry a count as well: Settings → Notifications → "Count on the icon" offers "Today", "Overdue tasks" and "Do not show", and it is off by default. Android lets an app mark its icon only through a notification, and the count comes with the notification of today's tasks described above: there is no separate notification for it, and the number is there only while that notification is on. With "Overdue tasks" chosen the heading of the notification says "Overdue: N" as well. With nothing to count the icon has no mark. What the icon shows is up to the home screen: some draw the number, others a dot and the number in the menu that opens when the icon is held. A reminder that still lies in the notification shade is counted by the home screen on top of this number. The choice belongs to the device and does not sync. After an update from a version that had a notification for the count alone, a person who had only the count gets the notification with today's tasks turned on once, so that the number stays.

On Android 13 and newer a notification arrives at its minute only when "Alarms & reminders" is allowed for Lists; the same goes for the renewal of the notification with today's tasks, and of the count on the icon with it, right after midnight. Until then the notification settings show "Reminders may come late": tap it and allow. Without it the system may deliver a notification up to an hour late.

Some phones delay notifications even with "Alarms & reminders" allowed: on a OnePlus with Android 16 they came minutes late all the same. For such a phone turn on Settings → Notifications → "Reminders as alarms". Lists then sets each reminder the way an alarm clock does, which the phone leaves on time. The system may show an alarm icon in the status bar and the time of the next reminder where it shows the next alarm; on the OnePlus neither appeared. The switch is off by default, works only while "Alarms & reminders" is allowed, belongs to the device and does not sync.

Scripts and automation

The web server can be reached from Shortcuts, Tasker, Raycast or a script with an API token instead of the password. "API tokens…" in the side panel of the web interface makes one: give it a name and choose "Read" or "Read and write". The token is shown once, so copy it then. Revoke a token in the same list when a script no longer needs it. The requests and the operations a token reaches are described in api.md.

Calendar events in Today

Today can show the events of the day from the calendars of the device, in a muted block above the tasks. It is off until you turn it on, each device has its own setting, and it does not sync:

  • macOS: Settings → Tasks → Calendar events → "Show calendar events in Today";
  • Android: Settings → Tasks → Calendar events → "Show calendar events in Today".

Turning it on is when the system asks to let Lists read the calendars; nothing is asked before that. The system gives access to all calendars at once. The list under the switch chooses which of them are shown: take the mark off a calendar to leave its events out. A calendar added later is shown until its mark is taken off.

An event is one line: a bar in the colour of its calendar, the start time and the title. All-day events have no time and come first; timed events follow by their start. An event that began before today has no time either. An event that is over stays until the end of the day.

Events are not tasks: they have no mark, cannot be completed, edited or moved, and are not counted in Today or found by search. On Android a tap opens the event in the calendar app. On macOS a click opens Calendar; it cannot be opened on a particular event.

Events are only read, and only on the device. Lists does not store them, change them or send them anywhere: they are not part of sync and never reach the sync server or the web interface. The web interface, Upcoming and the other views show no events.

If access was refused, the settings say so in a line that opens the system settings: Privacy & Security → Calendars on macOS, the permissions of Lists on Android.

Keyboard on macOS

Keys Action
⌘N new task, as a card in the list
⌘S and ⌘D start date and due date of the open card
T, M, W in the open date popover: today, tomorrow, in a week
1 … 9 in the open date popover: in that many days
+ and − in the open date popover: a day later, a day earlier
⌫ in the open date popover: remove the date
⇧⌘R repeat of the open card
⌘V attach the files or the image on the clipboard to the open card
↑ ↓ select
Enter open the selected task with the cursor in its title; close it when it is open
Tab from the title to the notes, from the notes to the chips of the card, then from chip to chip and back to the title
⇧Tab back through the chips, from the first one to the notes
⌥Tab a tab character in the notes
Space or Return on a chip what a click on it does: its date, repeat or tag popover, its menu, or the removal of a tag
Esc close the open popover of a chip; without one, close the open card and go back to the list
Esc in the card of a new task close the card and keep the task, if it has a title
Esc in the quick-entry window close the window and drop what was typed
⌘Return in the quick-entry window save the task and close the window
⌘Return in the card of a new task create the task from any field
Space or ⌘Enter complete
⌘T due today
⌘1 … ⌘6 views
⌘F search
⌘Z undo
⌃⌥Space quick entry from any app

The settings are in five sections: General (opening at login, the helper of quick entry, the item in the menu bar and the Dock icon on macOS, appearance, text, the rows of the sidebar on macOS, completed tasks), Tasks (new tasks, the shortcuts of quick entry and of showing Lists on macOS, calendar events), Notifications, Sync and Backups. On macOS they are the tabs of the settings window, and the window opens on the tab used last. On Android the settings take the whole screen and start with the list of the sections: a tap opens a section, the arrow at the title or Back returns to the list, and Import… stands under the sections.

Text size (five steps) and typeface (system, rounded, serif, monospaced) are chosen in Settings → General. On macOS Regular is larger than the system size, and Small is the system size; the sidebar grows half as fast as the tasks, so a large size does not crowd its column. On Android Settings → General has Text size with five steps of its own, Normal being the system size, and no choice of typeface; the step multiplies the font size set in the system, so the system setting keeps working and the step corrects it for Lists alone.

Spacing between tasks is chosen next to the text size on both platforms: Compact, Normal (the default) or Relaxed. On macOS a task row of one line is then 26, 30 or 40 points high at the Small text size, which is the system one; Normal is close to Things 3. On Android rows are 48, 52 or 60 dp high, since the mark keeps its 48 dp touch target. The choice belongs to the device and does not sync.

Light and dark

By default the apps look the way the system does, and follow it when it switches between light and dark on a schedule. Appearance chooses otherwise: Same as the system, Light or Dark. It is in Settings on macOS, in Settings in the drawer on Android, and under Settings at the bottom of the sidebar in the web interface. The choice applies at once and to every window, is kept by the device (by the browser in the web interface) and does not sync. List colours and the red of an overdue date are the same in both looks.

Orientation on Android

On a phone the app stays in portrait and does not turn with the device. The quick-entry window is the exception: it opens over another app and may stand in landscape with it. On a tablet and on an unfolded foldable the app turns with the device.

Gestures on Android

The title of the view stands large at the top of the list; the menu, search and the sync icon are in the row above it. A tap on the heading of Lists, Projects, Filters or Tags in the panel folds that section and unfolds it again; a folded section still shows the list, project, filter or tag that is open, and the phone remembers what is folded. The rows of the panel follow the row spacing chosen in the settings. A long press on Inbox, a list or a filter in the panel with the lists opens its settings; while one of them is open, so does Configure in the menu behind the "More" button at the end of that row. Swipe right to complete, swipe left to set the due date. A swipe acts only when the row is let go past 40% of its width: the icon under the row is pale until then, turns bright with a short vibration at that point, and a row let go earlier slides back with nothing changed; a completion shows Undo. A swipe to the right that starts at the left edge of the screen opens the panel with the lists instead. Pull down at the top of a list to sync right away; this works once sync is set up. Long-press for the menu: due date, priority, move to list, add subtask, duplicate, won't do, delete. In Inbox and in a list sorted manually, a long press followed by a drag moves the task to another place, and in the panel a drag moves a list among the lists; let go without moving, the long press opens the menu or the settings as before.

Several tasks can be changed in one action. A long press on a task opens its menu, and "Select" there turns the selection mode on with that task selected. A tap on a row selects it or takes the selection off; a drag over the circles at the right edge selects the rows the finger passes. The bar at the bottom holds "Complete", "Due", "Move to list", "Delete" and, under "More", "Start", "Priority", "Tag" and "Won't do". An action applies to every selected task, closes the mode and shows one bar with the number of tasks it changed; "Undo" there takes the whole batch back. "Done", the cross and Back leave the mode without a change.

Widgets on Android

The home screen takes two widgets with tasks: a small one, 2×2 cells, and a large one, 4×4; either can be resized. When a widget is placed it asks what to show: Today, Inbox or one of the lists. Each widget keeps its own choice, and where the home screen offers to reconfigure a widget the choice can be changed.

A widget shows the name of its view and the open tasks in the order of that view, as many as fit; "N more" stands for the rest. A tap on the mark before a task completes it, and the task leaves the widget; to take that back, open the app. A tap on the name of the view or on a task opens the app in that view. The "+" opens the quick-entry window; the task goes to the default list of quick entry, whatever the widget shows.

A widget follows the light or dark appearance of the system. It is renewed after every change on the device and after a sync that brought changes.

Backups

The apps for macOS and Android keep backups of your data on the device. A backup is one file, .listsbackup, with the tasks, lists, tags, projects, filters, the trash, the completed tasks and the attachments that are on the device. It does not hold where the device syncs, passwords, or the settings of the device itself.

Settings → Backups:

  • Create backups: never, every 24 hours (the default) or every 48 hours. A backup is made when the app runs: at start and with the runs of sync. On Android a background job looks once an hour as well and needs no network, so the backups come in time on a device that stays offline with the app closed.
  • Keep at most: 5 (the default), 10, 20 or 30. After a new backup the oldest ones over that number are removed.
  • Create backup now makes one at once. A device that has no tasks and no lists of its own yet makes no automatic backup.
  • Each backup in the list can be restored, saved as a copy to a place you choose, or deleted.
  • Restore from file takes a backup saved elsewhere, for example on another device or after a fresh install.

A new version of the app that changes how the data is stored makes a backup by itself before it touches the data, whatever the schedule says. It is an ordinary backup: it shows in the list and counts towards the number that is kept.

Backups live in the data folder of the app and go away with it. With WebDAV or folder sync, each device also keeps its copies in the sync storage, under lists/backups/. A copy there holds the tasks and the lists but not the attachments, which are in the storage already. It is made with a sync on the same schedule, and the device keeps as many of them as "Keep at most" says. In an encrypted storage the copies are encrypted as well. Settings → Backups → "Keep copies in the sync storage" turns this off for the device. Below it stand the time of the last copy (or why it failed) and the copies of every device; restore one from there, also on a new device that has just joined the storage. Restored from such a copy, the attachments arrive from the storage a little later, except those the storage has removed since because no task needed them. With CalDAV there is nowhere to put a file, so save a copy elsewhere from time to time.

Restoring replaces everything on the device with what the backup holds; the state before it is saved as one more backup first. With sync on, the app asks what to do with the storage: merge keeps what happened since the backup (a later edit wins, and what was deleted since stays deleted), replace the data of the storage gives the restored state to the storage and to every other device, where the rest goes to the Trash. The web server has no schedule of backups and no settings for them: back up its data volume, see self-hosting. The one backup it does make is the one before a change of how the data is stored; it lies in backups of the data volume and is restored with the app for macOS or Android.

Log

The apps for macOS and Android keep a log: a text file, log.txt, in the data folder of the app. Settings → General → Log chooses how much goes into it:

  • None (Off on Android): nothing is written.
  • Errors, the default: a sync run, a backup or an import that failed, and a push server that refused access. A sync failure that repeats the one before it word for word is written once.
  • Events: also the start of the app with its version, each sync run that changed something with the number of changes received and sent, backups made and restored, and what an import brought.
  • Detailed: also the sync runs that changed nothing and the passes over the content of attachments.

The log holds what the app did and the text of errors. Titles, notes, names of lists and tags, passwords and tokens do not get into it; the text of a sync error is the one the settings show and may name the address of the server. The file is kept on the device, is not synced and is not part of a backup. When it grows past 1 MB it becomes log.1.txt and a new file is started.

To send the log to someone, use Show in Finder on macOS or Share the log on Android; Clear removes both files. The web server writes to its standard error stream, as before.

Export

Everything, or the list on screen, goes out as one file: File → Export on macOS, Settings → Export… on Android, "Export…" in the side panel of the web interface.

  • JSON carries the lists with their settings, the tasks with every field and their subtasks, the saved filters, and the names of the attachments. It is described in json-format.md, and Lists imports it back: on another device, or after a script has written it from another program. Importing it on the device it came from makes copies; it does not write over the tasks.
  • Markdown is for reading: a heading for each list and the tasks as a task list, with their dates, priority and tags on the line, the notes under them and the subtasks indented. It is not imported back.

Neither holds the content of the attachments or the trash. A backup (above) is the complete copy.

Import

Source File
Lists an export as JSON (below)
2Do backup, .2dodb
Todoist CSV template
TickTick backup, CSV (Settings → Account → Generate backup)
Things 3 its database, main.sqlite (below)
OmniFocus CSV export (File → Export…)
Trello board exported as JSON
Microsoft To Do lists as JSON

Import from File → Import… on macOS, from Settings on Android, from the sidebar in the web interface. Importing the same file again updates what is already there. What each importer carries over, and what it cannot, is in specs/import.md.

Things has no export file; Lists reads its database. It lies in ~/Library/Group Containers/JLMPQHK86H.com.culturedcode.ThingsMac/ThingsData-…/: the folder Things Database.thingsdatabase is the live database, and Backups holds the copies Things makes on its own. In the open panel press ⇧⌘G to type the path, then choose a .thingsdatabase item: macOS shows it as one file. Lists reads a copy and never changes the database of Things. On Android and in the web interface, upload a main.sqlite from Backups: the live one may keep its latest changes in a separate log file next to it.

Version and author

The version of the app and its author, with a link to https://denis.evsyukov.org, are in Lists → About Lists on macOS, at the bottom of Settings on Android and at the bottom of the sidebar in the web interface. Give the version when reporting a problem.