Two paths: run it from source, or build an application a restaurant can install.
Running from source
Requirements:
- Flutter 3.47 or later, on
PATH.flutter --versionshould answer before you start. - Git for Windows, which brings Git Bash. Run everything from Git Bash, not PowerShell or cmd: every script in this repository is a POSIX shell script.
- Nothing else. PocketBase is downloaded on demand into
server/bin/.
git clone https://github.com/thewoldaa/mise-kal.git
cd mise-kal
# Terminal 1 - the server
./server/scripts/dev.sh
# Terminal 2 - the application
cd app && flutter run -d windows
The first run fetches the pinned PocketBase and applies the schema migrations.
The admin interface is then at http://127.0.0.1:8090/_/. On first launch, point
the application at 127.0.0.1:8090.
Building the application
installer/windows/build_windows.sh
This produces a runnable build at
app/build/windows/x64/runner/Release/Mise.exe, with PocketBase staged into it
so the application starts its own server on first run.
Developer Mode is required
Flutter creates symlinks under windows/flutter/ephemeral/.plugin_symlinks for
every native plugin. Windows refuses to create symlinks without Developer Mode,
and Flutter's own failure message does not name the prerequisite:
Building with plugins requires symlink support.
This project has five Windows plugins — bonsoir_windows, jni,
path_provider_windows, shared_preferences_windows, and
windows_file_picker — so the requirement cannot be avoided by dropping a
dependency.
Enable it once, as an administrator:
start ms-settings:developers
Or from an elevated PowerShell:
New-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock' -Force
Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock' `
-Name AllowDevelopmentWithoutDevLicense -Value 1 -Type DWord
build_windows.sh checks for this before doing anything and explains the fix,
rather than letting the build fail halfway through.
An installer
Not built yet. build_windows.sh produces a runnable build; wrapping it in an
installer needs Inno Setup or NSIS, which is a decision that has not been made.
A half-built installer that silently produces a broken artifact is worse than none, so the runnable build is the thing being verified first.
The SmartScreen warning
A built Mise.exe is unsigned. Windows will show a SmartScreen warning the first
time it runs:
Windows protected your PC
Choose More info, then Run anyway. You only do this once.
This is a cosmetic-trust problem, not a functional one. Removing it needs a code-signing certificate, which costs a few hundred dollars a year. The project ships unsigned deliberately and documents the workaround until signing is worth paying for.
Things that will bite you
These cost real time to diagnose, and each one is Windows-specific.
Shell scripts must stay LF. Git's default core.autocrlf=true rewrites
.sh files to CRLF on checkout, and bash then reads set -euo pipefail\r,
fails to find a command named pipefail\r, and dies before the script's first
line. .gitattributes pins the line ending in the repository so this cannot
happen. If you add a shell script and it fails strangely, check its endings
first.
Git Bash does not honour TMPDIR for a literal /tmp path. A script writing
to /tmp/x.json writes to the real
C:\Users\<you>\AppData\Local\Temp, not to whatever you set TMPDIR to. The
harness moves those paths into each agent's own scratch directory for exactly
this reason.
pkill -f matches command lines as strings, not processes. Two test runs in
different directories start PocketBase with identical relative arguments, so one
run's cleanup kills the other's server mid-suite. The harness kills by PID.
A missing git identity does not stop you editing, only committing. If
git config user.name is empty, the first commit fails with Committer identity
unknown, and in a merge that reads like a conflict. Set it once:
git config user.name "Your Name"
git config user.email "you@example.com"
worktree.sh doctor checks for this along with everything else.
Checking your machine
.harness/scripts/setup-tools.sh
.harness/scripts/worktree.sh doctor
doctor reports what is present, what is missing, and where it found a Flutter
SDK that is not on PATH.