{"id":24269803,"url":"https://github.com/pteich/fofiwano","last_synced_at":"2025-08-29T02:38:25.180Z","repository":{"id":57569644,"uuid":"74877749","full_name":"pteich/fofiwano","owner":"pteich","description":"💡 Watcher for folder and file modifications that sends Slack notifications, HTTP requests or execute programs","archived":false,"fork":false,"pushed_at":"2019-02-17T20:18:18.000Z","size":25,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-06T11:24:11.761Z","etag":null,"topics":["filesystem","go","incron","notifications","slack","watcher"],"latest_commit_sha":null,"homepage":"","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/pteich.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}},"created_at":"2016-11-27T09:12:14.000Z","updated_at":"2024-05-06T00:53:04.000Z","dependencies_parsed_at":"2022-09-15T21:23:11.133Z","dependency_job_id":null,"html_url":"https://github.com/pteich/fofiwano","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/pteich/fofiwano","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pteich%2Ffofiwano","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pteich%2Ffofiwano/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pteich%2Ffofiwano/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pteich%2Ffofiwano/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pteich","download_url":"https://codeload.github.com/pteich/fofiwano/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pteich%2Ffofiwano/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272612205,"owners_count":24964388,"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-29T02:00:10.610Z","response_time":87,"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":["filesystem","go","incron","notifications","slack","watcher"],"created_at":"2025-01-15T15:08:15.916Z","updated_at":"2025-08-29T02:38:25.152Z","avatar_url":"https://github.com/pteich.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Watcher and Notifications for File and Folder changes\n\nA small CLI tool that watches folders or files for modifications like added, changed or deleted files. It then sends a notification to a specific endpoint, e.g. a Slack channel, an URL (HTTP request) or execute a command. \n\nIt makes use of the [github.com/rjeczalik/notify Go library](https://github.com/rjeczalik/notify) to provide cross-platform filesystem notifications.\n\nFofiwano is available as pre-built binaries for macOS, Linux, FreeBSD and Windows on the [release page](https://github.com/pteich/fofiwano/releases).\n\nCreate a config file `.fofiwano.yml` in the current directory or in your `$HOME` with content like this (see [example](.fofiwano.example.yml)):\n```yaml\nwatching:\n  # recursive watching ./test\n  - target: ./test/...\n    notifications:\n      - notify: slack\n        event: all\n        options:\n          channel: \"#test\"\n          username: \"fofiwano\"\n          webhook_url: \"https://hooks.slack.com/services/...\"\n          icon_emoji: \":monkey_face:\"\n          footer: \"fofiwano\"\n      - notify: http\n        event: write\n        options:\n          URL: http://my.endpoint.com\n\n  # only watching ./test2 and NO sub-folders\n  - target: ./test2\n    notifications:\n      - notify: http\n        event: write\n        options:\n          URL: http://test.com\n\n```\n\n- `target` can be a single file or a folder. Add `/...` to a folder to create a recursive watcher that also reacts to modifications in sub-folders.`\n- `notifications` is an array of notification providers with their options. *Right now only Slack and HTTP (GET) notifications are available!* (more to come).\n- `event` can be one of `all`, `write`, `create`, `remove` or `rename`\n\n*Hint:* You don't have to stick with YAML if you don't like it. You can write your config in every format that [Viper](https://github.com/spf13/viper) supports (JSON, TOML, YAML, HCL, and Java properties config files).\n\nStart your watcher like so:\n```bash\nfofiwano watch\n```\n\nYou can also provide the path to your config file with the `--config` flag:\n```bash\nfofiwano --config ~/.fofiwano.yml watch\n```\n\nGet help about all available flags and commands:\n```bash\nfofiwano --help\n```\n\n## Slack Notification\n\nAvailable options:\n```yaml\n          channel: \"#test\"\n          username: \"fofiwano\"\n          webhook_url: \"https://hooks.slack.com/services/...\"\n          icon_emoji: \":monkey_face:\"\n          footer: \"fofiwano\"\n```\n\n## HTTP Notification\n\nAvailable options:\n```yaml\n          URL: \"http://my.endpoint.com\"\n          method: \"GET\" # GET or POST\n          param_event: \"event\" # parameter name for event\n          param_path: \"param\" # parameter name for path\n```\n\nGET and POST is supported. \nFor GET the given URL will be called with the following paramter names:\n`http://my.endpoint.com?event=notify.rename\u0026path=/home/myname/files/test.txt`\n\nFor POST endpoints a JSON with the following content is sent as body:\n````json\n{\n  \"event\": \"notify.rename\",\n  \"path\": \"/home/myname/files/test.txt\"\n}\n````\n\n## TODO:\n\n- add more notification providers (command execution)\n- add templates for fine grained control over notification messages\n- add queue for notification events to prevent locks\n- add tests\n\n## Similar tools\n\nTools with similar functionality:\n- https://github.com/splitbrain/Watcher\n- http://incron.aiken.cz/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpteich%2Ffofiwano","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpteich%2Ffofiwano","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpteich%2Ffofiwano/lists"}