- Notifications
You must be signed in to change notification settings - Fork2
🏕️ A peaceful web framework for Gleam that targets JS.
License
MystPi/glen
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
🏕️ A peaceful web framework for Gleam that targets JS.
✨ Features:
- Request & response helpers
- Helpful middleware
- File streaming
- Websockets
- Bring-your-own server(optional)
- Easily deploy on serverless platforms such asDeno Deploy
...and other nice-to-haves!
Install all requirements:
gleam add glen gleam_http gleam_javascript
Or just Glen:
gleam add glen
importgleam/javascript/promise.{typePromise}importglenimportglen/statuspubfnmain(){glen.serve(8000,handle_req)}fnhandle_req(req:glen.Request)->Promise(glen.Response){"<h1>Welcome to my webpage!</h1> <p>Make yourself at home 😄</p>"|>glen.html(status.ok)|>promise.resolve}
Glen is heavily based off ofWisp, and many of Wisp'sexamples can easily be ported to Glen. Glen also has an example application of its own in./test.
Glen'sserve
function only works on thedeno
runtime, but you can bring your own server so Glen can work on any runtime, such as Node.js (>= v17.0.0) or Cloudflare Workers. Theconvert_request
andconvert_response
functions are here to help you with this.
Cloudflare Workers example
Glen's
static
middleware will not work on the Cloudflare Workers runtime since it does not support thenode:fs
module. Everything else should work as expected.
src/index.js
import*asglenfrom'../glen/glen.mjs';import*asmy_appfrom'./my_app.mjs';exportdefault{asyncfetch(request,_env,_ctx){constreq=glen.convert_request(request);constresponse=awaitmy_app.handle_req(req);constres=glen.convert_response(response);returnres;},};
src/my_app.gleam
importgleam/javascript/promiseimportglenimportglen/statuspubfnhandle_req(_req){"On a Cloudflare worker!"|>glen.html(status.ok)|>promise.resolve}
wrangler.toml
main ="build/dev/javascript/my_app/index.js"# ...
Documentation can be found athttps://hexdocs.pm/glen.
You will need to have Gleam and a JavaScript runtime (most likely Deno) installed for developing Glen.
gleam run# Run the projectgleamtest# Run the example application
Contributions are encouraged and greatly appreciated! Please note that thechangelog should be updated accordingly (this is something that everyone has trouble remembering, including me 😅).
About
🏕️ A peaceful web framework for Gleam that targets JS.