{"id":15060919,"url":"https://github.com/suaveio/suave","last_synced_at":"2026-01-17T21:58:48.349Z","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":194,"subscribers_count":51,"default_branch":"master","last_synced_at":"2025-04-23T17:19:49.718Z","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":253766211,"owners_count":21960867,"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-09-24T23:06:32.614Z","updated_at":"2026-01-05T05:14:37.015Z","avatar_url":"https://github.com/SuaveIO.png","language":"F#","funding_links":[],"categories":[],"sub_categories":[],"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# 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","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"}