Add Dynalist internal links uid to OPML backups

In short, I am intended to use Dynalist as the life-long solution for task management, notes, projects, diary, etc. But I want to be sure that even if something happens to Dynalist I will be able to recover my data.

As now we have OPML and TXT backups. Great, but OPML does not contain enough data to recover internal links if site is down. My Dynalist routine heavily relies on internal links (thanks to Zettelkasten method), so it is crucial to restore them if need. Gavin raised the same problem here - OPML export/import does not preserve intra-document links . But seems there are no solution.

So my proposals are:

  • Short term. Add your internal UID to OPML backup. Like ‘<outline text=“bla bla bla”, uid="F7z-7eUJCxn5OsHTmZ_y-21J#z=GVRlF0hwejGpgtZyen_n_qlw>’. I believe this is MUST, before any bells and whistles. Of course it will makes backup larger, but it will be really helpful to restore data.
  • Long Term. Tune up OPML backup structure to make it easier to import to other outliners. I really like Dynalist (and i switched to it after a couple of years with Workflowy and Checkvist) but want to be ready to any apocaliptyc scenario. There are a couple of tools listed at official OPML site : . I’ve tried Bike and LogSeq last time. Bike were able to parse data from Dynalist OPML, LogSeq - no.

And thanks for great tool. This is a game changer for me.

You’re right, but I don’t think the developers plan to add any new features any time soon.

But, I want to call attention to the desktop app in “offline mode”. It stores your documents locally in a JSON format. In theory, this can be parsed into OPML with uid. In practice, it would be really difficult to do the conversion, and nobody has tried.

Thanks for an idea. I suppose the workaround is to make a portable version of Dynalist (Windows portable program) and update it once a month.

Finally, I’ve implemented JSON backup using library
Steps to do the same:

  1. Obtain Secret API token at

  2. Download

  3. Make “backup” folder in folder where you downloaded

  4. Create “” file and put this code in (don’t forget to change secret token):

      from dynalist import DynalistWrapper
      d = DynalistWrapper("<PUT SECRET TOKEN HERE>")
      for dynafile in d.listFiles():
          dynafile_escaped = dynafile
          dynafile_escaped = dynafile_escaped.replace("\\","_")
          dynafile_escaped = dynafile_escaped.replace("/","_")
          dynafile_escaped = dynafile_escaped.replace(":","_")
          print("Backuping: " + dynafile)
          d.backupJson(dynafile, "./backup/" + dynafile_escaped+".json")
  5. Run by python

  6. If need install additional libraries if needed like pip install

  7. Run again.

  8. All backups will be in “backup” directory.

No the best way, as:

  1. It is impossible to recover anyway
  2. JSON is flat, not hierarchical as OPML
    But at least I have all my data including internal IDs.