Falling back to pre-odoc.2.2.0 documentation page...


  • Replace functor based approach with service facade pattern based approach to increase ergonomy


  • Implement MariaDB and PostgreSql backends for all services except storage service

  • JSON Web Token backend for the token service

  • Default middlewares for server side rendered forms and JSON API

[0.2.2] - 2020-12-17


  • Merge form data and urlencoded form parsing and provide them in one middleware

[0.2.1] - 2020-12-09


  • Two subsequent POST request works now with the CSRF middleware

[0.2] - 2020-12-07


  • Extract sihl-core, sihl-type, sihl-contract, sihl-user, sihl-persistence and sihl-web as separate opam packages

  • Increase session key size to 20 bytes

  • Sign session cookies with SIHL_SECRET

  • Simplify session service API

  • Implement generic flash storage on top of session storage and replace the specific message service

  • Update to httpaf-based Opium 0.19.0


  • File log reporter to store logs in logs/error.log and logs/app.log

  • Add log source to log text

[0.1.10] - 2020-11-18


  • Properly load .env files based on project root, can be set using ENV_FILES_PATH

  • Add custom error types for user actions to allow overriding errors displayed to users


  • Determine project rood using markers such as the .git folder

[0.1.9] - 2020-11-16


  • Get rid of Core.Ctx.t

  • Make sure migrations and repo cleaners are registered when registering service

  • Sihl.Core.* modules are now accessible directly under Sihl.*

[0.1.8] - 2020-11-12


  • Get rid of Result.get_ok because it swallows errors

[0.1.7] - 2020-11-03


  • Simplify Database.Service API: Only provide transaction, query and fetch_pool

  • Fixe dune package names, private dune packages don't have generic names like http or database causing conflicts in a Sihl app

[0.1.6] - 2020-10-31


  • Database.Service and Repository.Service are assumed to have just one implementation, so they are referenced directly in service implementations instead of passing them as functor arguments

  • Extract Random.Service from utils as standalone top level service

  • Merge utils into one utils.ml file

  • Sihl.Http.Response and Sihl.Http.Request have consistent API

  • Sihl.Middleware contains all provided middlewares

  • Implement multi-part form data parsing

[0.1.5] - 2020-10-14


  • Remove seed service since the same functionality

  • Simplify app abstraction, instead of with_ use service APIs directly

  • Extract storage service as sihl-storage opam package

  • Extract email service as sihl-email opam package

  • Extract queue service as sihl-queue opam package

  • Move configuration and logging into core, neither of the are implemented as services

  • Replace pcre with re as regex library to get rid of a system dependency on pcre

  • Split up Sihl.Data into Sihl.Migration, Sihl.Repository and Sihl.Database

  • Move module signatures from Foo.Service.Sig to Foo.Sig, the services might live in a third party opam package, but the signatures are staying in sihl

  • Move Sihl.App to Sihl.Core.App and simplify app API

  • Move log service, config service and cmd service into core (they don't have to be provided to other services through functors)

  • Simplify Sihl app creation and service configuration

[0.1.4] - 2020-09-24


  • Remove reason and tyxml-jsx as dependency as they are not used anymore


  • Various combinators for Sihl.Seed.t including constructor and field accessors

[0.1.3] - 2020-09-14


  • Seed Service with commands seedlist and seedrun <name>


  • Lifecycle API: A service now has two additional functions start and stop, which are used in the lifecycle definition

  • Database service query functions query, atomic and with_connection can now be nested

[0.1.2] - 2020-09-09


  • Re-export Sihl.Queue.Job.t

  • Export content types under Sihl.Web

[0.1.1] - 2020-09-07


  • Don't raise exception when user login fails if it is a user error

  • Remove dev tools as dev dependencies


  • Storage service can remove files

  • Move README.md documentation to ocamldoc based documentation

[0.1.0] - 2020-09-03


  • DB connection leaks caused deadlocks

  • Provide all service dependencies using functors

  • Move Opium & Cohttp specific stuff into the web server service implementation to allow for swappable implementation based on something like httpaf

  • Inject log service to all other services by default


  • Support letters 0.2.0 for SMTP emailing

  • Switch to exception based service API

  • HTTP Response API to respond with file Sihl.Web.Res.file

[0.0.56] - 2020-08-17


  • Stop running integration tests during OPAM release

[0.0.55] - 2020-08-17


  • Initial release of Sihl