{"id":50517459,"url":"https://github.com/devlikebear/linetta","last_synced_at":"2026-06-14T08:01:45.750Z","repository":{"id":359954147,"uuid":"1247178753","full_name":"devlikebear/linetta","owner":"devlikebear","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-14T06:20:46.000Z","size":4859,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T06:24:29.070Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devlikebear.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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-05-23T01:52:08.000Z","updated_at":"2026-06-14T06:20:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/devlikebear/linetta","commit_stats":null,"previous_names":["devlikebear/linetta"],"tags_count":62,"template":false,"template_full_name":null,"purl":"pkg:github/devlikebear/linetta","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlikebear%2Flinetta","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlikebear%2Flinetta/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlikebear%2Flinetta/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlikebear%2Flinetta/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devlikebear","download_url":"https://codeload.github.com/devlikebear/linetta/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlikebear%2Flinetta/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34313515,"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-14T02:00:07.365Z","response_time":62,"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":[],"created_at":"2026-06-03T01:01:28.504Z","updated_at":"2026-06-14T08:01:45.744Z","avatar_url":"https://github.com/devlikebear.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Linetta\n\nLinetta is a local-first desktop writing app for long-form fiction. The app keeps the writer in a focused Tauri workspace while a bundled Go engine handles SQLite persistence, snapshots, markdown import/export, AI generation, companion chat, background summaries, daily backups, and optional Git sync.\n\n## Stack\n\n- Tauri 2 Rust shell + React 18 + Vite + TypeScript\n- Go engine over JSONRPC stdio\n- SQLite under the local Linetta data directory\n- `github.com/devlikebear/tars` for LLM provider integration\n\n## Install\n\nOn macOS (Apple Silicon) install the prebuilt app from the Homebrew tap:\n\n```sh\nbrew tap devlikebear/tap\nbrew install --cask linetta\n```\n\nThe fully qualified `devlikebear/tap/linetta` cask name also works in a single `brew install` without a separate `brew tap` step.\n\nLinetta is not notarized yet. The Homebrew cask clears the quarantine attribute after install so macOS can launch the app while the project is still a hobby release. If macOS reports that an older app is damaged, reinstall the latest cask first:\n\n```sh\nbrew update\nbrew reinstall --cask linetta\n```\n\nIf you are intentionally running an older cask before the post-install fix, clear the quarantine attribute once:\n\n```sh\nxattr -dr com.apple.quarantine \"/Applications/Linetta.app\"\n```\n\nOther platforms (Linux, Windows) and Intel Macs are not yet covered by a prebuilt download — build from source with `make build-desktop` (see below).\n\n## Development\n\nInstall dependencies in the desktop app once:\n\n```sh\ncd apps/desktop\npnpm install\n```\n\nBuild the sidecar engine and start the desktop app:\n\n```sh\nmake dev\n```\n\nThis wraps `scripts/dev.sh`, which builds the Go engine once and then launches `tauri dev`.\n\nBuild only the sidecar engine:\n\n```sh\nmake build-engine\n```\n\nBuild the desktop release binary for the current operating system:\n\n```sh\nmake build-desktop\n```\n\nSearch is available from the Library search button, the Library menu, the Workspace command palette, and `Cmd+F` / `Ctrl+F` in the Workspace. Results search visible projects by project title, scene label/title, and scene body text.\n\n## AI Companion Tools\n\nThe `cmd+j` companion chat runs through the TARS agent loop. When the active provider supports tool calls, Linetta exposes these built-in tools:\n\n- `web_search`: searches the web through Brave Search or Perplexity Sonar.\n- `web_fetch`: fetches a URL and returns extracted text with SSRF protection.\n- `linetta_apply_ops`: updates Linetta story state directly, including outline, storylines, beats, characters, relationships, places, scenes, summaries, and memories.\n\nConfigure `web_search` in Settings under **LLM 도구**. The provider and API key are stored locally in `settings.json`; `web_fetch` does not require a key.\n\n## Verification\n\nRun the full local gate:\n\n```sh\nmake test\n```\n\nUseful narrower checks:\n\n```sh\nmake test-go\nmake test-desktop\nmake test-tauri\n```\n\n`make test` runs Go tests, frontend Vitest tests, the Vite production build, and Rust `cargo check`.\n\n## Versioning And Builds\n\nKeep all app version surfaces aligned with:\n\n```sh\nmake bump-version VERSION=0.2.0\n```\n\nThis updates the desktop `package.json`, Tauri config, Cargo metadata, lockfile package entry, and Go engine diagnostics version.\n\nGitHub Actions:\n\n- `.github/workflows/ci.yml`: runs `make test` on PRs and pushes to `main`.\n- `.github/workflows/build.yml`: builds OS-specific Tauri artifacts on `workflow_dispatch` and `v*` tags for macOS, Linux, and Windows.\n\n## Data And Safety\n\nLinetta stores all writing data locally. Set `LINETTA_HOME` to override the data directory; otherwise the per-OS defaults are:\n\n```text\nmacOS    ~/Library/Application Support/com.devlikebear.linetta\nLinux    ${XDG_DATA_HOME:-~/.local/share}/com.devlikebear.linetta\nWindows  %APPDATA%\\com.devlikebear.linetta\n```\n\nImportant files and folders:\n\n- `library.db`: main SQLite database (projects, scenes, entities, and version snapshots)\n- `settings.json`: app preferences\n- `backups/YYYY-MM-DD/library-HHMMSS.db`: daily full-database backups, kept for 14 days\n- `companion/`: companion transcript and memory files\n\nLinetta keeps two layers of history. Daily backups (above) snapshot the whole database; scene-level **version snapshots** live inside `library.db`. Manual and AI-replace snapshots are kept indefinitely, while autosave snapshots are thinned over time (all kept for the first 24 hours, then one per hour up to 30 days, then one per day).\n\nGit sync is optional. When configured in Settings, Linetta exports active projects as markdown into the selected Git repository, then runs `git add`, `git commit`, and `git push` using the system Git credentials.\n\n## Troubleshooting\n\n- Engine startup failure: the desktop shell shows an engine diagnostic screen with retry and copy-diagnostics actions.\n- Missing sidecar binary: run `make build-engine`, then restart the app.\n- AI provider errors: check Settings for the selected provider and confirm the corresponding CLI credentials work in the same shell environment.\n- Backup or Git sync failures: open Settings and check the operation status cards for the latest error and timestamp.\n\n## License\n\nLinetta is licensed under the GNU Affero General Public License version 3 only\n(`AGPL-3.0-only`). See [LICENSE](LICENSE) and [LICENSE-NOTICE.md](LICENSE-NOTICE.md)\nfor details, including commercial licensing options.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevlikebear%2Flinetta","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevlikebear%2Flinetta","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevlikebear%2Flinetta/lists"}