Frame docs · Get started

Quickstart

The simplest always-on setup: a small virtual server (a VPS) with Debian or Ubuntu and a domain name. Frame gets and renews its own HTTPS certificate, so you need no other web server. Allow about 15 minutes. Prefer Docker, or running at home without open ports? See Pick a setup.

Before you start

  • A VPS with Debian 13 or Ubuntu 24.04 LTS and your SSH key on it. Any provider works; about €4–6 a month gets 2–4 GB of RAM, 40 GB or more of disk and plenty of traffic.
  • A domain you can add DNS records to. This guide uses frame.example.com: replace it with yours everywhere.
  • Commands that start with sudo run as the administrator. Never pipe a script from the internet straight into a shell: download it, read it, then run it.

Set it up

  1. Step 1: Point your domain at the server

    At your DNS provider, add an A record named frame (or @ for the bare domain) with the server's IPv4 address, and optionally an AAAA record with its IPv6 address. On Cloudflare DNS, set the record to DNS only (grey cloud). Check it: dig +short frame.example.com should print the server's IP. This can take a few minutes.

  2. Step 2: Update the server and open the firewall

    Allow SSH and web traffic, and nothing else. If your provider also has a firewall in its control panel, allow TCP 22, 80 and 443 there too.

    Terminal
    ssh [email protected]        # or the user your provider createdsudo apt update && sudo apt upgrade -ysudo apt install -y ufwsudo ufw allow OpenSSHsudo ufw allow 80,443/tcpsudo ufw enable
  3. Step 3: Download the installer, read it, run it

    Terminal
    curl -fsSLO https://github.com/Crow-Tech-Pte-Ltd/frame/releases/latest/download/install.shless install.sh                   # read it (press q to quit)sudo sh install.sh

    The installer picks the release for your CPU, checks its SHA-256 checksum against the release's SHA256SUMS before installing anything, and sets up a locked-down systemd service. It creates /etc/frame/frame.conf and never touches your data in /var/lib/frame.

  4. Step 4: Configure it

    Open the file with sudo nano /etc/frame/frame.conf. Every line is commented out: remove the # and fill in at least these four. Save with Ctrl+O, Enter, then exit with Ctrl+X.

    /etc/frame/frame.conf
    FRAME_DOMAIN=frame.example.comFRAME_PUBLIC_URL=https://frame.example.com[email protected]FRAME_NAME="Our Frame"

    New servers are invite-only, so strangers who find the address can't sign up. Leave FRAME_TRUSTED_PROXIES unset: phones connect to Frame directly.

  5. Step 5: Start it

    Terminal
    sudo sh install.sh --reconfigure     # lets Frame use ports 80/443 because FRAME_DOMAIN is setsudo systemctl start framesystemctl status frame               # should say "active (running)"

    The first HTTPS request fetches the certificate, which takes a few seconds. Then open https://frame.example.com/healthz in a browser: it should say ok.

  6. Step 6: Create your admin account

    On its first start, the server writes a one-time link to its log:

    Terminal
    sudo journalctl -u frame | grep "admin account"
    Output
    Create your admin account: https://frame.example.com/admin/setup#t=…

    Open it and choose your name, a username, your e-mail or phone number and a password. That is your normal Frame account and also the admin of the web panel at https://frame.example.com/admin/. Then open Security in the panel and turn on two-factor authentication. More in First run & admin account.

  7. Step 7: Connect the app and invite friends

    In the Frame app, type frame.example.com when it asks Where's your Frame? and sign in with the same details. Invite friends from the app, or from Invites → New invite in the admin panel. See Connect the apps & invite.

Next

For AI tools: this page as Markdown, the page index and all pages in one file.

WhatsApp