Livebook Autosaves
Tags: development, web, elixir, livebook
Published: 2023-01-04 03:24:50

---
title: Livebook Autosaves
published: true
date: 2022-12-14 20:00:00 UTC
tags: development,web,Elixir,Livebook
canonical_url: https://braytonium.com/2022/12/15/livebook-autosaves/
---

Tell me if you've done this before. You write up a nice little prototype of an idea in Livebook. You then get distracted by life situations like eating, writing an email, or taking a nap. You feel the need to close Livebook or prune the multiple sessions you've had running for weeks now. Because you have a million tabs open (with a session manager) and too many in Livebook to individually check, you restart your computer and let it crash(TM). When you open up Livebook again, "Oh. Shiiiiit" you exclaim. Where the hell did that notebook go? I'm 100% sure I clicked the disk icon, what the hell? If you're like me, you may have created this forked Livebook from memory, possibly taking a better approach.

There is a better way to handle this scenario. Livebook has had autosaves since 0.4:

[https://twitter.com/livebookdev/status/1467576154941009920](https://twitter.com/livebookdev/status/1467576154941009920)

The feature was added in this PR according to the changelog:

[https://github.com/livebook-dev/livebook/pull/736](https://github.com/livebook-dev/livebook/pull/736)

To find your autosave files:

- For the Desktop application and CLI in production: `~/Library/Application Support/livebook/autosaved/`.
  - On my machine this expands to the absolute path `/Users/jbrayton/Library/Application Support/livebook/autosaved/`.
- For the dev environment: in `config/dev.exs`, this is set as `config :livebook, :data_path, Path.expand("tmp/livebook_data/dev"`.
  - On my machine this expands to the absolute path `/Users/Shared/repositories/personal/elixir/livebook/tmp/livebook_data/dev/autosaved/`.
- For the test environment: in `config/test.exs` this is set as `Path.expand("tmp/livebook_data/test")`.
  - On my machine this expands to the absolute path `/Users/Shared/repositories/personal/elixir/livebook/tmp/livebook_data/test/autosaved/`.

Notebooks are saved by day in the autosave directory and the date corresponds to when they were created (when you immediately click the New notebook button).

To view or change your autosave directory in the CLI:

- Go to [http://localhost:8080/settings](http://localhost:8080/settings)
- Or, if you're already in a notebook, click the Livebook icon in the top left and click `Settings` under the `Home` and `Learn` links.

![Livebook CLI settings page](https://braytonium.com/2022/12/15/livebook-autosaves/images/2022/12/livebook_cli_settings.png)

For the Desktop application, the port will be randomized but you can either change the URL to tack on `/settings` after the port or click around to the settings page as described earlier.

![Livebook Desktop application settings page](https://braytonium.com/2022/12/15/livebook-autosaves/images/2022/12/livebook_app_settings.png)

## Tracing the Default Setting

If you are curious as to how this setting gets configured, we can start by looking at `Livebook.Settings.default_autosave_path()` in [https://github.com/livebook-dev/livebook/blob/main/lib/livebook/settings.ex#L32-L34](https://github.com/livebook-dev/livebook/blob/main/lib/livebook/settings.ex#L32-L34). We follow `Livebook.Config.data_path()` to [https://github.com/livebook-dev/livebook/blob/main/lib/livebook/config.ex#L76-L78](https://github.com/livebook-dev/livebook/blob/main/lib/livebook/config.ex#L76-L78) then the Erlang function `:filename.basedir(:user_data, "livebook")`.

Running this in Livebook we get the output `"/Users/jbrayton/Library/Application Support/livebook"`, precisely where the desktop app stores its files.

## Finding Files

What lead me to this discovery, after vaguely remembering autosave was a thing, was looking for files on my computer. I purposefully install and use the `locate` command because I find it far easier to use than remembering the `find -name` syntax.

Here's the output for checking that the word `autosave` is in any directory or file name:

```
⋊> ~ locate autosaved/ 
/Users/Shared/repositories/personal/elixir/livebook/tmp/livebook_data/dev/autosaved/2022_10_31/18_25_03_mapset_drills_hedh.livemd
/Users/Shared/repositories/personal/elixir/livebook/tmp/livebook_data/dev/autosaved/2022_11_03/18_12_21_teller_bank_challenge_pv4e.livemd
/Users/Shared/repositories/personal/elixir/livebook/tmp/livebook_data/dev/autosaved/2022_11_03/18_13_39_untitled_notebook_pidb.livemd
/Users/Shared/repositories/personal/elixir/livebook/tmp/livebook_data/dev/autosaved/2022_11_03/19_31_57_dockyard_academy_amas_p75r.livemd
/Users/Shared/repositories/personal/elixir/livebook/tmp/livebook_data/dev/autosaved/2022_11_03/20_02_17_intro_to_timescale_jm7r.livemd
/Users/Shared/repositories/personal/elixir/livebook/tmp/livebook_data/dev/autosaved/2022_11_08/11_10_21_untitled_notebook_ervg.livemd
/Users/Shared/repositories/personal/elixir/livebook/tmp/livebook_data/dev/autosaved/2022_11_22/19_15_12_untitled_notebook_p75e.livemd

```

What I found interesting was that my files in `~/Library/Application Support/livebook/autosaved/` did not show up. Had I not realized there could be different locations, I may have overlooked the notebook I was looking for all along. I have no clue why `locate` doesn't scour the directories in `~/Library` it should have access to but that's a problem for another day.