Ito is an intelligent voice assistant that brings seamless voice dictation to any application on your computer. Simply hold down your trigger key, speak naturally, and watch your words appear instantly in any text field.
undefinedDownload the latest release from heyito.ai or the GitHub releases page
undefinedInstall the application:
.dmg file and drag Ito to Applications.exe installer and follow the setup wizardundefinedGrant permissions when prompted:
undefinedSet up authentication:
Fn + Space)undefinedImportant: Ito requires a local transcription server for voice processing. See server/README.md for detailed server setup instructions.
# Clone the repository
git clone https://github.com/heyito/ito.git
cd ito
# Install dependencies
bun install
# Set up environment variables
cp .env.example .env
# Build native components (Rust binaries)
./build-binaries.sh
# Set up and start the server (required for transcription)
cd server
cp .env.example .env # Edit with your API keys
bun install
bun run local-db-up # Start PostgreSQL database
bun run db:migrate # Run database migrations
bun run dev # Start development server
cd ..
# Start the Electron app (in a new terminal)
bun run dev
xcode-select --installundefinedRequired Setup:undefined
This setup uses git bash for shell operations. Download from git
undefinedInstall Docker Desktop: Download from docker.com and ensure itโs running
undefinedInstall Rust (with GNU target)
Download and run the official Rust installer for Windows.
This installs rustup and the MSVC toolchain by default.
Add the GNU target (needed for our native components):
rustup toolchain install stable-x86_64-pc-windows-gnu
rustup target add x86_64-pc-windows-gnu
undefinedInstall 7-Zipundefined
winget install 7zip.7zip
Install MSYS2.
Open the MSYS2 MinGW x64 shell (from the Start Menu).
Update and install the toolchain:
pacman -Syu # run twice if asked to restart
pacman -S --needed mingw-w64-x86_64-toolchain
Verify the tools exist:
ls /mingw64/bin/gcc.exe /mingw64/bin/dlltool.exe
You normally develop and build in Git Bash. Before building, prepend the MinGW path:
export PATH="/c/msys64/mingw64/bin:$PATH"
export DLLTOOL="/c/msys64/mingw64/bin/dlltool.exe"
export CC_x86_64_pc_windows_gnu="/c/msys64/mingw64/bin/x86_64-w64-mingw32-gcc.exe"
export AR_x86_64_pc_windows_gnu="/c/msys64/mingw64/bin/ar.exe"
export CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER="/c/msys64/mingw64/bin/x86_64-w64-mingw32-gcc.exe"
Check youโre picking up the right ones:
which gcc # -> /c/msys64/mingw64/bin/gcc.exe
which dlltool # -> /c/msys64/mingw64/bin/dlltool.exe
โ ๏ธ Do not add C:\msys64\ucrt64\bin to PATH. Thatโs the wrong runtime and will break linking.
๐ก To avoid running these exports every session, add the lines above to your Git Bash ~/.bashrc file. They will be applied automatically whenever you open a new Git Bash window.
Whenever you update MSYS2 packages with pacman -Syu, restart Git Bash so the changes take effect.
undefinedNote: Windows builds use Docker for cross-compilation to ensure consistent builds. The Docker container handles the Windows build environment automatically.
ito/
โโโ app/ # Electron renderer (React frontend)
โ โโโ components/ # React components
โ โโโ store/ # Zustand state management
โ โโโ styles/ # TailwindCSS styles
โโโ lib/ # Shared library code
โ โโโ main/ # Electron main process
โ โโโ preload/ # Preload scripts & IPC
โ โโโ media/ # Audio/keyboard native interfaces
โโโ native/ # Native components (Rust/Swift)
โ โโโ audio-recorder/ # Audio capture (Rust)
โ โโโ global-key-listener/ # Keyboard events (Rust)
โ โโโ text-writer/ # Text insertion (Rust)
โ โโโ active-application/ # Get the active application for context (Rust)
โโโ server/ # gRPC transcription server
โ โโโ src/ # Server implementation
โ โโโ infra/ # AWS infrastructure (CDK)
โโโ resources/ # Build resources & assets
# Development
bun run dev # Start with hot reload
bun run dev:rust # Build Rust components and start dev
# Building Native Components
bun run build:rust # Build for current platform
bun run build:rust:mac # Build for macOS (with universal binary)
bun run build:rust:win # Build for Windows
# Building Application
bun run build:mac # Build for macOS
bun run build:win # Build for Windows
./build-app.sh mac # Build macOS using build script
./build-app.sh windows # Build Windows using build script (requires Docker)
# Code Quality
bun run lint # Run ESLint
bun run format # Run Prettier
bun run lint:fix # Fix linting issues
undefinedIto is built as a modern Electron application with a sophisticated multi-process architecture:
undefinedFrontend:undefined
undefinedBackend:undefined
undefinedNative Components:undefined
undefinedInfrastructure:undefined
graph TD
A[User Holds Trigger Key] --> B[Global Key Listener]
B --> C[Main Process]
C --> D[Audio Recorder Service]
D --> E[gRPC Transcription Service]
E --> F[AI Transcription Model]
F --> G[Transcribed Text]
G --> H[Text Writer Service]
H --> I[Active Text Field]
Customize your trigger keys in Settings > Keyboard:
Space, Fn, etc.Cmd + Space, Ctrl + Shift + V, etc.Fn + Cmd + Space for advanced workflowsFine-tune audio capture in Settings > Audio:
Control your data in Settings > General:
undefinedIto requires specific system permissions to function:
This project is open source under the GNU General Public License. You can:
We welcome contributions! Whether youโre fixing bugs, adding features, or improving documentation, your help makes Ito better for everyone.
devThis project is licensed under the GNU General Public License - see the LICENSE file for details.
undefinedIto is built with and inspired by amazing open source projects: