{"id":48267946,"url":"https://github.com/guillevc/satfolio","last_synced_at":"2026-04-04T22:00:05.223Z","repository":{"id":344865737,"uuid":"1182646231","full_name":"guillevc/satfolio","owner":"guillevc","description":"Local-only Bitcoin portfolio tracker. Import Kraken/Coinbase exports, see your break-even price and P\u0026L.","archived":false,"fork":false,"pushed_at":"2026-03-16T23:49:55.000Z","size":2804,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-17T04:19:03.975Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/guillevc.png","metadata":{"files":{"readme":"README.md","changelog":null,"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-03-15T19:43:55.000Z","updated_at":"2026-03-16T23:49:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/guillevc/satfolio","commit_stats":null,"previous_names":["guillevc/satfolio"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/guillevc/satfolio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guillevc%2Fsatfolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guillevc%2Fsatfolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guillevc%2Fsatfolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guillevc%2Fsatfolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/guillevc","download_url":"https://codeload.github.com/guillevc/satfolio/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/guillevc%2Fsatfolio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31416299,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-04-04T22:00:01.546Z","updated_at":"2026-04-04T22:00:05.213Z","avatar_url":"https://github.com/guillevc.png","language":"Rust","funding_links":["https://ko-fi.com/guillevc","https://github.com/sponsors/guillevc"],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003e Satfolio\n  \u003ca href=\"https://github.com/guillevc/satfolio/actions/workflows/ci.yaml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/guillevc/satfolio/ci.yaml?style=flat\u0026labelColor=black\u0026label=ci\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/guillevc/satfolio/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/guillevc/satfolio?style=flat\u0026labelColor=black\" alt=\"Latest release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/guillevc/satfolio/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/badge/macOS-black?style=flat\u0026labelColor=black\u0026logo=apple\u0026logoColor=white\" alt=\"macOS\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/guillevc/satfolio/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/badge/Linux-black?style=flat\u0026labelColor=black\u0026logo=linux\u0026logoColor=white\" alt=\"Linux\" /\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/local--only-black?style=flat\u0026labelColor=black\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiPjxyZWN0IHg9IjMiIHk9IjExIiB3aWR0aD0iMTgiIGhlaWdodD0iMTEiIHJ4PSIyIi8+PHBhdGggZD0iTTcgMTFWN2E1IDUgMCAwIDEgMTAgMHY0Ii8+PC9zdmc+\" alt=\"Local only\" /\u003e\n  \u003ca href=\"https://github.com/guillevc/satfolio/attestations\"\u003e\u003cimg src=\"https://img.shields.io/badge/Sigstore-black?style=flat\u0026labelColor=black\u0026logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Ik0xMiAyMnM4LTQgOC0xMFY1bC04LTMtOCAzdjdjMCA2IDggMTAgOCAxMHoiLz48cGF0aCBkPSJtOSAxMiAyIDIgNC00Ii8+PC9zdmc+\" alt=\"Sigstore\" /\u003e\u003c/a\u003e\n\u003c/h1\u003e\n\nKnow exactly where you stand with your Bitcoin. Import trades from Kraken or Coinbase and see your break-even price, P\u0026L, and total position — calculated and stored locally on your machine, no accounts or cloud required.\n\n\u003cimg src=\"docs/dashboard.png\" alt=\"Satfolio dashboard\" /\u003e\n\n## Features\n\n- **Import trades** from Kraken and Coinbase CSV exports — re-import safely without duplicates\n- **Dashboard** showing current BTC price, break-even price, total holdings, and unrealized P\u0026L\n- **Price chart** with daily prices, break-even line, and trade markers\n- **Trade history** table with running break-even price and realized P\u0026L per trade\n- **Multi-currency** — supports EUR, USD, and GBP, formatted for your locale\n- **Auto-update** — get notified when a new version is available and install it without leaving the app\n- **Private by default** — no accounts, no analytics, no telemetry. Your data never leaves your machine. The app connects to the internet for two things only: live BTC price (Kraken public API) and update checks (GitHub Releases).\n\n## Install\n\nDownload the latest release from the [Releases](https://github.com/guillevc/satfolio/releases) page.\n\n| Platform              | File                             |\n| --------------------- | -------------------------------- |\n| macOS (Apple Silicon) | `Satfolio_\u003cversion\u003e_aarch64.dmg` |\n| macOS (Intel)         | `Satfolio_\u003cversion\u003e_x64.dmg`     |\n| Linux (x64)           | `.deb`, `.rpm`, or `.AppImage`   |\n\n### macOS\n\n\u003e [!NOTE]\n\u003e macOS shows a warning because Satfolio isn't signed through Apple's paid developer program. The app is open source and every release is verifiably built from this repo — see [Security \u0026 trust](#security--trust).\n\n1. Open the `.dmg` and drag Satfolio to **Applications**\n2. Try to open Satfolio — macOS will show a warning and block it\n3. Open **System Settings → Privacy \u0026 Security**\n4. Under Security, click **Open Anyway**\n5. Enter your login password and click **OK**\n\nThis is only needed once — after that, Satfolio opens normally. See [Apple's support page](https://support.apple.com/guide/mac-help/open-a-mac-app-from-an-unknown-developer-mh40616/mac) for more details.\n\nAlternatively, run this in Terminal:\n\n```sh\nxattr -d com.apple.quarantine /Applications/Satfolio.app\n```\n\n## Security \u0026 trust\n\nThis project is free and open source. Apple's Developer Program costs 99€/year, so instead of paying for a code signature, every release is built transparently in public CI and cryptographically signed via [Sigstore](https://www.sigstore.dev).\n\nEach binary has a [build provenance attestation](https://docs.github.com/en/actions/security-for-github-actions/using-artifact-attestations) so you can verify exactly how it was built.\n\n```sh\n# verify your download matches the checksum shown in the release assets\nshasum -a 256 \u003cfilename\u003e\n\n# verify the binary was built from this repo's source code (requires GitHub CLI)\ngh attestation verify \u003cfilename\u003e --owner guillevc\n```\n\n## Build from source\n\n```sh\ngit clone https://github.com/guillevc/satfolio.git\ncd satfolio\nmise install      # install toolchain (node, pnpm, rust, just)\njust install      # install frontend dependencies\njust build        # build the Tauri app\n```\n\nRequires [mise](https://mise.jdx.dev) (or manually: just, Rust, Node.js, pnpm) and [Tauri 2 prerequisites](https://v2.tauri.app/start/prerequisites/).\n\n## Development\n\nAfter cloning and running `mise install` and `just install` (see [Build from source](#build-from-source)):\n\n```sh\njust dev       # run in development mode\njust check     # typecheck + lint + format check\njust test      # run all tests\n```\n\nRun `just` to see all available recipes.\n\n## Support\n\nIf you find Satfolio useful, consider supporting its development:\n\n\u003cp\u003e\n  \u003ca href=\"https://ko-fi.com/guillevc\" target=\"_blank\"\u003e\u003cimg height=\"36\" style=\"border:0px;height:36px;\" src=\"https://storage.ko-fi.com/cdn/kofi1.png?v=6\" border=\"0\" alt=\"Buy Me a Coffee at ko-fi.com\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/sponsors/guillevc\"\u003e\u003cimg src=\"https://img.shields.io/badge/GitHub_Sponsors-EA4AAA?style=flat\u0026logo=githubsponsors\u0026logoColor=white\" alt=\"GitHub Sponsors\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n**Bitcoin:**\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cstrong\u003eLightning\u003c/strong\u003e\u003cbr /\u003e\n      \u003ccode\u003eguille@guillevc.dev\u003c/code\u003e\u003cbr /\u003e\u003cbr /\u003e\n      \u003cimg src=\"docs/donate-lightning-qr.svg\" alt=\"Lightning address QR code\" width=\"180\" /\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cstrong\u003eOn-chain\u003c/strong\u003e\u003cbr /\u003e\n      \u003ccode\u003ebc1q3hvgvmw9qpqvl0z6r9uqdz3v5405xdgwt44pgq\u003c/code\u003e\u003cbr /\u003e\u003cbr /\u003e\n      \u003cimg src=\"docs/donate-onchain-qr.svg\" alt=\"Bitcoin address QR code\" width=\"180\" /\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## License\n\n[AGPL-3.0](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguillevc%2Fsatfolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguillevc%2Fsatfolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguillevc%2Fsatfolio/lists"}