{"id":13841169,"url":"https://github.com/projectdiscovery/notify","last_synced_at":"2025-05-13T19:12:38.002Z","repository":{"id":37652286,"uuid":"310094389","full_name":"projectdiscovery/notify","owner":"projectdiscovery","description":"Notify is a Go-based assistance package that enables you to stream the output of several tools (or read from a file) and publish it to a variety of supported platforms.","archived":false,"fork":false,"pushed_at":"2025-04-21T23:22:45.000Z","size":1203,"stargazers_count":1433,"open_issues_count":20,"forks_count":145,"subscribers_count":23,"default_branch":"main","last_synced_at":"2025-05-08T00:45:54.599Z","etag":null,"topics":["discord","slack","telegram"],"latest_commit_sha":null,"homepage":"https://projectdiscovery.io","language":"Go","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/projectdiscovery.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2020-11-04T19:09:47.000Z","updated_at":"2025-05-06T08:45:21.000Z","dependencies_parsed_at":"2024-08-27T01:48:25.755Z","dependency_job_id":"196a7ada-31bb-4072-8462-5c48a49d056f","html_url":"https://github.com/projectdiscovery/notify","commit_stats":{"total_commits":166,"total_committers":16,"mean_commits":10.375,"dds":0.7530120481927711,"last_synced_commit":"64f9fc4e6b79886b0674b6026bb0446174911f2f"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectdiscovery%2Fnotify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectdiscovery%2Fnotify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectdiscovery%2Fnotify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectdiscovery%2Fnotify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/projectdiscovery","download_url":"https://codeload.github.com/projectdiscovery/notify/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254010815,"owners_count":21998993,"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","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":["discord","slack","telegram"],"created_at":"2024-08-04T17:01:03.677Z","updated_at":"2025-05-13T19:12:37.978Z","avatar_url":"https://github.com/projectdiscovery.png","language":"Go","readme":"\u003ch1 align=\"center\"\u003e\n  \u003cimg src=\"static/notify-logo.png\" alt=\"notify\" width=\"200px\"\u003e\n  \u003cbr\u003e\n\u003c/h1\u003e\n\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-_red.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/projectdiscovery/notify/issues\"\u003e\u003cimg src=\"https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat\"\u003e\u003c/a\u003e\n\u003ca href=\"https://goreportcard.com/badge/github.com/projectdiscovery/notify\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/projectdiscovery/notify\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/projectdiscovery/notify/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release/projectdiscovery/notify\"\u003e\u003c/a\u003e\n\u003ca href=\"https://hub.docker.com/r/projectdiscovery/notify\"\u003e\u003cimg src=\"https://img.shields.io/docker/pulls/projectdiscovery/notify.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://twitter.com/pdiscoveryio\"\u003e\u003cimg src=\"https://img.shields.io/twitter/follow/pdiscoveryio.svg?logo=twitter\"\u003e\u003c/a\u003e\n\u003ca href=\"https://discord.gg/projectdiscovery\"\u003e\u003cimg src=\"https://img.shields.io/discord/695645237418131507.svg?logo=discord\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e •\n  \u003ca href=\"#notify-installation\"\u003eInstallation\u003c/a\u003e •\n  \u003ca href=\"#provider-config\"\u003eProviders\u003c/a\u003e •\n  \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e •\n  \u003ca href=\"#running-notify\"\u003eRunning Notify\u003c/a\u003e •\n  \u003ca href=\"#notes\"\u003eNotes\u003c/a\u003e •\n  \u003ca href=\"https://discord.gg/projectdiscovery\"\u003eJoin Discord\u003c/a\u003e\n\u003c/p\u003e\n\n\nNotify is a Go-based assistance package that enables you to stream the output of several tools (or read from a file) and publish it to a variety of supported platforms.\n\n\u003ch1 align=\"left\"\u003e\n  \u003cimg src=\"static/notify-httpx.png\" alt=\"notify-httpx\" width=\"700px\"\u003e\n  \u003cbr\u003e\n\u003c/h1\u003e\n\n# Features\n\n- Supports for Slack / Discord / Telegram\n- Supports for Pushover / Email\n- Supports for Microsoft Teams / Google Chat\n- Supports for File / Pipe input\n- Supports Line by Line / Bulk Post\n- Supports using Single / Multiple providers\n- Supports Custom Web-hooks\n- Supports Custom data formatting \n\n\n# Usage\n\n```sh\nnotify -h\n```\n\nThis will display help for the tool. Here are all the switches it supports.\n\n| Flag                    | Description                                        | Example                               |\n|-------------------------|----------------------------------------------------|---------------------------------------|\n| `-bulk`                 | enable bulk processing                             | `notify -bulk`                        |\n| `-char-limit`           | max character limit per message (default 4000)     | `notify -cl 2000`                     |\n| `-config`               | notify configuration file                          | `notify -config config.yaml`          |\n| `-data`                 | input file to send for notify                      | `notify -i test.txt`                  |\n| `-delay`                | delay in seconds between each notification         | `notify -d 2`                         |\n| `-id`                   | id to send the notification to (optional)          | `notify -id recon,scans`              |\n| `-msg-format`           | add custom formatting to message                   | `notify -mf Hey {{data}}`             |\n| `-no-color`             | disable colors in output                           | `notify -nc`                          |\n| `-provider-config`      | provider config path                               | `notify -pc provider.yaml`            |\n| `-provider`             | provider to send the notification to (optional)    | `notify -p slack,telegram`            |\n| `-proxy`                | HTTP/SOCKSv5 proxy to use with notify              | `notify -proxy http://127.0.0.1:8080` |\n| `-rate-limit`           | maximum number of HTTP requests to send per second | `notify -rl 1`                        |\n| `-silent`               | enable silent mode                                 | `notify -silent`                      |\n| `-verbose`              | enable verbose mode                                | `notify -verbose`                     |\n| `-version`              | display version                                    | `notify -version`                     |\n| `-update`               | updates to latest version                          | `notify -update`                      |\n| `-disable-update-check` | disables automatic update check                    | `notify -duc`                         |\n\n# Notify Installation\n\n```sh\ngo install -v github.com/projectdiscovery/notify/cmd/notify@latest\n```\n\n### Provider Config\n\nThe default provider config file can be created at `$HOME/.config/notify/provider-config.yaml` and can have the following contents:\n\n```yaml\nslack:\n  - id: \"slack\"\n    slack_channel: \"recon\"\n    slack_username: \"test\"\n    slack_format: \"{{data}}\"\n    slack_webhook_url: \"https://hooks.slack.com/services/XXXXXX\"\n\n  - id: \"vulns\"\n    slack_channel: \"vulns\"\n    slack_username: \"test\"\n    slack_format: \"{{data}}\"\n    slack_webhook_url: \"https://hooks.slack.com/services/XXXXXX\"\n\ndiscord:\n  - id: \"crawl\"\n    discord_channel: \"crawl\"\n    discord_username: \"test\"\n    discord_format: \"{{data}}\"\n    discord_webhook_url: \"https://discord.com/api/webhooks/XXXXXXXX\"\n\n  - id: \"subs\"\n    discord_channel: \"subs\"\n    discord_username: \"test\"\n    discord_format: \"{{data}}\"\n    discord_webhook_url: \"https://discord.com/api/webhooks/XXXXXXXX\"\n\ntelegram:\n  - id: \"tel\"\n    telegram_api_key: \"XXXXXXXXXXXX\"\n    telegram_chat_id: \"XXXXXXXX\"\n    telegram_format: \"{{data}}\"\n    telegram_parsemode: \"Markdown\" # None/Markdown/MarkdownV2/HTML (https://core.telegram.org/bots/api#formatting-options)\n\npushover:\n  - id: \"push\"\n    pushover_user_key: \"XXXX\"\n    pushover_api_token: \"YYYY\"\n    pushover_format: \"{{data}}\"\n    pushover_devices:\n      - \"iphone\"\n\nsmtp:\n  - id: email\n    smtp_server: mail.example.com\n    smtp_username: test@example.com\n    smtp_password: password\n    from_address: from@email.com\n    smtp_cc:\n      - to@email.com\n    smtp_format: \"{{data}}\"\n    subject: \"Email subject\"\n    smtp_html: false\n    smtp_disable_starttls: false\n\ngooglechat:\n  - id: \"gc\"\n    key: \"XXXXXXXX\"\n    token: \"XXXXXX\"\n    space: \"XXXXXX\"\n    google_chat_format: \"{{data}}\"\n\nteams:\n  - id: \"recon\"\n    teams_webhook_url: \"https://\u003cdomain\u003e.webhook.office.com/webhookb2/xx@xx/IncomingWebhook/xx\"\n    teams_format: \"{{data}}\"\n\ngotify:\n  - id: 'gotify'\n    gotify_host: 'XXXXXX'\n    gotify_port: '80'\n    gotify_token: 'XXXXXX'\n    gotify_format: '{{data}}'\n    gotify_disabletls: false\n    gotify_title: \"recon\"\n\ncustom:\n  - id: webhook\n    custom_webhook_url: http://host/api/webhook\n    custom_method: GET\n    custom_format: '{{data}}'\n    custom_headers:\n      Content-Type: application/json\n      X-Api-Key: XXXXX\n      \ncustom:\n  - id: webhookJson\n    custom_webhook_url: http://host/api/webhook\n    custom_method: GET\n    custom_format: '{\"text\":{{dataJsonString}} }'\n    custom_headers:\n      Content-Type: application/json\n      X-Api-Key: XXXXX\n\ncustom:\n  - id: webhook\n    custom_webhook_url: http://host/api/webhook\n    custom_method: GET\n    custom_sprig: '{\"text\":\"{{ .url }}\"}'\n    custom_headers:\n      Content-Type: application/json\n      X-Api-Key: XXXXX\n``` \n\n# Running Notify\n\nNotify supports piping output of any tool or output file and send it to configured provider/s (e.g, discord, slack channel) as notification.\n\n### Send notification using piped(stdin) output\n\n```sh\nsubfinder -d hackerone.com | notify -bulk\n```\n\n\u003ch1 align=\"left\"\u003e\n\u003cimg width=\"365\" alt=\"notify-subfinder\" src=\"https://user-images.githubusercontent.com/8293321/130240854-e3031bc6-ecc8-47f8-9654-4c58e09cc622.png\"\u003e\n\u003c/h1\u003e\n\n### Send notification using output file\n\n\n```sh\nsubfinder -d hackerone.com -o h1.txt; notify -data h1.txt\n```\n\n### Send notification using output file in bulk mode\n\n\n```sh\nsubfinder -d hackerone.com -o h1.txt; notify -data h1.txt -bulk\n```\n\n### Send notification using output file to specific provider's\n\n\n```sh\nsubfinder -d hackerone.com -o h1.txt; notify -data h1.txt -bulk -provider discord,slack\n```\n\n### Send notification using output file to specific ID's\n\n\n```sh\nsubfinder -d hackerone.com -o h1.txt; notify -data h1.txt -bulk -id recon,vulns,scan\n```\n\n### Example Uses\n\nFollowing command will enumerate subdomains using [SubFinder](https://github.com/projectdiscovery/subfinder) and probe alive URLs using [httpx](https://github.com/projectdiscovery/httpx), runs [Nuclei](https://github.com/projectdiscovery/nuclei) templates and send the nuclei results as a notifications to configured provider/s.\n\n\n```sh\nsubfinder -d intigriti.com | httpx | nuclei -tags exposure -o output.txt; notify -bulk -data output.txt\n```\n\n\n### Provider Config\n\n\nThe tool tries to use the default provider config (`$HOME/.config/notify/provider-config.yaml`), it can also be specified via CLI by using **provider-config** flag.\n\nTo run the tool with custom provider config, just use the following command.\n\n```sh\nnotify -provider-config providers.yaml\n```\n\n### Notify Config\n\nNotify flags can be configured at default config (`$HOME/.config/notify/config.yaml`) or custom config can be also provided using `config` flag.\n\n## Notes\n- As default notify sends notification line by line\n- Use `-bulk` to send notification as entire message/s (messages might be chunked)\n\n## References\n\n- [Creating Slack webhook](https://slack.com/intl/en-it/help/articles/115005265063-Incoming-webhooks-for-Slack)\n- [Creating Discord webhook](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks)\n- [Creating Telegram bot](https://core.telegram.org/bots#3-how-do-i-create-a-bot)\n- [Creating Pushover Token](https://github.com/containrrr/shoutrrr/blob/main/docs/services/pushover.md)\n\nNotify is made with 🖤 by the [projectdiscovery](https://projectdiscovery.io) team.\n","funding_links":[],"categories":["Go (531)","Go","Miscellaneous","DevOps"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprojectdiscovery%2Fnotify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprojectdiscovery%2Fnotify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprojectdiscovery%2Fnotify/lists"}