{% extends "base.html" %} {% block title %}Data & backups ยท Steady{% endblock %} {% block content %}

Portable and recoverable

Data & backups

Capture a list, download your data, or restore a Steady backup.

{% if undo_batch %} {% endif %}

Import a task list

Upload UTF-8 Markdown or plain text. Each non-empty line becomes a normal-priority task; headings and code blocks are ignored.

# Weekend
- [ ] Buy groceries
- [x] Book appointment
1. Water the plants

Maximum 200 tasks. Checked items import as completed.

{{ markdown_form.hidden_tag() }}
{{ markdown_form.markdown_file.label }} {{ markdown_form.markdown_file(accept=".md,.markdown,.txt,text/plain,text/markdown") }}
{{ markdown_form.confirm(id="markdown-confirm") }} {{ markdown_form.confirm.label(for_="markdown-confirm") }}
{{ markdown_form.submit(class="button", id="markdown-submit") }}

Download a backup

Export active tasks, subtasks, focus setup, completion history, and preferences as versioned JSON.

Credentials, email, internal IDs, and cleared tasks are never included.

Download JSON backup

Restore a backup

Merge a Steady JSON backup into this account. The complete file is validated before anything changes.

{{ backup_form.hidden_tag() }}
{{ backup_form.backup_file.label }} {{ backup_form.backup_file(accept=".json,application/json") }}
{{ backup_form.replace_existing(id="backup-replace") }} {{ backup_form.replace_existing.label(for_="backup-replace") }} Replacement removes this account's current tasks only after the backup passes validation.
{{ backup_form.confirm(id="backup-confirm") }} {{ backup_form.confirm.label(for_="backup-confirm") }}
{{ backup_form.submit(class="button", id="backup-submit") }}

Clear completed tasks

Hide completed work from active views. Your streak history remains intact.

Show clear action

You will receive an undo action immediately afterward.

{% endblock %}