Install and update#
Everything Get started skips: platforms, manual downloads, running as a service, updates, the app builds and uninstalling.
What you need#
- Linux
amd64/arm64, WSL2, or an Apple Silicon Mac curl,tar, andsha256sum(Linux) orshasum(macOS)tmuxonPATH- At least one agent CLI on
PATHand already signed in:claude,codex,cursor-agent,grok,pioropencode. One is enough.
Install the daemon#
curl -fsSL https://raw.githubusercontent.com/daoleno/mewla/main/install.sh | sh
The installer picks the newest release for your platform, downloads the archive
and its SHA256SUMS, verifies the checksum, and installs mewla into a
user-owned directory on your PATH (or ~/.local/bin). It never uses sudo,
installs packages, installs agent CLIs, signs in anywhere or sends telemetry.
When it finishes, it runs mewla doctor.
If mewla is already installed, the same command runs mewla update instead,
unless you set MEWLA_VERSION or MEWLA_INSTALL_DIR.
Options, set as environment variables on sh:
| Variable | Effect |
|---|---|
MEWLA_VERSION=v0.2.14 |
Install this exact release tag instead of the newest |
MEWLA_INSTALL_DIR="$HOME/bin" |
Install into this user-owned directory |
MEWLA_NO_PATH_UPDATE=1 |
Do not add the install directory to your shell profile |
MEWLA_DRY_RUN=1 |
Print the platform, version and destination; change nothing |
curl -fsSL https://raw.githubusercontent.com/daoleno/mewla/main/install.sh | MEWLA_INSTALL_DIR="$HOME/bin" sh
If the installer added a directory to your shell profile, open a new terminal
or run the export PATH=... line it printed.
Manual download#
Download the archive for your host and SHA256SUMS from the
GitHub Releases, then verify and install:
# Linux (use mewla-linux-arm64.tar.gz on ARM)
grep 'mewla-linux-amd64.tar.gz$' SHA256SUMS | sha256sum -c -
tar -xzf mewla-linux-amd64.tar.gz
# macOS
grep 'mewla-darwin-arm64.tar.gz$' SHA256SUMS | shasum -a 256 -c -
tar -xzf mewla-darwin-arm64.tar.gz
mkdir -p ~/.local/bin
install -m 755 mewla ~/.local/bin/mewla
~/.local/bin/mewla doctor
On macOS, install tmux with brew install tmux. If macOS blocks the binary,
confirm it came from an official Mewla release, then run
xattr -d com.apple.quarantine ~/.local/bin/mewla.
Supported platforms#
| Host | Archive | Status |
|---|---|---|
Linux amd64 / x86_64 |
mewla-linux-amd64.tar.gz |
Supported |
Linux arm64 / aarch64 |
mewla-linux-arm64.tar.gz |
Supported |
| WSL2 on either architecture | The matching Linux archive | Supported |
| Apple Silicon macOS | mewla-darwin-arm64.tar.gz |
Supported |
| Intel macOS | None | Not supported |
| Native Windows | None | Not supported; use WSL2 |
The installer stops on an unsupported platform before downloading anything.
Check the host#
mewla doctor # tmux, state directory, listen port, agent CLIs
mewla doctor --json
mewla doctor exits nonzero when the host is not ready and says why. It never
installs packages or prints credentials.
To write an executor configuration interactively, run mewla setup. See
Agents and models.
Update#
mewla update --check # is there a newer release?
mewla update # verify and install it
mewla update checks the release's signed manifest and the archive checksum
before it replaces the binary. It does not restart a running daemon; stop and
start mewla when convenient. On macOS with the service installed, it also
replaces Mewla.app and restarts the service, keeping your address,
directories and PATH. Your tmux sessions and agents keep running.
Keep it running#
mewla is the whole runtime. Run it in a terminal or a tmux window, or let
Mewla start it for you: a user service on Linux with systemd, a LaunchAgent on
macOS.
mewla boot install # this binary, default state and address
mewla boot install -lan # same, listening on the private network
mewla boot install -dry-run # print the service without installing it
mewla boot status
mewla boot uninstall
mewla boot install refuses to run as root and refuses to start a second daemon
on a state directory that is already in use; stop the running mewla first.
Restarting the service never stops your tmux sessions or agents.
- Linux: to start it before you log in, enable lingering with
loginctl enable-linger(the command tells you when this is needed). - macOS: it starts when you log in and runs in your login session, the one
that owns the screen and the privacy permissions. After a restart, log in
once for Mewla to start. Output goes to
~/.mewla/logs/launchd.log. The service runs a copy of the binary in~/Applications/Mewla.app, so System Settings and permission prompts show Mewla's name and icon. The command you type stays where you installed it.
mewla boot install signs Mewla.app with a code-signing identity that it
creates on this Mac the first time, so you grant Screen Recording and
Accessibility once and they stay granted after updates. No Apple account
is involved, and nothing asks you anything. The private key never leaves
this Mac: it lives in its own keychain,
~/Library/Keychains/mewla-signing.keychain-db, with a random password in
~/Library/Application Support/Mewla/signing/. mewla boot status shows
how Mewla.app is signed. If the identity can't be used, Mewla signs ad hoc
instead, and macOS asks for the permissions again after each update.
Do not run the daemon as root.
Defaults#
| Setting | Value |
|---|---|
| Listen address | 127.0.0.1:9876 (mewla --lan uses 0.0.0.0:9876) |
| State directory | ~/.mewla |
| Executor configuration | ~/.mewla/executors.toml (optional) |
| Brain workspace | ~/.mewla/brain |
To use another state directory, pass the same -state-dir to every command:
mewla -state-dir /path/to/state
mewla pair -state-dir /path/to/state
Install the app#
Android#
Download mewla-android-arm64-v<version>.apk and SHA256SUMS from the
GitHub Releases and verify the APK:
sha256sum -c SHA256SUMS --ignore-missing
The APK supports 64-bit ARM phones (arm64-v8a) only. Android asks you to
allow installs from your browser or file manager, and Play Protect may warn
because Mewla is not on the Play Store. The official signing certificate's SHA-256
fingerprint is:
C2:FC:5B:09:B3:86:92:EE:70:59:71:1F:E7:ED:B8:79:
4C:E3:65:FE:1C:7A:06:AB:95:4E:5D:D1:BD:CD:A4:FD
Update the app#
Mewla looks for a newer release on its own, at launch and when you come back to
it (at most every six hours). Nothing shows while you're up to date. When a
newer release exists, a small dot appears on the menu and on Settings, and
Settings → About reads Update to v
Builds take their update channel from MEWLA_ANDROID_DISTRIBUTION at build
time: github-apk (default), play-store or none. Store and none builds,
and iOS, leave updates to the store and show the version only.
iOS#
Mewla Preview 0.2.4 (42) is uploaded and awaiting Apple Beta App Review as of
2026-10-10. The new TestFlight public link
will accept testers after Apple approves a build in the group. Until then, build
the app from source on an Apple Silicon Mac.
Build the iOS app from source#
You need full Xcode, an iOS Simulator runtime or a signed device target, CocoaPods, Bun, and network access for the first native build. Installing on a physical iPhone also needs an Apple development team.
Clone the source, then from the repository root:
git clone https://github.com/daoleno/mewla.git && cd mewla
bun install
bun run native:build:ios # builds the pinned terminal library
bun run native:verify:ios
cd app
bunx expo prebuild --platform ios --clean
cd ios && pod install && cd ..
bun run ios
You can also open app/ios/Mewla.xcworkspace in Xcode after pod install. The
app targets iOS 16.4 or newer and asks for local-network access (to reach your
daemon) and camera access (to scan pairing codes).
Web UI#
The daemon also serves the app as a web page for a browser on the same computer or behind HTTPS. See In a browser.
Build the daemon from source#
With the Go version named in daemon/go.mod and Bun installed, from the
repository root:
bun install
bun run daemon:build # writes bin/mewla
./bin/mewla doctor
A source build serves a placeholder instead of the web UI unless you first run
bun run web:build.
Uninstall#
- Run
mewla boot uninstallif you installed the service, and stopmewla. On macOS this also removes~/Applications/Mewla.app. It keeps the signing identity, so a later install keeps your permissions. To remove the identity too, runsecurity delete-keychain ~/Library/Keychains/mewla-signing.keychain-dbandrm -r ~/Library/Application\ Support/Mewla/signing, then remove Mewla from Screen & System Audio Recording and Accessibility in System Settings → Privacy & Security. - Delete the binary (
command -v mewlashows where it is). - Optionally delete
~/.mewla. It holds the daemon's identity, paired devices, Work and Brain data; deleting it unpairs every phone.