{"id":15159365,"url":"https://github.com/clovellytech/http4s-modules","last_synced_at":"2025-05-06T21:40:56.213Z","repository":{"id":28934807,"uuid":"119773526","full_name":"clovellytech/http4s-modules","owner":"clovellytech","description":"Web modules built on Http4s","archived":false,"fork":false,"pushed_at":"2024-07-29T11:54:13.000Z","size":1286,"stargazers_count":30,"open_issues_count":33,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-31T03:11:18.007Z","etag":null,"topics":["circe","doobie","http4s","http4s-modules","scala","scalajs","typelevel"],"latest_commit_sha":null,"homepage":"","language":"Scala","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/clovellytech.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","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":"2018-02-01T02:48:03.000Z","updated_at":"2023-05-15T12:48:46.000Z","dependencies_parsed_at":"2025-01-10T06:45:43.662Z","dependency_job_id":null,"html_url":"https://github.com/clovellytech/http4s-modules","commit_stats":{"total_commits":479,"total_committers":5,"mean_commits":95.8,"dds":0.384133611691023,"last_synced_commit":"c057644a9200a6767c3da2325a814f02c9100fe5"},"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clovellytech%2Fhttp4s-modules","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clovellytech%2Fhttp4s-modules/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clovellytech%2Fhttp4s-modules/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clovellytech%2Fhttp4s-modules/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/clovellytech","download_url":"https://codeload.github.com/clovellytech/http4s-modules/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252775560,"owners_count":21802453,"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":["circe","doobie","http4s","http4s-modules","scala","scalajs","typelevel"],"created_at":"2024-09-26T21:05:16.879Z","updated_at":"2025-05-06T21:40:56.181Z","avatar_url":"https://github.com/clovellytech.png","language":"Scala","readme":"h4sm - Scala Http4s Modules [![Join the chat][gitter-badge]][gitter-url] [![Build Status][travis-badge]][travis-url] [![Sonatype Release][sonatype-badge]][sonatype-url]\n============\n\nCreate composable server modules with ease using Http4s, cats, Flyway, and PostgreSQL. Built for scala 2.12 and 2.13 and scalajs 1.0.\n\nBasic Idea\n---\nTo provide a library of production ready modules, complete with database schema, that can be composed and mounted as `HttpService`s. Modules included so far:\n\n* auth - A complete user authentication implementation using `tsec`. Bearer and stateless cookie authentication schemes are available.\n* features - An example library that allows users to submit feature requests and vote on features.\n* files - A complete file upload and retrieval module. Only local file storage is implemented so far. AWS or other backends can be added by providing a typeclass instance.\n* invitations - Add the ability for users to invite new users.\n* messages - Allow authenticated users to pass messages to each other if they know the other's user id.\n* permissions - Built on top of tsec-http4s, an easy way to create routes that are guarded by a user having certain permissions.\n* petstore - As a learning example, the scala-pet-store implemented with h4sm modules (not released)\n* store - A store with items and orders.\n* more to come! Something you would like to see here? Submit an issue!\n\n[See documentation here](https://clovellytech.github.io/http4s-modules)\n\nCreating a module: [See a start to finish implementation example](https://clovellytech.github.io/http4s-modules/docs/by-example/petstore/)\n\n## Contributors and Recognition\n\nPRs and issues are so welcome on this project. Generally contributors don't have to be people that commit code or even write issues. Thanks especially to:\n\n* [@pauljamescleary](https://github.com/pauljamescleary) for the [scala-pet-store](https://github.com/pauljamescleary/scala-pet-store) teaching project.\n* [@estsauver](https://github.com/estsauver) for a pair coding session on this project when it was just starting.\n\n\nTry it out\n---\nAn example project exists in `/example-server`, which aggregates all the modules into a single server. To run, execute `exampleServerJVM/reStart` in sbt.\n\nGet Started\n---\nAdd any of the following dependencies to your build.sbt. There are interdependencies too, so you may consult `build.sbt` to see which modules depend on which, and thus may not need to be declared in your `build.sbt`.\n\n```scala\nlibraryDependencies ++= Seq(\n\t\"h4sm-auth\",\n\t\"h4sm-features\",\n\t\"h4sm-files\",\n\t\"h4sm-invitations\",\n\t\"h4sm-store\",\n\t\"h4sm-messages\",\n\t\"h4sm-permissions\"\n).map(\"com.clovellytech\" %% _ % h4smVersion)\n```\n\n## Scalajs Clients\n\nClients are prebuilt for several modules. You can include them in your scalajs projects as:\n\n```scala\nlibraryDependencies ++= Seq(\n    \"h4sm-auth-client\",\n    \"h4sm-features-client\",\n).map(\"com.clovellytech\" %%% _ % h4smVersion)\n```\n\n\n[gitter-badge]: https://badges.gitter.im/clovellytech/http4s-modules.svg \"Chat\"\n[gitter-url]: https://gitter.im/clovellytech/http4s-modules?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge \"Chat\"\n[travis-badge]: https://travis-ci.com/clovellytech/http4s-modules.svg?branch=master \"Build Status\"\n[travis-url]: https://travis-ci.com/clovellytech/http4s-modules \"Build Status\"\n[sonatype-badge]: https://img.shields.io/nexus/r/com.clovellytech/h4sm-auth_2.12.svg?server=https://oss.sonatype.org \"Sonatype Releases\"\n[sonatype-url]: https://oss.sonatype.org/content/groups/public/com/clovellytech/ \"Sonatype Releases\"\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclovellytech%2Fhttp4s-modules","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclovellytech%2Fhttp4s-modules","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclovellytech%2Fhttp4s-modules/lists"}