{"id":13404100,"url":"https://github.com/fonoster/fonoster","last_synced_at":"2025-12-28T04:02:08.888Z","repository":{"id":37212227,"uuid":"120149974","full_name":"fonoster/fonoster","owner":"fonoster","description":"🚀 The open-source alternative to Twilio.","archived":false,"fork":false,"pushed_at":"2025-05-06T14:00:05.000Z","size":200511,"stargazers_count":6604,"open_issues_count":9,"forks_count":391,"subscribers_count":106,"default_branch":"main","last_synced_at":"2025-05-06T17:14:13.356Z","etag":null,"topics":["cloud","cloud-communications-platform","cpaas","customer-engagement","customer-experience","javascript","kubernetes","nodejs","programmable-voice","telephony","twilio","typescript","ucaas","voip","webrtc"],"latest_commit_sha":null,"homepage":"https://fonoster.com","language":"TypeScript","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/fonoster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yaml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["fonoster"]}},"created_at":"2018-02-04T02:58:54.000Z","updated_at":"2025-05-06T16:26:32.000Z","dependencies_parsed_at":"2023-02-08T17:01:58.794Z","dependency_job_id":"d2fdb427-7e98-40b1-aaa0-b2ead39910de","html_url":"https://github.com/fonoster/fonoster","commit_stats":{"total_commits":2872,"total_committers":49,"mean_commits":58.61224489795919,"dds":"0.29004178272980496","last_synced_commit":"c8d2470aa7b8167ef9e1c31e66e800e1cb1f494d"},"previous_names":["fonoster/fonos"],"tags_count":504,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fonoster%2Ffonoster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fonoster%2Ffonoster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fonoster%2Ffonoster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fonoster%2Ffonoster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fonoster","download_url":"https://codeload.github.com/fonoster/fonoster/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254000845,"owners_count":21997441,"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":["cloud","cloud-communications-platform","cpaas","customer-engagement","customer-experience","javascript","kubernetes","nodejs","programmable-voice","telephony","twilio","typescript","ucaas","voip","webrtc"],"created_at":"2024-07-30T19:01:39.002Z","updated_at":"2025-12-28T04:02:08.882Z","avatar_url":"https://github.com/fonoster.png","language":"TypeScript","readme":"\n# Fonoster: The open-source alternative to Twilio\n\n[Fonoster](https://fonoster.com) is researching an innovative Programmable Telecommunications Stack that will allow businesses to connect telephony services with the Internet entirely through a cloud-based utility.\n\n\u003ca href=\"https://discord.gg/mpWSRUhG7e\"\u003e\u003cimg alt=\"Fonoster community banner\" src=\"https://raw.githubusercontent.com/fonoster/.github/main/profile/community.png\"\u003e\u003c/img\u003e\u003c/a\u003e\n\n![build](https://github.com/fonoster/fonoster/workflows/unit%20tests/badge.svg) [![release](https://github.com/fonoster/fonoster/actions/workflows/release.yaml/badge.svg)](https://github.com/fonoster/fonoster/actions/workflows/release.yaml) [![Discord](https://img.shields.io/discord/1016419835455996076?color=5865F2\u0026label=Discord\u0026logo=discord\u0026logoColor=white)](https://discord.gg/4QWgSz4hTC) \u003ca href=\"https://github.com/fonoster/fonoster/blob/main/CODE_OF_CONDUCT.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/Code%20of%20Conduct-v1.0-ff69b4.svg?color=%2347b96d\" alt=\"Code Of Conduct\"\u003e\u003c/a\u003e ![GitHub](https://img.shields.io/github/license/fonoster/fonoster?color=%2347b96d) ![Twitter Follow](https://img.shields.io/twitter/follow/fonoster?style=social)\n\n## Features \n\nThe most notable features of Fonoster are:\n\n- [x] Multitenancy\n- [x] Easy deployment of PBX functionalities\n- [x] Programmable Voice Applications\n- [x] NodeJS SDK\n- [x] Support for Amazon Simple Storage Service (S3)\n- [x] Secure API endpoints with Let's Encrypt\n- [x] Authentication with OAuth2\n- [X] Authentication with JWT \n- [x] Role-Based Access Control (RBAC)\n- [x] Plugins-based Command-line Tool\n- [x] Support for Google Speech APIs\n\n## Code Examples\n\nA Voice Application is a server that controls a call's flow. A Voice Application can use any combination of the following verbs:\n\n- `Answer` - Accepts an incoming call\n- `Hangup` - Closes the call\n- `Play`: Takes a URL with a media file and streams the sound back to the calling party\n- `PlayDtmf` - Takes a DTMF sequence and plays it back to the calling party\n- `Say` - Takes a text, synthesizes the text into audio, and streams back the result\n- `Gather` - Waits for DTMF or speech events and returns back the result\n- `SGather` - Returns a stream for future DTMF and speech results\n- `Stream` - Creates a bidirectional stream to send and receive audio from a caller\n- `Dial` - Passes the call to an Agent or a Number at the PSTN\n- `Record` - It records the voice of the calling party and saves the audio on the Storage sub-system\n- `Mute` - It tells the channel to stop sending media, effectively muting the channel\n- `Unmute` - It tells the channel to allow media flow\n\nVoice Application Example:\n\n```typescript\nconst VoiceServer = require(\"@fonoster/voice\").default;\nconst { \n  GatherSource, \n  VoiceRequest, \n  VoiceResponse \n} = require(\"@fonoster/voice\");\n\nnew VoiceServer().listen(async (req: VoiceRequest, voice: VoiceResponse) =\u003e {\n  const { ingressNumber, sessionRef, appRef } = req;\n\n  await voice.answer();\n\n  await voice.say(\"Hi there! What's your name?\");\n\n  const { speech: name } = await voice.gather({\n    source: GatherSource.SPEECH\n  });\n\n  await voice.say(\"Nice to meet you \" + name + \"!\");\n\n  await voice.say(\"Please enter your 4 digit pin.\");\n\n  const { digits } = await voice.gather({\n    maxDigits: 4,\n    finishOnKey: \"#\"\n  });\n\n  await voice.say(\"Your pin is \" + digits);\n\n  await voice.hangup();\n});\n\n// Your app will live at tcp://127.0.0.1:50061 \n// and you can easily publish it to the Internet with:\n// ngrok tcp 50061\n```\n\nEverything in Fonoster is an API first, and initiating a call is no exception. You can use the SDK to start a call with a few lines of code.\n\nExample of originating a call with the SDK:\n\n```typescript\nconst SDK = require(\"@fonoster/sdk\");\n\nasync function main(request) {\n  const apiKey = \"your-api-key\";\n  const apiSecret = \"your-api-secret\"\n  const accessKeyId = \"WO00000000000000000000000000000000\";\n\n  const client = new SDK.Client({ accessKeyId });\n  await client.loginWithApiKey(apiKey, apiSecret);\n\n  const calls = new SDK.Calls(client);\n  const response = await calls.createCall(request);\n\n  console.log(response); // successful response\n}\n\nconst request = {\n  from: \"+18287854037\",\n  to: \"+17853178070\",\n  appRef: \"3e61ecb7-a1b6-4a93-84c3-4f1979165bca\",\n  // Optional metadata to be sent to the Voice Application\n  metadata: {\n    name: \"John Doe\",\n    message: \"Please call me back.\"\n  }\n};\n\nmain(request).catch(console.error);\n```\n\n## Getting Started\n\nTo get started with Fonoster, use the following resources:\n\n- [Deploying Fonoster with Docker](https://docs.fonoster.com/self-hosting)\n- [Guide for Early Access User](https://docs.fonoster.com/quickstart)\n- [Getting started with Fonoster](https://docs.fonoster.com/quickstart)\n- [How we created an open-source alternative to Twilio and why it matters](https://dev.to/fonoster/how-we-created-an-open-source-alternative-to-twilio-and-why-it-matters-434g)\n\n## Give a Star! ⭐\n\nPlease give it a star if you like this project or plan to use it. Thanks 🙏\n\n## Bugs and Feedback\n\nFor bugs, questions, and discussions, please use the [Github Issues](https://github.com/fonoster/fonoster/issues)\n\n## Contributing\n\nFor contributing, please see the following links:\n\n - [Contribution Documents](https://github.com/fonoster/fonoster/blob/main/CONTRIBUTING.md)\n - [Contributors](https://github.com/fonoster/fonoster/contributors)\n\n\u003c!--contributors--\u003e\n\n\u003ctable\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/psanders\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/539774?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Pedro Sanders/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003ePedro Sanders\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/efraa\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/40646537?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Efrain Peralta/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eEfrain Peralta\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/angelbencosme\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/6846866?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Angel M. Bencosme/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eAngel M. Bencosme\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/whernandez\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/37089069?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Wandy Hernandez/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eWandy Hernandez\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/obrucheoghene\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/111436934?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Obruche Wilfred  Oghenechohwo/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eObruche Wilfred  Oghenechohwo\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/wardner\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/51765669?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Wardner Lara/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eWardner Lara\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/rihernandez\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/27718122?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Richard HC/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eRichard HC\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/Nageswari-droid\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/65342122?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Nageswari/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eNageswari\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/xquanluu\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/110280845?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Hoan Luu Huu/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eHoan Luu Huu\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/speedymonster\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/31810381?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Speedy Monster/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eSpeedy Monster\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/parz3val\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/34773307?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=harry_dev/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eharry_dev\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/CKanishka\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/30779692?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Kanishka Chowdhury/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eKanishka Chowdhury\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/BrayanMnz\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/61812255?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Brayan Munoz V./\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eBrayan Munoz V.\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/milis92\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/13440798?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Ivan Milisavljevic /\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eIvan Milisavljevic \u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/dedekrnwan\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/25242055?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Dede kurniawan/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eDede kurniawan\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/gad2103\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/1045265?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=gabriel duncan/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003egabriel duncan\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/iamppborah\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/96339995?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Prasurjya Pran Borah/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003ePrasurjya Pran Borah\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/justjordan15\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/164441222?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Jordan/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eJordan\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/hectorvent\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/2405682?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Hector Ventura/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eHector Ventura\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/0xflotus\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/26602940?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=0xflotus/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003e0xflotus\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/itzmanish\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/12438068?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Manish/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eManish\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/osehgol\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/4996423?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Osama Sehgol/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eOsama Sehgol\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/psuet\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/7604288?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Paul Sütterlin/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003ePaul Sütterlin\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/RiadVargas\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/4274014?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Riad Vargas/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eRiad Vargas\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/vcidst\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/683016?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Shailendra Paliwal/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eShailendra Paliwal\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/gitter-badger\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/8518239?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=The Gitter Badger/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eThe Gitter Badger\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/YuriCodes\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/80093500?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Yuri/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eYuri\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/cdrsociate\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/89363212?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=cdrsociate/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003ecdrsociate\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/ghana7989\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/65382745?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=pavan/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003epavan\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/nrjchnd\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/17134818?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=nrjchnd/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003enrjchnd\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/salami-dev\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/57477131?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Salami Bashir/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eSalami Bashir\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/scshiv29-dev\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/68141773?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Shivam Deepak Chaudhary/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eShivam Deepak Chaudhary\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/showf68\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/45857918?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Yossef Haim/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eYossef Haim\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/telenautical\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/106842020?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=telenautical/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003etelenautical\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/theewiz\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/81051645?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Wisdom Elendu/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eWisdom Elendu\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/judgegodwins\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/38760034?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Judge Godwins/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eJudge Godwins\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/jonathan-chin\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/7519412?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Jon Chin/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eJon Chin\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/harish-chander\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/13236956?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Harish Chander/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eHarish Chander\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/GaryBarnes17\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/97693048?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Gary Barnes/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eGary Barnes\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/FidalMathew\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/84982038?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Fidal Mathew/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eFidal Mathew\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/eatskolnikov\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/1693000?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Enmanuel Toribio/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eEnmanuel Toribio\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/jellydn\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/870029?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Dung Duc Huynh (Kaka)/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eDung Duc Huynh (Kaka)\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/cdosoftei\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/7636091?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Ciprian/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eCiprian\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/infinitydon\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/6318992?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Christopher Adigun/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eChristopher Adigun\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/brunowego\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/441774?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Bruno Gomes/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eBruno Gomes\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/brunoarueira\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/119518?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Bruno Arueira/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eBruno Arueira\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/antoniusostermann\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/2332002?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Antonius Ostermann/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eAntonius Ostermann\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/alifiratari\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/10004438?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Ali Firat ARI/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eAli Firat ARI\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/alexsands\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/4269772?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Alex/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eAlex\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/itsalb3rt\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/35310226?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Albert E. Hidalgo Taveras/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eAlbert E. Hidalgo Taveras\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Sponsors\n\nWe're glad to be supported by respected companies and individuals from several industries.\n\nFind all our supporters [here](https://github.com/sponsors/fonoster)\n\n\u003e [Become a Github Sponsor](https://github.com/sponsors/fonoster)\n\n## Authors\n\n - [Pedro Sanders](https://github.com/psanders)\n\n## License\n\nCopyright (C) 2025 by [Fonoster Inc](https://fonoster.com). MIT License (see [LICENSE](https://github.com/fonoster/fonoster/blob/main/LICENSE) for details).\n","funding_links":["https://github.com/sponsors/fonoster"],"categories":["TypeScript","JavaScript","Operations","Uncategorised","Cloud Services"],"sub_categories":["Web/API Interfaces","Uptime Monitoring"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffonoster%2Ffonoster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffonoster%2Ffonoster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffonoster%2Ffonoster/lists"}