#spacetime-db #directory #server #file-path #hierarchy

spacetimedb-paths

The spacetimedb directory structure, represented as a type hierarchy

9 releases (stable)

1.3.0 Aug 1, 2025
1.2.0 Jun 17, 2025
1.1.2 May 9, 2025
1.1.1 Apr 22, 2025
1.0.0-rc3.1 Jan 27, 2025

#919 in Filesystem

Download history 28/week @ 2025-07-06 11/week @ 2025-07-13 12/week @ 2025-07-20 98/week @ 2025-07-27 68/week @ 2025-08-03 13/week @ 2025-08-10 11/week @ 2025-08-17 24/week @ 2025-08-24 56/week @ 2025-08-31 31/week @ 2025-09-07 30/week @ 2025-09-14 27/week @ 2025-09-21 72/week @ 2025-09-28 27/week @ 2025-10-05 33/week @ 2025-10-12 43/week @ 2025-10-19

181 downloads per month
Used in 8 crates

Custom license

34KB
584 lines

The spacetimedb directory structure, represented as a type hierarchy.

Directory Structure of the Database.

SpacetimePaths holds the paths to the various directories used by the CLI & database.

  • cli-bin-dir: a directory under which all versions of all SpacetimeDB binaries is be stored. Each binary is stored in a directory named with version number of the binary in this directory. If a binary has any related files required by that binary which are specific to that version, for example, template configuration files, these files will be installed in this folder as well.

  • cli-config-dir: a directory where configuration and state for the CLI, as well as the keyfiles used by the server, are stored.

  • cli-bin-file: the location of the default spacetime CLI executable, which is a symlink to the actual spacetime binary in the cli-bin-dir.

  • data-dir: the directory where all persistent server & database files are stored.

Unix Directory Structure

On Unix-like platforms, such as Linux and macOS, the installation paths follow the XDG conventions by default:

  • cli-config-dir: $XDG_CONFIG_HOME/spacetime/
  • cli-bin-dir: $XDG_DATA_HOME/spacetime/bin/
  • cli-bin-file: $XDG_BIN_HOME/spacetime
  • data-dir: $XDG_DATA_HOME/spacetime/data

As per the XDG base directory specification, those base directories fall back to to the following defaults if the corresponding environment variable is not set:

  • $XDG_CONFIG_HOME: $HOME/.config
  • $XDG_DATA_HOME: $HOME/.local/share
  • $XDG_BIN_HOME: $HOME/.local/bin

For reference, the below is an example installation using the default paths:

$HOME
├── .local
   ├── bin
   │   └── spacetime -> $HOME/.local/share/spacetime/bin/1.10.1/spacetimedb-update # Current, in $PATH
│   └── share
│       └── spacetime
│           ├── bin
│           |   └── 1.10.1
│           |       ├── spacetimedb-update # Version manager
│           |       ├── spacetimedb-cli # CLI
│           |       ├── spacetimedb-standalone # Server
│           |       ├── spacetimedb-cloud # Server
│           |       ├── cli.default.toml # Template CLI configuration file
│           |       └── config.default.toml # Template server configuration file
|           └── data/
|
└── .config
    └── spacetime
        ├── id_ecdsa # Private key
        ├── id_ecdsa.pub # Public key
        └── cli.toml # CLI configuration

Windows Directory Structure

On Windows the installation paths follow Windows conventions, and is equivalent to a Root Directory (as defined below) at %LocalAppData%\SpacetimeDB\.

Note: the SpacetimeDB directory is in %LocalAppData% and not %AppData%. This is intentional so that different users on Windows can have different configuration and binaries. This also allows you to install SpacetimeDB on Windows even if you are not a privileged user.

Custom Root Directory

Users on all platforms must be allowed to override the default installation paths entirely with a single --root-dir argument passed to the initial installation commands.

If users specify a --root-dir flag, then the installation paths should be defined relative to the root-dir as follows:

  • cli-config-dir: {root-dir}/config/
  • cli-bin-dir: {root-dir}/bin/
  • cli-bin-file: {root-dir}/spacetime[.exe]
  • data-dir: {root-dir}/data/

For reference, the below is an example installation using the --root-dir argument:

{root-dir}
├── spacetime -> {root-dir}/bin/1.10.1/spacetimedb-update # Current, in $PATH
├── config
│   ├── id_ecdsa # Private key
│   ├── id_ecdsa.pub # Public key
│   └── cli.toml # CLI configuration
├── bin
|   └── 1.10.1
|       ├── spacetimedb-update.exe # Version manager
|       ├── spacetimedb-cli.exe # CLI
|       ├── spacetimedb-standalone.exe # Server
|       ├── spacetimedb-cloud.exe # Server
|       ├── cli.default.toml # Template CLI configuration file
|       └── config.default.toml # Template server configuration file
└── data/

Data directory structure

The following is an example of the internal structure of data-dir. Note that this is not a stable hierarchy, and users should not rely on it being stable from version to version.

{data-dir} # {Data}: CLI (--data-dir)
├── spacetime.pid # Lock file to prevent multiple instances, should be set to the pid of the running instance
├── config.toml # Server configuration (Human written, machine read only)
├── metadata.toml # Contains the edition, the MAJOR.MINOR.PATCH version number of the SpacetimeDB executable that created this directory. (Human readable, machine written only)
├── program-bytes # STANDALONE ONLY! Wasm modules aka `ProgramStorage` /var/lib/spacetime/data/standalone/2/program_bytes (NOTE: renamed from program_bytes)
│   └── d6
│       └── d9e66a8a285a416abd87e847c48b0990c6db6a5e0d5670c79a13f75dcabbe6
├── control-db # STANDALONE ONLY! Store information about the SpacetimeDB instances (NOTE: renamed from control_db)
│   ├── blobs/ # Blobs storage
│   ├── conf # Configuration for the Sled database
│   └── db # Sled database
├── cache
│   └── wasmtime
├── logs
│   └── spacetimedb-standalone.2024-07-08.log  # filename format: `spacetimedb-{edition}.YYYY-MM-DD.log`
└── replicas
    ├── 1 # Database `replica_id`, unique per cluster
    │   ├── clog # `CommitLog` files
    │   │   └── 00000000000000000000.stdb.log
    │   ├── module_logs # Module logs
    │   │   └── 2024-07-08.log # filename format: `YYYY-MM-DD.log`
    │   └── snapshots # Snapshots of the database
    │       └── 00000000000000000000.snapshot_dir # BSATN-encoded `Snapshot`
    │           ├── 00000000000000000000.snapshot_bsatn
    │           └── objects # Objects storage
    │               └── 01
    │                   └── 040a8585e6dc2c579c0c8f6017c7e6a0179a5d0410cd8db4b4affbd7d4d04f
    └── 34 # Database `replica_id`, unique per cluster
        ├── clog # `CommitLog` files
        │   └── 00000000000000000000.stdb.log
        ├── module_logs # Module logs
        │   └── 2024-07-08.log # filename format: `YYYY-MM-DD.log`
        └── snapshots # Snapshots of the database
            └── 00000000000000000000.snapshot_dir # BSATN-encoded `Snapshot`
                ├── 00000000000000000000.snapshot_bsatn
                └── objects # Objects storage directory trie
                    └── 01
                        └── 040a8585e6dc2c579c0c8f6017c7e6a0179a5d0410cd8db4b4affbd7d4d04f

⚠️ Internal Crate ⚠️

This crate is intended for internal use only. It is not stable and may change without notice.

Dependencies

~1–14MB
~96K SLoC