{"id":25072509,"url":"https://github.com/bixat/github_snitch","last_synced_at":"2026-01-11T04:08:11.390Z","repository":{"id":62352663,"uuid":"551081627","full_name":"bixat/github_snitch","owner":"bixat","description":"Flutter package for open github issue for crashes, issues \u0026 proposals","archived":false,"fork":false,"pushed_at":"2024-04-01T08:40:18.000Z","size":383,"stargazers_count":10,"open_issues_count":6,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-29T01:14:37.983Z","etag":null,"topics":["dart","flutter","github","reporter"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/github_snitch","language":"Dart","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/bixat.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}},"created_at":"2022-10-13T20:10:24.000Z","updated_at":"2024-02-18T02:29:22.000Z","dependencies_parsed_at":"2023-10-01T22:49:35.850Z","dependency_job_id":"dd231d84-14b3-4258-8f66-f4931e43d1fe","html_url":"https://github.com/bixat/github_snitch","commit_stats":{"total_commits":52,"total_committers":2,"mean_commits":26.0,"dds":"0.23076923076923073","last_synced_commit":"462e3052d73eab11abb65836e26627af992d31c3"},"previous_names":["bixat/github_snitch"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/bixat/github_snitch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bixat%2Fgithub_snitch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bixat%2Fgithub_snitch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bixat%2Fgithub_snitch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bixat%2Fgithub_snitch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bixat","download_url":"https://codeload.github.com/bixat/github_snitch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bixat%2Fgithub_snitch/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268867894,"owners_count":24320461,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-05T02:00:12.334Z","response_time":2576,"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":["dart","flutter","github","reporter"],"created_at":"2025-02-06T22:29:44.850Z","updated_at":"2026-01-11T04:08:11.350Z","avatar_url":"https://github.com/bixat.png","language":"Dart","readme":"# GitHub Snitch\n\nGitHub Snitch is a Flutter package that helps you report bugs and issues on GitHub automatically. It can also be used to submit comments on existing issues.\ndemo for testing : https://gh-snitch.web.app\n\n\n## Features\n- Report bugs on GitHub issues with specific labels, assignees, and milestones\n  - Automatically when calling the `listenToExceptions` method in `main` as shown in the example\n  - Manually with the `report` method\n- Support offline cases (save locally and send later when a connection exists)\n- Get reported issues with all comments\n- Submit comments from the user and reply from GitHub issues by repository owners\n- Include screenshots in the report for better issue clarification.\n- Handled duplicated reports by added comment (+1) for duplicate issues\n- Use onReport method for handle api integrations\n- Create follow labels for package\n\t- GhSnitch-external for Errors not caught by Flutter Framework\n\t- GhSnitch-internal for Errors caught by Flutter Framework\n  - Reported by GhSnitch Package for knowing which issues are reported from this package\n\n## Upcoming features\n- Support notifications for chat with user and repository owners\n\n## Tips\n\u003e [!TIP]\n\u003e Is preferable to use empty repo for reporting issues \u0026 bugs then transfer important items to main repo\n\n\u003e [!TIP]\n\u003e For send screenshot to user from issue comment use some website for upload image and add link to comment, don't use screenshot from github repo because it will not work\n\n\u003e [!TIP]\n\u003e You can use ready screens by call `GhSnitch.openReportScreen(context);` or build ypu screens and use methods like `GhSnitch.report` \u0026 `GhSnitch.submitComment` to submit issues \u0026 comments\n\n\u003e [!TIP]\n\u003e Create branch for upload screenshots with name `screenshots` or any name you want but you need to pass this name to `screenShotBranch` parameter in `GhSnitch.report` method if you used `GhSnitch.openReportScreen(context);` you should use `screenshots` name\n\n## Getting Started\n\nAfter install package you need to generate [fine-grained personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) choose fine-grained personal access token \u0026 select your repo \u0026 from Repository permissions check Issues\nAccess: Read and write.\n\nWe need also `owner username` \u0026 `repo name`\n\nWe will use Environment variables for save this sensive keys\n## Usage\n\nFor run or build app just pass --dart-define for every key as example :\n\n```\nflutter build apk --split-per-abi --dart-define owner=owner --dart-define repo=repo --dart-define token=token\n```\n\nThen Add this code before runApp method\nAs you see we used keys from Environment\n```dart\nWidgetsFlutterBinding.ensureInitialized();\n  const String owner = String.fromEnvironment('owner');\n  String appFlavor = 'x';\n  String appVersion = '2.0.0';\n  GhSnitch.initialize(\n      owner: owner,\n      token: const String.fromEnvironment('token'),\n      repo: const String.fromEnvironment(\"repo\"));\n  if (kReleaseMode) {\n    // For report exceptions \u0026 bugs Automaticlly\n    GhSnitch.listenToExceptions(assignees: [owner], labels: [appFlavor, appVersion]);\n  }\n  runApp(const MyApp());\n```\nNow that GitHub Snitch is initialized, you can start reporting bugs and issues. To do this, you can call the `report` method:\n\n```dart\nGhSnitch.report(\n  title: '\u003cissue-title\u003e',\n  body: '\u003cissue-body\u003e',\n  screenShot: '\u003cscreenshot-url\u003e',\n  screenShotBranch: '\u003cscreenshot-branch\u003e',\n  labels: \u003cList\u003cString\u003e?\u003e,\n  assignees: \u003cList\u003cString\u003e?\u003e,\n  milestone: '\u003cmilestone\u003e if null will create new milestone with app version name',\n  userId: '\u003cuser-id if exist if not package will use deviceID\u003e',\n);\n```\n\nThe `report` method takes the following parameters:\n\n* `title`: The title of the issue.\n* `body`: The body of the issue.\n* `screenShot`: The URL of the screenshot.\n* `screenShotBranch`: parameter specifies the branch of the repository where the screenshot will be saved.\n* `labels`: A list of labels for the issue.\n* `assignees`: A list of users to assign the issue to.\n* `milestone`: The milestone to associate the issue with.\n\n## Listening to Exceptions\n\nGitHub Snitch can also be used to listen to exceptions and bugs. To do this, you can call the `listenToExceptions` method:\n\n```\nGhSnitch.listenToExceptions(\n  assignees: \u003cList\u003cString\u003e?\u003e,\n  milestone: \u003cint?\u003e,\n);\n```\n\nThe `listenToExceptions` method takes the following parameters:\n\n* `assignees`: A list of users to assign the issue to.\n* `milestone`: The milestone to associate the issue with.\n\nWhen an exception or bug is detected, GitHub Snitch will automatically create an issue on GitHub.\n\n## Submitting Comments\n\nGitHub Snitch can also be used to submit comments on existing issues. To do this, you can call the `submitComment` method:\n\n```dart\nGhSnitch.submitComment(\n  reportId: '\u003cissue-id\u003e',\n  comment: '\u003ccomment-text\u003e',\n);\n```\n\nThe `submitComment` method takes the following parameters:\n\n* `reportId`: The ID of the issue.\n* `comment`: The text of the comment.\n\n## Conclusion\n\nGitHub Snitch is a powerful tool that can help you keep track of bugs and issues on GitHub. It can also be used to submit comments on existing issues. If you're looking for a way to improve your GitHub workflow, I highly recommend checking out GitHub Snitch.\n\nFeel free to contribute to this package by opening issues or submitting pull requests on [GitHub ↗](https://github.com/M97Chahboun/github_snitch).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbixat%2Fgithub_snitch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbixat%2Fgithub_snitch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbixat%2Fgithub_snitch/lists"}