{"id":51150318,"url":"https://github.com/mabaeyens/mira-apps","last_synced_at":"2026-06-26T05:31:06.539Z","repository":{"id":364763168,"uuid":"1202126223","full_name":"mabaeyens/mira-apps","owner":"mabaeyens","description":"Native iOS and macOS companion apps for Mira","archived":false,"fork":false,"pushed_at":"2026-06-21T17:49:36.000Z","size":7355,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-21T19:20:12.230Z","etag":null,"topics":["ios","local-llm","macos","mira","ollama","swift"],"latest_commit_sha":null,"homepage":"https://askmira.es","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mabaeyens.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-05T16:24:20.000Z","updated_at":"2026-06-21T17:49:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mabaeyens/mira-apps","commit_stats":null,"previous_names":["mabaeyens/mira-apps"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/mabaeyens/mira-apps","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mabaeyens%2Fmira-apps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mabaeyens%2Fmira-apps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mabaeyens%2Fmira-apps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mabaeyens%2Fmira-apps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mabaeyens","download_url":"https://codeload.github.com/mabaeyens/mira-apps/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mabaeyens%2Fmira-apps/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34805072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ios","local-llm","macos","mira","ollama","swift"],"created_at":"2026-06-26T05:31:05.751Z","updated_at":"2026-06-26T05:31:06.509Z","avatar_url":"https://github.com/mabaeyens.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mira\n\nA native macOS and iOS chat app for local AI models, built with SwiftUI.\n\nMira runs entirely on your own hardware — no cloud, no subscription, no data leaving your machine. It connects to a local Python server that runs inference on a local backend ([oMLX](https://omlx.ai) by default), embeds documents locally for RAG, and can search the web on your behalf. The iPhone app pairs with the Mac over Bonjour or Tailscale for the same experience on the go.\n\nSee [CHANGELOG.md](CHANGELOG.md) for recent changes.\n\n## Backend\n\nThe apps are the SwiftUI front end for **[mira-core](https://github.com/mabaeyens/mira-core)** — the local FastAPI server that does inference, RAG, web search, and tool calling. The server must be running for the apps to work; see [askmira.es](https://askmira.es) for an overview and TestFlight access.\n\n**Testing it?** Feedback and whether it's useful go in [Discussions](https://github.com/mabaeyens/mira-core/discussions); bugs and crashes go in [Issues](https://github.com/mabaeyens/mira-core/issues/new/choose). I read both.\n\n## Features\n\n- **Local-first** — inference runs on your Mac via oMLX (or dFlash / mlx-lm / Ollama); nothing is sent to external APIs\n- **Streaming responses** — server-sent events for real-time token output\n- **Adaptive thinking** — extended reasoning on complex questions; tri-state toggle (off / adaptive / force-on)\n- **Web search** — the model can search the web and fetch pages when it needs to; sources surface as clickable links\n- **RAG** — attach documents and let the model search them before answering\n- **Long-term memory** — save facts across conversations; model uses them automatically\n- **Voice input** — tap the mic to dictate; live transcription via Apple Speech (on-device, iOS only)\n- **Conversation history** — persistent, named conversations with a sidebar\n- **Markdown rendering** — code blocks, tables, and inline formatting via MarkdownUI\n- **Model picker** — reads available models from the server; adding a model in `mira.yaml` shows up without an app update, and the backend label tracks the active model\n- **iOS companion** — iPhone app connects to the Mac server over WiFi (Bonjour) or remotely (Tailscale over HTTPS), authenticating with a shared bearer token\n- **Splash screens** — animated Mira logo while the server and model load (macOS and iOS)\n- **About screen** — accessible from the macOS app menu and iOS info button\n- **Adaptive app icon** — light, dark, and tinted variants for iOS 18 home screen modes\n- **Dark mode** — warm stone palette\n\n## Requirements\n\n| Component | Version |\n|-----------|---------|\n| Xcode | 26+ |\n| macOS (dev machine) | 26+ |\n| iOS (device) | 26+ |\n| Swift | 6 |\n| Python | 3.12+ (for the server) |\n| oMLX | 0.4.3+ (default inference backend) |\n\nThe server, inference backend, and default model (`Qwen3.6-35B-A3B`) are set up by [mira-core](https://github.com/mabaeyens/mira-core) — see its README for the one-command installer.\n\n## Project structure\n\n```\nOllamaSearch/\n├── Shared/          # Views, ViewModels, Models, Networking — runs on both platforms\n│   ├── Views/       # ChatView, MiraLogo, AboutView, SplashView helpers, …\n│   ├── ViewModels/\n│   ├── Models/\n│   └── Networking/\n├── macOS/           # ServerManager, MacRootView, SplashView, file picker\n├── iOS/             # Bonjour discovery, ConnectionView, file picker\n└── Assets.xcassets/ # App icon (light / dark / tinted), accent colour\nDesign/\n└── AppIcon.svg      # Source SVG for the app icon (eye + star mark)\n```\n\n## Architecture\n\n```\niPhone (Mira iOS)\n    └── Bonjour / Tailscale (HTTPS :8443) ──► Mac (Mira macOS)\n                                                  └── localhost:8000 ──► Python server (FastAPI, mira-core)\n                                                                            ├── oMLX (inference, port 8080)\n                                                                            ├── nomic-embed-text-v1.5 (RAG embeddings, local)\n                                                                            └── web search + page fetch (sources as links)\n```\n\nThe macOS app connects to the Python server ([mira-core](https://github.com/mabaeyens/mira-core)), which runs as a macOS LaunchAgent (`com.mab.mira`) installed separately from the app. oMLX is started and managed by the server. The iOS app discovers the Mac over Bonjour (`_ollamasearch._tcp`) on the local network, or connects manually using a Tailscale hostname.\n\n**The app requires the Mac server to run.** There is no standalone offline mode — inference happens on the Mac. For access outside your home network, install [Tailscale](https://tailscale.com) on both devices and use the **Manual URL** option with your Tailscale hostname (the server listens on HTTPS port `8443` for remote access).\n\nOnce the server is reachable beyond loopback, it requires a shared token. Set `auth_token:` in the server's `mira.yaml` (or the `MIRA_TOKEN` env var); the apps send it as `Authorization: Bearer \u003ctoken\u003e` on every request automatically. See the [mira-core README](https://github.com/mabaeyens/mira-core#access-control) for details.\n\n## iOS icon appearance\n\niOS 18 manages icon appearance (light/dark/tinted) separately from system dark mode. To see the dark icon variant:\n\n\u003e Home screen → long-press → **Customize** → select **Dark** or **Automatic**\n\n## Building\n\nSee [XCODE_SETUP.md](XCODE_SETUP.md) for the full step-by-step Xcode setup.\n\nQuick start for an already-configured project:\n\n1. Ensure the Mira server LaunchAgent is installed and running (see [mira-core](https://github.com/mabaeyens/mira-core))\n2. Open `OllamaSearch.xcodeproj` in Xcode\n3. Select the **macOS** destination → **⌘R**\n4. For iOS, connect your iPhone and select it as the destination → **⌘R**\n\n## Name\n\n*Mira* is the Spanish imperative of *mirar* — \"look\" — and the name of one of the oldest variable stars observed by astronomers, a red giant whose brightness pulses on a 332-day cycle. The pulsing glow in the splash screen is a small nod to that.\n\n## Development Workflow\n\nThis project is the result of a strategic collaboration between human design and AI-assisted code generation.\n\n- **Architecture \u0026 Logic:** Fully defined by the author. This includes app structure, UI/UX decisions, state management patterns, and the client–server contract.\n- **Code Generation:** The syntactic implementation and line-by-line SwiftUI code was written by **Claude Code**, following precise and iterative instructions provided by the author.\n- **Supervision \u0026 Refinement:** All code was manually reviewed, tested on simulator and device, and adjusted to ensure quality, consistency, and compliance with project standards.\n\nThis approach demonstrates the ability to direct advanced AI tools to accelerate development without sacrificing creative control or technical quality.\n\n## Contributing\n\nIssues, ideas, and pull requests are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md) for setup and conventions. Found a security issue? Please follow [SECURITY.md](SECURITY.md) rather than opening a public issue. Feel free to fork this project and build your own.\n\n## License\n\nThis project is licensed under the **MIT License** — see the [`LICENSE`](./LICENSE) file for the full text.\n\n\u003e **Note on authorship:** Although much of the source code was generated by an AI, the creative direction, architecture, and final integration are human work. Usage rights are granted under the terms of the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmabaeyens%2Fmira-apps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmabaeyens%2Fmira-apps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmabaeyens%2Fmira-apps/lists"}