{"id":50723229,"url":"https://github.com/rjcuff/finn","last_synced_at":"2026-06-10T02:01:37.746Z","repository":{"id":363235842,"uuid":"1262346293","full_name":"rjcuff/finn","owner":"rjcuff","description":"The open source Chat-GPT","archived":false,"fork":false,"pushed_at":"2026-06-08T03:54:14.000Z","size":10141,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-08T04:13:22.439Z","etag":null,"topics":["ai","chatbot","chatgpt","llm","open-source"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rjcuff.png","metadata":{"files":{"readme":"README.md","changelog":null,"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-06-07T22:12:43.000Z","updated_at":"2026-06-08T03:54:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rjcuff/finn","commit_stats":null,"previous_names":["rjcuff/finn"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/rjcuff/finn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rjcuff%2Ffinn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rjcuff%2Ffinn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rjcuff%2Ffinn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rjcuff%2Ffinn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rjcuff","download_url":"https://codeload.github.com/rjcuff/finn/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rjcuff%2Ffinn/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34133404,"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-10T02:00:07.152Z","response_time":89,"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":["ai","chatbot","chatgpt","llm","open-source"],"created_at":"2026-06-10T02:01:37.080Z","updated_at":"2026-06-10T02:01:37.708Z","avatar_url":"https://github.com/rjcuff.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 👍 finn\n\n**A private desktop chat app for local and cloud AI models.**\n\nChat with open models running locally through [Ollama](https://ollama.com), or connect your own OpenAI and Anthropic keys. Local chats never leave your machine — no account, no telemetry.\n\n![Tauri](https://img.shields.io/badge/Tauri-2-24C8DB?logo=tauri\u0026logoColor=white)\n![React](https://img.shields.io/badge/React-19-61DAFB?logo=react\u0026logoColor=white)\n![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?logo=typescript\u0026logoColor=white)\n\n### Download\n\n[![Download for macOS](https://img.shields.io/badge/Download-macOS%20(.dmg)-000000?logo=apple\u0026logoColor=white\u0026style=for-the-badge)](https://github.com/rjcuff/finn/releases/latest)\n\u0026nbsp;\n[![Download for Windows](https://img.shields.io/badge/Download-Windows%20(.exe)-0078D6?logo=windows\u0026logoColor=white\u0026style=for-the-badge)](https://github.com/rjcuff/finn/releases/latest)\n\n\u003csub\u003eGrab the latest `.dmg` (macOS) or `.exe` (Windows) from the [Releases page](https://github.com/rjcuff/finn/releases), or build it yourself — see [Quick start](#quick-start).\u003c/sub\u003e\n\n\u003c/div\u003e\n\n---\n\n## Overview\n\nfinn is a native desktop app for chatting with AI models. It runs open-weight models locally through Ollama, so your conversations stay on your own disk with no account and no internet required once a model is pulled. When you want a frontier model, add an OpenAI or Anthropic API key and pick it from the model switcher — the key is stored locally and used directly from your machine.\n\nBuilt with Rust and Tauri, so it's a small native binary rather than a bundled browser.\n\n## Features\n\n- **Local models** — chat with any [Ollama](https://ollama.com) model. Installed models are detected automatically and your last choice is remembered.\n- **Cloud models** — bring your own OpenAI or Anthropic key to use GPT and Claude models. Keys are stored locally.\n- **Threads \u0026 projects** — chats are titled from your first message, grouped by date, and can be organized into projects. Everything is persisted locally.\n- **Streaming markdown** — responses stream live with tables and syntax-highlighted code blocks with one-click copy.\n- **File attachments** — attach text and code files to include their contents in a message.\n- **Useful controls** — stop and regenerate, copy any message, set a custom system prompt, pull models in-app, and clear all data.\n- **Keyboard shortcuts** — `Ctrl/⌘ N` new chat, `Ctrl/⌘ K` search.\n\n## Quick start\n\n**1. Install [Ollama](https://ollama.com/download) and pull a model:**\n\n```bash\nollama pull llama3.2\n```\n\n**2. Run finn:**\n\n```bash\nnpm install\nnpm run tauri dev\n```\n\nYour model shows up automatically. Open a new chat and start typing.\n\nTo use a cloud model instead, open **Settings → API keys** (or the **Models** screen), paste an OpenAI or Anthropic key, then select the model from the switcher in the top bar.\n\n### Build a desktop binary\n\n```bash\nnpm run tauri build\n```\n\n## Stack\n\n| Layer | Tech |\n|-------|------|\n| Shell | [Tauri 2](https://tauri.app/) — Rust + native WebView |\n| Frontend | React 19, TypeScript, Vite, [TanStack Router](https://tanstack.com/router) |\n| Styling | Tailwind CSS 4, Radix UI, Framer Motion |\n| Models | [Vercel AI SDK](https://sdk.vercel.ai/) — unified streaming over Ollama, OpenAI, and Anthropic |\n| Storage | Tauri Store plugin (local JSON on disk) |\n\nMonorepo via npm workspaces: `core` (shared types), `web-app` (frontend), `src-tauri` (Rust shell).\n\n## Project structure\n\n```\nfinn/\n├── core/        # @finn/core — shared types \u0026 contracts\n├── web-app/     # React + Vite + TypeScript frontend\n│   └── src/\n│       ├── components/   # chat, sidebar, layout, models, settings\n│       ├── stores/       # Zustand state (threads, models, providers, settings)\n│       ├── hooks/        # useChat — streaming engine\n│       └── routes/       # chat, models, settings\n└── src-tauri/   # Rust/Tauri shell + app icons\n```\n\n## Roadmap\n\n- [ ] Packaged \u0026 signed installers\n- [ ] Per-thread model selection\n- [ ] Image and PDF attachments\n\n## Contributing\n\nfinn is open source. Issues, ideas, and PRs are welcome → [github.com/rjcuff/finn](https://github.com/rjcuff/finn).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frjcuff%2Ffinn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frjcuff%2Ffinn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frjcuff%2Ffinn/lists"}