{"id":1975,"url":"https://github.com/Zewo/Zewo","last_synced_at":"2025-08-06T14:31:39.319Z","repository":{"id":56910053,"uuid":"45657428","full_name":"Zewo/Zewo","owner":"Zewo","description":"Lightweight library for web server applications in Swift on macOS and Linux powered by coroutines.","archived":false,"fork":false,"pushed_at":"2020-03-26T16:31:25.000Z","size":5658,"stargazers_count":1854,"open_issues_count":0,"forks_count":88,"subscribers_count":64,"default_branch":"master","last_synced_at":"2024-08-16T15:47:28.028Z","etag":null,"topics":["buildpack","concurrency","coroutines","fibers","green-threads","heroku","non-blocking","server-side-swift","slack","swift","swiftenv","swiftpm","synchronous-apis","xcode","zewo"],"latest_commit_sha":null,"homepage":"http://zewo.io","language":"Swift","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/Zewo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-11-06T03:41:36.000Z","updated_at":"2024-08-15T05:17:22.000Z","dependencies_parsed_at":"2022-08-20T19:50:31.949Z","dependency_job_id":null,"html_url":"https://github.com/Zewo/Zewo","commit_stats":null,"previous_names":["zewo/epoch"],"tags_count":33,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zewo%2FZewo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zewo%2FZewo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zewo%2FZewo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Zewo%2FZewo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Zewo","download_url":"https://codeload.github.com/Zewo/Zewo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":215780273,"owners_count":15929791,"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":["buildpack","concurrency","coroutines","fibers","green-threads","heroku","non-blocking","server-side-swift","slack","swift","swiftenv","swiftpm","synchronous-apis","xcode","zewo"],"created_at":"2024-01-05T20:16:00.305Z","updated_at":"2024-08-17T16:31:12.856Z","avatar_url":"https://github.com/Zewo.png","language":"Swift","funding_links":[],"categories":["Server","Libs","Server Side Swift Frameworks","Swift","HarmonyOS","Network [🔝](#readme)"],"sub_categories":["Keychain","Network","Other free courses","Windows Manager"],"readme":"\u003cp align=\"center\"\u003e\n    \u003ca href=\"http://zewo.io\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/Zewo/Zewo/master/Images/zewo.png\" height=\"250\" alt=\"Zewo\"/\u003e\u003c/a\u003e\n\u003cbr /\u003e\n\u003cbr /\u003e\n\u003ca href=\"https://github.com/Zewo/Venice\"\u003e\u003cimg src=\"https://github.com/Zewo/Venice/blob/master/Images/badge.png?raw=true\" height=\"50\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://swift.org\"\u003e\u003cimg src=\"https://img.shields.io/badge/Swift-5.1-orange.svg?style=flat\" alt=\"Swift\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://tldrlegal.com/license/mit-license\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-blue.svg?style=flat\" alt=\"License\" /\u003e\u003c/a\u003e\n    \u003ca href=\"http://slack.zewo.io\"\u003e\u003cimg src=\"https://zewo-slackin.herokuapp.com/badge.svg\" alt=\"Slack\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/Zewo/Zewo/actions?query=workflow%3ASwift\"\u003e\u003cimg src=\"https://github.com/Zewo/Zewo/workflows/Swift/badge.svg\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://codecov.io/gh/Zewo/Zewo\"\u003e\u003cimg src=\"https://codecov.io/gh/Zewo/Zewo/branch/master/graph/badge.svg\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://codebeat.co/projects/github-com-zewo-zewo\"\u003e\u003cimg src=\"https://codebeat.co/badges/d580cc1f-5bdb-494b-8391-d147c7a287a1\" alt=\"Codebeat\" /\u003e\u003c/a\u003e\n    \u003ca href=\"#backers\"\u003e\u003cimg src=\"https://opencollective.com/zewo/backers/badge.svg\"\u003e\u003c/a\u003e\n    \u003ca href=\"#sponsors\"\u003e\u003cimg src=\"https://opencollective.com/zewo/sponsors/badge.svg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\t   \u003ca href=\"#what-sets-zewo-apart\"\u003eWhy Zewo?\u003c/a\u003e\n    • \u003ca href=\"#support\"\u003eSupport\u003c/a\u003e\n    • \u003ca href=\"#community\"\u003eCommunity\u003c/a\u003e\n    • \u003ca href=\"https://github.com/Zewo/Zewo/blob/master/CONTRIBUTING.md\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n# Zewo\n\n**Zewo** is a lightweight library for web applications in Swift.\n\n## What sets Zewo apart?\n\nZewo is **not** a web framework. Zewo is a lightweight library for web applications in Swift. Most server-side Swift projects use Grand Central Dispatch (**GCD**) as the concurrency library of choice. The drawback of using GCD is that its APIs are **asynchronous**. With async code comes **callback hell** and we all know it, it's no fun.\n\nNode.js is the best example of how callbacks can be frustrating. Express.js creator **TJ Holowaychuk** wrote a blog post about [Callback vs Coroutines](https://medium.com/@tjholowaychuk/callbacks-vs-coroutines-174f1fe66127#.3l3pf1xqf) in 2013 and one year later [left the Node.js community](https://medium.com/@tjholowaychuk/farewell-node-js-4ba9e7f3e52b#.okwqsltyx) in favor of Go. There were many reasons for that but one of the main reasons was the concurrency model. Sure we have futures and promises and functional reactive programming. They all mitigate the problem, but the async nature of the code will always be there.\n\nAt **Zewo** we use **coroutines**. Coroutines allow concurrency while maintaining **synchronous** APIs. We all learn how to program with synchronous code. We're used to reason about our code synchronously. Being able to use synchronous APIs makes the code much more readable and understandable. Coroutines are also **faster** than threads, because they live in user-space, unlike threads which are managed by the kernel. \n\nOur implementation of **coroutines** (which is based on [libdill](https://github.com/sustrik/libdill)) is **single-threaded**. This means that you don't have to worry about **locks** or **race conditions**. So your code is **safer** by default. To use all the CPU power available all you have to do is to replicate the work according to the number of logical CPUs available. As an example, this could mean running as many processes of your server as cores in your machine. **Rob Pike**, one of the creators of Go had a talk called [Concurrency is not Parallelism](https://www.youtube.com/watch?v=cN_DpYBzKso) that explains this concept **very** well. Go also has the philosophy:\n\n```\nDon't communicate by sharing memory. Share memory by communicating.\n```\n\nLike Go, instead of sharing memory and handling state we promote the use of [CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes)-style concurrency using channels. This pattern brings the abstractions used on the development of distributed systems closer to the way we're used to think about communication. It also aligns well with Swift's mindset of immutability and value types. All of these things contributes to a distinct experince on the server-side Swift.\n\nWith **Zewo** you get:\n\n* Go-style concurrency\n* Synchronous APIs\n* Incredible performance\n* Safer applications\n* Scalable systems\n* Cleaner code\n* Proper error handling\n* No callback hell\n* No race conditions\n\n## Support\n\nIf you have **any** trouble create a Github [issue](https://github.com/Zewo/Zewo/issues/new) and we'll do everything we can to help you. When stating your issue be sure to add enough details and reproduction steps so we can help you faster. If you prefer you can join our [Slack](http://slack.zewo.io) and go to the **#help** channel too.\n\n## Community\n\nWe have an amazing community of open and welcoming developers. Join us on [Slack](http://slack.zewo.io) to get to know us!\n\n## License\n\nAll **Zewo** modules are released under the MIT license. See [LICENSE](LICENSE) for details.\n\n[slack-image]: http://s13.postimg.org/ybwy92ktf/Slack.png\n[slack-url]: http://slack.zewo.io\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FZewo%2FZewo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FZewo%2FZewo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FZewo%2FZewo/lists"}