{"id":13546429,"url":"https://github.com/SuaveIO/suave","last_synced_at":"2025-04-02T18:30:46.412Z","repository":{"id":37580268,"uuid":"755200","full_name":"SuaveIO/suave","owner":"SuaveIO","description":"Suave is a simple web development F# library providing a lightweight web server and a set of combinators to manipulate route flow and task composition.","archived":false,"fork":false,"pushed_at":"2025-03-03T14:18:11.000Z","size":23934,"stargazers_count":1329,"open_issues_count":24,"forks_count":195,"subscribers_count":51,"default_branch":"master","last_synced_at":"2025-03-29T08:00:42.284Z","etag":null,"topics":["async","dotnet","fsharp","functional","http-server","suave","webserver"],"latest_commit_sha":null,"homepage":"https://suave.io","language":"F#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SuaveIO.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","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":"2010-07-03T15:26:06.000Z","updated_at":"2025-03-03T14:18:14.000Z","dependencies_parsed_at":"2023-02-10T11:15:55.969Z","dependency_job_id":"cefd421f-9f87-422e-a98e-2accf087570d","html_url":"https://github.com/SuaveIO/suave","commit_stats":{"total_commits":2374,"total_committers":112,"mean_commits":"21.196428571428573","dds":0.5665543386689132,"last_synced_commit":"d08f7a4ae846cea27648f14c47480b61d373d2d5"},"previous_names":[],"tags_count":117,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuaveIO%2Fsuave","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuaveIO%2Fsuave/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuaveIO%2Fsuave/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SuaveIO%2Fsuave/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SuaveIO","download_url":"https://codeload.github.com/SuaveIO/suave/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246869656,"owners_count":20847171,"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":["async","dotnet","fsharp","functional","http-server","suave","webserver"],"created_at":"2024-08-01T12:00:37.125Z","updated_at":"2025-04-02T18:30:44.894Z","avatar_url":"https://github.com/SuaveIO.png","language":"F#","funding_links":[],"categories":["F# #","F#","Web Frameworks"],"sub_categories":["Creating Type Providers"],"readme":"# Introduction\n\n![Suave Logo](https://raw.githubusercontent.com/SuaveIO/resources/master/images/suave1.png)\n\nSuave is a simple web development F# library providing a lightweight web server\nand a set of combinators to manipulate route flow and task composition. Suave\nis inspired in the simplicity of Happstack and born out of the necessity of\nembedding web server capabilities in my own applications.  Suave supports \nWebsocket, HTTPS, multiple TCP/IP bindings, Basic Access Authentication, \nKeep-Alive.\n\nSuave also takes advantage of F# asynchronous\nworkflows to perform non-blocking IO. In fact, Suave is written in a completely\nnon-blocking fashion throughout.\n\n## Build Status\n\n| Platform | Status         |\n| -------- | -------------- |\n| Linux     | [![Build status](https://github.com/SuaveIO/suave/actions/workflows/build-suave.yml/badge.svg)](https://github.com/SuaveIO/suave/actions/workflows/build-suave.yml) |\n\nWhat follows is a tutorial on how to create applications. Scroll past the\ntutorial to see detailed function documentation.\n\n# Tutorial: Hello World!\n\nThe simplest Suave application is a simple HTTP server that greets all visitors\nwith the string `\"Hello World!\"`\n\n``` fsharp\nopen Suave\n\nstartWebServer defaultConfig (Successful.OK \"Hello World!\")\n```\n\nNow that you've discovered how to do \"Hello World!\", go read the\n[rest of the documentation](https://suave.io/) – editable in the `docs` folder.\n\n# Suave.Testing\n\nWe have a NuGet ready for your testing needs; Suave is an excellent server for\nrunning in-process integration tests, as it's very fast to spawn. On an ordinary\nlaptop, running hundreds of randomized tests and micro-benchmarks as well as all\nSuave unit tests, take about 5 seconds on mono.\n\nStart by installing:\n\n```\npaket add nuget suave.testing\n```\n\nYou can now use it:\n\n``` fsharp\nopen Suave\nopen Suave.Testing\nopen Expecto\n\ntestCase \"parsing a large multipart form\" \u003c| fun _ -\u003e\n\n  let res =\n    runWithConfig (OK \"hi\")\n    |\u003e req HttpMethod.POST \"/\" (Some byteArrayContent)\n\n  Expect.equal res \"hi\" \"Should get the correct result\"\n```\n\nAll of our tests use this assembly; you can do too.\n\n# How to Build\n\nTo execute the build script, invoke following command on the Linux or MacOs console:\n\n```\n./build.sh\n```\n\nOr in the Microsoft Windows MSDOS console:\n\n```\nbuild\n```\n\n# Coding Guidelines\n\nSuave.X where X is a module is where we expect users to look. We don't expect users\nof the library to have to look at Y in Suave.X.Y, so for server-specific code, please\nstick to the Y module/namespace. That way we make the API discoverable.\n\n\n## Style Guide\n\nTwo space indentation.\n\n``` fsharp\nmatch x with // '|' characters at base of 'match'\n| A     -\u003e ()\n| Bcdef -\u003e \"aligned arrows\" // space after '|' character\n```\n\nParameters\n\nLet type annotations be specified with spaces after the argument symbol and before\nthe type.\n\n``` fsharp\nmodule MyType =\n  let ofString (scheme : string) =\n    // ...\n```\n\nMethod formatting with no spaces after/before normal parenthesis\n\n``` fsharp\nlet myMethodName firstArg (second : WithType) = async { // and monad builder\n  return! f firstArg second\n  } // at base of 'let' + 2 spaces\n```\n\nYou need to document your methods with '///' to create inline documentation. This documentation\nis used for two purposes. First, to automatically generate on-line API documentation. Second, to\ngenerate an XML documentation file to be included in the NuGet package, so that users of the library\ncan understand the intention behind a method easily.\n\nDon't put unnecessary parenthesis unless it makes the code more clear.\n\nWhen writing functions that take some sort of 'configuration' or that you can\nimagine would like to be called with a parameter which is almost always the same\nvalue for another function body's call-site, put that parameter before\nmore-often-varying parameters in the function signature.\n\n## Building the website\n\nRun the following in the docs directory. It requires Ruby installed.\n\n```cmd\n# you may need to delete `Gemfile.lock` if your local Ruby version differs.\nbundle install\nbundle exec jekyll build\n```\n\nTo generate the API documentation, run the following in the project root directory\n```cmd\npackages\\docs\\FsLibTool\\tools\\FsLibTool.exe src docs\\_site\n```\n\n## Testing\n\nRun Tests as a console app. Return status code = 0 means success.\n\n## Upgrade openssl\n\nWindows: `paket update openssl.redist`\n\nOS X: `brew install openssl \u0026\u0026 brew update openssl \u0026\u0026 cp /usr/local/Cellar/openssl/1.0.1j_1/lib/ .`\n\nLinux: ...\n\n# Community\n\n## Chat Room\n\nWe have a chat room in case you feel like chatting a bit. \n\n[![Chat Room](https://badges.gitter.im/SuaveIO/suave.png)](https://gitter.im/SuaveIO/suave)\n\n## Integrations\n\n * https://github.com/rayokota/generator-angular-suave\n * [FsReveal](https://github.com/fsprojects/FsReveal)\n * [TodoBackendSuave](https://github.com/JonCanning/TodoBackendSuave)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSuaveIO%2Fsuave","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSuaveIO%2Fsuave","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSuaveIO%2Fsuave/lists"}