{"id":13546608,"url":"https://github.com/haskell-servant/servant","last_synced_at":"2025-05-12T13:31:49.740Z","repository":{"id":24054315,"uuid":"27440142","full_name":"haskell-servant/servant","owner":"haskell-servant","description":"Servant is a Haskell DSL for describing, serving, querying, mocking, documenting web applications and more!","archived":false,"fork":false,"pushed_at":"2025-04-08T09:18:48.000Z","size":7433,"stargazers_count":1870,"open_issues_count":292,"forks_count":415,"subscribers_count":51,"default_branch":"master","last_synced_at":"2025-04-23T17:09:02.028Z","etag":null,"topics":["hacktoberfest","haskell"],"latest_commit_sha":null,"homepage":"https://docs.servant.dev/","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/haskell-servant.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.d/1317-server-sent-events","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":null,"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,"zenodo":null},"funding":{"github":["arianvp"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":"https://github.com/haskell-servant/haskell-servant.github.io/blob/hakyll/consultancies.md"}},"created_at":"2014-12-02T15:58:17.000Z","updated_at":"2025-04-22T16:14:53.000Z","dependencies_parsed_at":"2023-10-11T01:15:26.969Z","dependency_job_id":"16134390-b782-4906-8a6a-344180abceb4","html_url":"https://github.com/haskell-servant/servant","commit_stats":{"total_commits":2136,"total_committers":265,"mean_commits":8.060377358490566,"dds":0.8295880149812734,"last_synced_commit":"1e6e566eb52a15681d1c8c91cdd5d29360d1680a"},"previous_names":[],"tags_count":64,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haskell-servant%2Fservant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haskell-servant%2Fservant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haskell-servant%2Fservant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haskell-servant%2Fservant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haskell-servant","download_url":"https://codeload.github.com/haskell-servant/servant/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253747781,"owners_count":21957803,"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":["hacktoberfest","haskell"],"created_at":"2024-08-01T12:00:40.981Z","updated_at":"2025-05-12T13:31:49.682Z","avatar_url":"https://github.com/haskell-servant.png","language":"Haskell","funding_links":["https://github.com/sponsors/arianvp","https://github.com/haskell-servant/haskell-servant.github.io/blob/hakyll/consultancies.md"],"categories":["`API Frameworks`","Haskell","Service Toolkits","API Frameworks","Programming Languages"],"sub_categories":["Haskell"],"readme":"# servant - A Type-Level Web DSL\n\n![servant](https://raw.githubusercontent.com/haskell-servant/servant/master/servant.png)\n\n## Getting Started\n\nWe have a [tutorial](http://docs.servant.dev/en/stable/tutorial/index.html) that\nintroduces the core features of servant. After this article, you should be able\nto write your first servant webservices, learning the rest from the haddocks'\nexamples.\n\nThe core documentation can be found [here](http://docs.servant.dev/).\nOther blog posts, videos and slides can be found on the\n[website](http://www.servant.dev/).\n\nIf you need help, drop by the IRC channel (#haskell-servant on libera.chat) or [mailing\nlist](https://groups.google.com/forum/#!forum/haskell-servant).\n\n## Contributing\n\nSee `CONTRIBUTING.md`\n\n## Release process outline (by phadej)\n\n- Update changelog and bump versions in `master`\n    - `git log --oneline v0.12.. | grep 'Merge pull request'` is a good starting point (use correct previous release tag)\n- Create a release branch, e.g. `release-0.13`\n    - Release branch is useful for backporting fixes from `master`\n- Smoke test in [`servant-universe`](https://github.com/phadej/servant-universe)\n    - `git submodule foreach git checkout master` and `git submodule foreach git pull` to get newest of everything.\n    - `cabal new-build --enable-tests all` to verify that everything builds, and `cabal new-test all` to run tests\n        - It's a good idea to separate these steps, as tests often pass, if they compile :)\n    - See `cabal.project` to selectively `allow-newer`\n    - If some packages are broken, on your discretisation there are two options:\n        - Fix them and make PRs: it's a good idea to test against older `servant` version too.\n        - Temporarily comment out broken package\n    - If you make a commit for `servant-universe`, you can use it as submodule in private projects to test even more\n- When ripples are cleared out:\n    - `git tag -s` the release\n    - `git push --tags`\n    - `cabal sdist` and `cabal upload`\n\n## TechEmpower framework benchmarks\n\nWe develop and maintain the servant TFB entry in https://github.com/haskell-servant/FrameworkBenchmarks/\n\nTo verify (i.e. compile and test that it works)\n\n```sh\n./tfb --mode verify --test servant servant-beam servant-psql-simple --type json plaintext db fortune\n```\n\nTo compare with  `warp`\n\n```sh\n./tfb --mode benchmark --test warp servant servant-beam servant-psql-simple --type json plaintext db fortune\n```\n\nTo compare with `reitit` (Clojure framework)\n\n```sh\n./tfb --mode benchmark --test reitit reitit-async reitit-jdbc servant servant-beam servant-psql-simple --type json plaintext db fortune\n```\n\nYou can see the visualised results at https://www.techempower.com/benchmarks/#section=test\n\n## Nix\n\nA developer shell.nix file is provided in the `nix` directory\n\nSee  [nix/README.md](nix/README.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaskell-servant%2Fservant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaskell-servant%2Fservant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaskell-servant%2Fservant/lists"}