What you’ll build: a local transcription server Ito can talk to, so your speech-to-text runs on your Mac, powered by the Groq API for high-speed transcription. This mirrors the developer setup in the repo’s Building from Source and Server docs.
What you’ll build: a local transcription server Ito can talk to, so your speech-to-text runs on your Mac, powered by the Groq API for high-speed transcription. This mirrors the developer setup in the repo’s Building from Source and Server docs. (GitHub)
Xcode Command Line Tools: Needed for native builds:
# Node.js (via Homebrew)
brew install node
# Bun (official script)
curl -fsSL https://bun.sh/install | bash
# or via Homebrew
# brew install bun
# Rust (rustup)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Docker Desktop for Mac
brew install --cask docker
# …or download from Docker's site if you prefer
Tip: After installing Bun or Rust, open a new terminal so your $PATH is refreshed. Verify with:
bun --version
rustc --version
# Clone the repository
git clone https://github.com/heyito/ito.git
cd ito
# Install App dependencies
bun install
# Create top-level environment file
cp .env.example .env
# Build native components (Rust binaries)
bun build:rust:mac
These steps match the repo’s Building from Source instructions. For a local setup, you generally don’t need to modify the root .env. (GitHub)
Navigate to the server and install dependencies:
cd server
cp .env.example .env
bun install
Get a Groq API Key
Edit server/.env
Local dev only: set REQUIRE_AUTH=false to bypass auth checks while developing. Add your Groq key:
# ... other variables
REQUIRE_AUTH=false
GROQ_API_KEY="gsk_YourCopiedApiKeyFromGroq"
# ... other variables
Heads up: The root README says “Edit with your API keys,” but exact variable names live in server/.env.example. Use that file as the source of truth in case names change (e.g., model env var). (GitHub)
Alternative (shell export)
export GROQ_API_KEY="gsk_YourCopiedApiKeyFromGroq"
Make sure Docker Desktop is running before you start.
# Starts a local Postgres container via Docker (Compose)
bun run local-db-up
# Applies database migrations
bun run db:migrate
This uses a dev container with sensible defaults; data persists in a Docker volume.
Start the local gRPC server the desktop app will talk to:
# from the server/ directory
bun run dev
You should see logs indicating the RPC server is running (the log shows the port; if 3000 is occupied, it may differ).
Open a new terminal (recommended), or reuse the server terminal.
# from anywhere
cd /path/to/ito # enter the repo root
bun run dev
On the first run, macOS will prompt you to grant Microphone and Accessibility permissions. Ito needs the mic for audio input and accessibility to type into other applications.
When the app launches, select the Self-hosted option in onboarding. The app auto-enables self-hosted mode once a healthy local server is detected. These app and dev steps mirror the repo README. (GitHub)
# 0) Tools (install once)
brew install node
xcode-select --install
curl -fsSL https://bun.sh/install | bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
brew install --cask docker
# 1) Clone & bootstrap
git clone https://github.com/heyito/ito.git
cd ito
bun install
cp .env.example .env
./build-binaries.sh
# 2) Configure & run the server
cd server
cp .env.example .env
# --> MANUALLY EDIT server/.env: set REQUIRE_AUTH=false (for local dev)
# and add your GROQ_API_KEY (or export it in your shell)
bun install
bun run local-db-up
bun run db:migrate
bun run dev # keep this running
# 3) Launch the app
# Option A: In a NEW terminal
cd /path/to/ito
bun run dev
$PATH
updates after installation. Verify with bun --version. Bun must be version 1.2.0+bun run local-db-up
. If migrations fail, confirm the container is healthy, then rerun bun run db:migrate
.REQUIRE_AUTH=false
(for local dev) and that GROQ_API_KEY
is set (in server/.env
or exported). Also verify Node.js is v20+ (node -v
). These match the repo’s dev instructions. (GitHub)bun run dev
process in server/
is still running without errors and the DB is up.