Loomis
Getting started

Install

One double-click or one command, the same nineteen questions either way, and how to finish the ones you skip.

There are two ways in and they ask the same things. The double-click opens a page in your browser that explains each answer as it asks for it. The command asks in the terminal, supports --dry-run, and is what you would put in a script. Neither one installs anything outside this folder.

Before you start

  • Node 22.6 or newer. See What it needs. The installer checks this first and stops with a link rather than half working.
  • Roughly two gigabytes of disk space, most of it the packages.
  • A terminal you can leave open. Closing it stops the app, which is the point: nothing is installed as a service, a daemon or a login item.

The double-click

Open the setup file

setup.command
setup.bat
setup.sh
README.md
package.json

On macOS, setup.command. On Windows, setup.bat. On Linux, setup.sh. On macOS and Linux the file may need to be made runnable once:

chmod +x setup.command

Read the check

The first screen reports the Node version it found, whether the packages are already installed, and which of the nineteen names are already set. Nothing has been changed at this point.

Answer the questions

They are grouped in the order a fresh installation needs them: the database address first, then the app's own keys, then the deployment's. Every one of them explains what stops working without it.

You can leave anything for later

Press Leave for later and the feature that needs it stays switched off. The answer is recorded so the screen knows it was a decision rather than an oversight, and the panel's Platform → Environment screen is where you come back and finish it.

Let it write

The installer writes the seven app names into .env.local and runs the Convex command that sets the twelve deployment names, one at a time, showing each result. It never prints a value back that you gave it, and it always shows a masked hint such as sk_live_...f3a9 so you can tell the right key went in.

Open it

The last screen has one button: open Loomis on http://localhost:3000. That starts the app and opens it for you.

The first time on macOS

The setup file is a script rather than a signed application, so macOS may refuse it. That is what the dialog is about: it is not a warning about this file in particular, it is the rule for everything downloaded and not signed.

Right-click the file (or Control-click), choose Open, and then choose Open in the dialog. The dialog now has the button it was hiding, and it remembers the answer for this file.

That is once per download. If a newer copy of the folder arrives, it is a new file and macOS will ask again.

The one command

Everything the installer does is also a command, and it is the same walk:

pnpm configure

It needs no packages installed beforehand, so it works on a fresh copy of the folder. It writes the same files, keeps a dated .bak of the previous .env.local, and never echoes a value back.

FlagWhat it does
--dry-runSays what it would write and where, and writes nothing
--yesTakes the shipped answer for anything you are not asked, for scripted runs
--only=appDoes one half of it: app for .env.local, deployment for the Convex names
--file=pathUses a different env file than .env.local
--no-colorPlain output, for a log or a pipe
--helpLists the flags and the names

`pnpm setup` is not this

pnpm has a setup command of its own and it will win. The script here is pnpm configure.

Coming back later

Open the same setup file again and it does not install anything twice. It finds this copy already set up and shows the screen with Open on localhost, which starts the app and opens it. Closing that terminal window stops the app.

To change one answer, run pnpm configure --only=app and give just that name, or set it by hand in .env.local. For a deployment name, the command is:

npx convex env set NAME "value"

Where the answers go

WhereWhich namesRead by
.env.local in this folderThe seven app names, such as NEXT_PUBLIC_CONVEX_URL and SETTINGS_SECRETThe Next.js process on the machine it runs on
The Convex deployment's environmentThe twelve deployment names, such as BETTER_AUTH_SECRET and GOOGLE_CLIENT_IDThe functions and the database

.env.local is written with restrictive permissions and is excluded from version control by .gitignore. .env.example in the same folder lists all nineteen names with a line about each, and never contains a real value.

Next