{"id":25916088,"url":"https://github.com/apollo79/signalstats","last_synced_at":"2026-06-23T13:31:36.096Z","repository":{"id":270492551,"uuid":"909805773","full_name":"apollo79/signalstats","owner":"apollo79","description":"Shows stats from a signal backup","archived":false,"fork":false,"pushed_at":"2025-03-17T18:02:53.000Z","size":1367,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-06T00:13:49.987Z","etag":null,"topics":["signal","signal-messenger","statistics"],"latest_commit_sha":null,"homepage":"https://signal-stats.duskflower.dev","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/apollo79.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}},"created_at":"2024-12-29T20:34:51.000Z","updated_at":"2025-03-17T18:02:56.000Z","dependencies_parsed_at":"2025-03-17T23:00:13.622Z","dependency_job_id":null,"html_url":"https://github.com/apollo79/signalstats","commit_stats":null,"previous_names":["apollo79/signal-stats","apollo79/signalstats"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/apollo79/signalstats","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apollo79%2Fsignalstats","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apollo79%2Fsignalstats/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apollo79%2Fsignalstats/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apollo79%2Fsignalstats/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apollo79","download_url":"https://codeload.github.com/apollo79/signalstats/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apollo79%2Fsignalstats/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34691692,"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-23T02:00:07.161Z","response_time":65,"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":["signal","signal-messenger","statistics"],"created_at":"2025-03-03T12:19:11.589Z","updated_at":"2026-06-23T13:31:36.072Z","avatar_url":"https://github.com/apollo79.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Signalstats\n\nThis project lets you see all the statistics of your [Signal](https://signal.org) chats.\n\n- Get insights on your chats: How many messages have you written? At what daytime? Which words do you use the most?\n- Privacy friendly: no data is sent to a server, everything happens on your device\n\nYou can try the hosted version on [signalstats.duskflower.dev](https://signalstats.duskflower.dev) or run the code on your own machine.\nThis project was created as an alternative to [WhatsAnalyze](https://whatsanalyze.com/) for the Signal messenger.\n\n## How it works\n\nSince Signal doesn't let you export chats as unencrypted text or zip files like WhatsApp, the only way to get Signal chat data is to use the backup function. Sadly, local backups are to my knowledge currently only available on Android devices.\n\nA backup contains the database (the database statements needed to create the database) with all the messages, recipients, groups and much more, and also attachments, stickers and avatars.\n\nSince that is quite a big amount of _encrypted_ data (easily multiple GBs), I chose to implement the decryption in [WebAssembly](https://developer.mozilla.org/en-US/docs/WebAssembly) using Rust and tried to optimize the code for performance. The code for the decryption can be found at [signal-decrypt-backup-wasm](https://git.duskflower.dev/duskflower/signal-decrypt-backup-wasm) and is based on [signal_for_android_decryption](https://github.com/mossblaser/signal_for_android_decryption).\n\nAfter the decryption, all the database statements are executed on a WebAssembly database using [@sqlite.org/sqlite-wasm](https://github.com/sqlite/sqlite-wasm) and after that it is possible to execute queries on the database to obtain the data needed for statistics.\n\n## Encountered an issue\n\nPlease report bugs in the [Github issues](https://github.com/apollo79/signalstats/issues).\n\n## Developing and running the code locally\n\nThis project is built as an Single-page application using [SolidJS](https://solidjs.com).\n\n```shell\n# clone the repository\ngit clone https://git.duskflower.dev/duskflower/signalstats.git\n\n# go to the project directory\ncd signalstats\n\n# install the dependencies\npnpm install # or npm install or yarn install\n\n# to run the development version\npnpm dev\n# or\npnpm start\n\n# to build the project\npnpm build\n\n# you can preview the build by running\npnpm serve\n```\n\n`pnpm build` will create the `dist` folder which you can serve as a static site.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapollo79%2Fsignalstats","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapollo79%2Fsignalstats","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapollo79%2Fsignalstats/lists"}