Migrating Data from a Grist v1.7.8 Server to a Different Grist v1.7.20 Server

I have an older self-hosted Grist v1.7.8 running on Debian 12, which is a single user setup, no Authentik etc. I’m running into issues upgrading (both OS and Grist), and would like to start with a fresh Grist install and migrate the data.

I have installed a fresh Debian 13 Grist v1.7.20 in a Proxmox LXC container using a Proxmox Helper Script. I also used this process to install the Grist v1.7.8 system.

I saw this older post, but there are differences with my installs.

Firstly, there is no home.sqlite3 file. There are no *.sqlite3 files on either system, but there are /opt/grist/landing.db and /opt/grist/grist-sessions.db files on each system.

Inspecting the landing.db file on each system reveals, that it is a sqlite3 database:

Version 1.7.8:
file /opt/gfile /opt/grist/landing.db
/opt/grist/landing.db: SQLite 3.x database, last written using SQLite version 3040000, ...

Version 1.7.20:
file /opt/gfile /opt/grist/landing.db
/opt/grist/landing.db: SQLite 3.x database, last written using SQLite version 3051003, ...

The older post also mentions docs/*.grist files are the actual contents of the documents. These documents are located in /opt/grist/docs on my install.

ls -lah /opt/grist/docs
<redacted 1>.grist
<redacted 2>.grist
...
grist_structure.csv
grist_structure.json

The grist_structure.* files appear to contain the workspace and document metadata.

Can someone confirm that I need to copy the /opt/grist/docs directory to the target system?

Where to put the /opt/grist/docs folder on the target system for a single user setup (I assume it is /opt/grist/docs) and also for a multi-user setup using Authentik or similar?

What else is needed to migrate from the v1.7.8 system to the v1.7.20 system (i.e. the equivalent of the home.sqlite3 comment in the older migration post)?

Are there any gotchas migrating the data from Version 1.7.8 to Version 1.7.20?

Hi @Andrew3, upgrading should work fine. My main question is if you are building Grist yourself (like the proxmox script does), or using the docker image. What the docker image expects is described here:

From what you’ve said:

  • landing.db - this is the “home database”, same as home.sqlite3 just a different name, the default when building from source.
  • grist-sessions.db - session store, same in both cases.
  • docs/ subdirectory looks right except I’ve no idea where the “grist_structure.*” stuff came from, that isn’t from Grist itself I think.

If building from source, you have control over where stuff needs to be, so it is hard to give a straight answer. When you run Grist, there will be lines like this:
```
2026-09-30 13:27:56.970 - info: == appRoot: /home/paulfitz/cvs/gc/grist-core
2026-09-30 13:27:56.970 - info: == docsRoot: /home/paulfitz/cvs/gc/grist-core/docs
```
That should tell you where Grist expects the files to be.