Install

Get Grem

Grem runs on Linux, macOS, Windows, Android, and iOS from one Flutter codebase. Signed builds are not published yet, so today it is built from source.

Requirements

Flutter 3.5 or later. The sync server needs Rust 1.82 or later and a MongoDB instance, and is only needed to run a private one.

Build the client

cd app
flutter pub get
flutter run -d linux        # or macos, windows, android, ios

Linux build dependencies

The Flutter Linux toolchain uses clang, and the secure storage plugin needs libsecret and jsoncpp headers.

sudo dnf install clang cmake ninja-build gtk3-devel libsecret-devel jsoncpp-devel

# Debian and Ubuntu:
sudo apt install clang cmake ninja-build libgtk-3-dev libsecret-1-dev libjsoncpp-dev

Create an account

Account creation happens in the app, because the master password and every key under it are generated on the device and never sent. The app asks for an email address, sends a code to it, and then asks for a master password.

Starting from a browser works too. The sign-up page here sends the same code to the same address; enter it in the app when it asks.

Run a private sync server

The app points at https://api.grem.sh by default and can be pointed anywhere else from the sign-in screen, under "Change sync server". The server stores sealed blobs, so running a private one changes who holds the ciphertext and nothing about what it contains.

cd server
cp .env.example .env        # defaults to 127.0.0.1:5555 and a local mongod
cargo run --release

Configuration is environment variables. The signing key is generated on first run and kept at GREM_SECRET_FILE with 0600 permissions, so tokens survive a restart. Sending mail needs a Postmark key and a verified sender; without one the server prints codes to its log instead, which is enough to develop against.