package sihl
Install
Dune Dependency
Authors
Maintainers
Sources
md5=52b28d3faac0a2243735285aa3f962aa
sha512=e7ff89bdba9f1afa3b115a056ae3d403f602685187a968485ea64a7cd1a18791f66b7480b682bf66acd3564dd89139162779d58a43c2389d785c98e246094a18
Description
Sihl is a batteries-included web framework. Thanks to the modular architecture, included batteries can be swapped out easily. Statically typed functional programming with OCaml makes web development fun, fast and safe. Sihl supports PostgreSQL and MariaDB.
Published: 22 Oct 2021
README
README.md
A modular and functional web framework
Explore the docs »
Getting Started
·
Demo project
·
Report Bug
·
Request Feature
Table of Contents
About
Note that even though Sihl is being used in production, the API is still under active development.
Sihl is a batteries-included web framework built on top of Opium, caqti, logs and many more. Thanks to the modular architecture, included batteries can be swapped easily. Statically typed functional programming with OCaml makes web development fun and safe.
Getting Started
Checkout the getting started section of the documentation.
If you want to jump into code have a look at the demo project.
Background
Design Goals
These are the main design goals of Sihl.
Fun
The overarching goal is to make web development fun. Fun is hard to quantify, so let's just say fun is maximized when frustration is minimized. This is what the other design goals are here for.
Swappable batteries included
Sihl should provide high-level features that are common in web applications out-of-the-box. It should provide sane and ergonomic defaults for 80% of the use cases with powerful but not necessarily ergonomic customization options for the other 20%.
Ergonomic but safe
OCaml itself ensures a certain level of correctness at compile-time. In order to optimized developer experience, some things are not verified at compile-time but at start-time. Sihl makes sure that your app does not start without the needed configurations and the required environment.
Features
These are some of things that Sihl can take care of for you.
Database handling (pooling, transactions, migrations)
Configuration (from env variables to configuration services)
Logging
User management
Token management
Session management
HTTP routes & middlewares
Flash Messages
Authentication
Authorization
Emailing
CLI Commands
Job Queue
Schedules
Block Storage
Do we need another web framework?
Yes, because all other frameworks have not been invented here!
On a more serious note, originally we wanted to collect a set of services, libraries, best practices and architecture to quickly and sustainably spin-off our own tools and products. An evaluation of languages and tools lead us to build the 5th iteration of what became Sihl with OCaml. We believe OCaml is a phenomenal place to build web apps.
Thanks to OCaml Sihl is ...
... runs fast
... compiles fast
... is pragmatic and safe
... is fun to use
Documentation
The API documentation for the latest version can be found here: https://oxidizing.github.io/sihl
Ecosystem
https://github.com/uzh/ask
Roadmap
Our main goal is to stabilize the service APIs, so updating Sihl in the future becomes easier. We would like to attract contributions for service contributions, once the framework reaches some level of maturity.
Contributing
Check out the Contributing guidelines.
License
Copyright (c) 2020 Oxidizing Systems
Distributed under the MIT License. See LICENSE
for more information.
Contact
Oxidizing Systems - @oxidizingsys - hello@oxidizing.io
Project Link: https://github.com/oxidizing/sihl
Dependencies (25)
-
opium
>= "0.20.0"
-
ppx_sexp_conv
>= "v0.13.0" & < "v0.16.0"
-
ppx_fields_conv
>= "v0.13.0"
-
uuidm
>= "0.9.7"
-
jwto
>= "0.3.0"
-
safepass
>= "3.0"
-
caqti-lwt
>= "1.3.0" & < "2.0.0~"
-
caqti
>= "1.5.0" & < "2.0.0~"
-
lwt_ppx
>= "2.0.1"
-
lwt_ssl
>= "1.1.3"
-
uuidm
>= "0.9.7"
-
ssl
>= "0.5.9"
-
tls
>= "0.11.1" & < "1.0.0"
-
ppx_deriving_yojson
>= "3.5.2"
-
yojson
>= "1.7.0"
-
sexplib
>= "v0.13.0"
-
bos
>= "0.2.0"
-
fmt
>= "0.8.8"
-
logs
>= "0.7.0"
-
containers
>= "2.7"
-
tsort
>= "2.0.0"
-
dune-build-info
>= "2.8.4"
-
conformist
>= "0.6.0"
-
ocaml
>= "4.08.0"
-
dune
>= "2.7"
Dev Dependencies (5)
-
odoc
with-doc
-
caqti-driver-mariadb
>= "1.5.1" & < "2.0.0~" & with-test
-
caqti-driver-postgresql
>= "1.5.1" & < "2.0.0~" & with-test
-
alcotest-lwt
>= "1.4.0" & with-test
-
cohttp-lwt-unix
>= "2.5.4" & with-test
Used by (6)
-
sihl-cache
= "2.0.1"
-
sihl-email
= "2.0.1"
-
sihl-queue
= "2.0.1"
-
sihl-storage
= "2.0.1"
-
sihl-token
= "2.0.1"
-
sihl-user
= "2.0.1"
Conflicts
None