+23
.github/workflows/test.yml
+23
.github/workflows/test.yml
···
1
+
name: test
2
+
3
+
on:
4
+
push:
5
+
branches:
6
+
- master
7
+
- main
8
+
pull_request:
9
+
10
+
jobs:
11
+
test:
12
+
runs-on: ubuntu-latest
13
+
steps:
14
+
- uses: actions/checkout@v3
15
+
- uses: erlef/setup-beam@v1
16
+
with:
17
+
otp-version: "26.0.2"
18
+
gleam-version: "0.34.1"
19
+
rebar3-version: "3"
20
+
# elixir-version: "1.15.4"
21
+
- run: gleam deps download
22
+
- run: gleam test
23
+
- run: gleam format --check src test
+155
-157
README.md
+155
-157
README.md
···
2
2
3
3
For a full list of packages check out [**the Gleam package index**](https://packages.gleam.run/).
4
4
5
-
Have a Gleam project to share with the world? Make a pull request and add it
6
-
to the list.
5
+
Have a Gleam project to share with the world? Run `gleam run`, assign a
6
+
category for it in `packages/NAME.toml`, and run `gleam run` again.
7
7
8
8
Looking for something to build? Check out [the suggestions list][suggestions].
9
9
10
10
[suggestions]: https://github.com/gleam-lang/awesome-gleam/issues/34
11
11
12
-
- [Libraries](#libraries)
13
-
- [Ansi](#ansi)
14
-
- [CLI](#cli)
15
-
- [Cryptography](#cryptography)
12
+
- [Packages](#packages)
13
+
- [API Clients](#api-clients)
14
+
- [Benchmarking](#benchmarking)
15
+
- [Build Tooling](#build-tooling)
16
+
- [Command Line](#command-line)
17
+
- [Configuration](#configuration)
18
+
- [Data Structures](#data-structures)
19
+
- [Database](#database)
16
20
- [Databases](#databases)
17
-
- [Data structures](#data-structures)
18
-
- [Date and Time](#date-and-time)
19
21
- [Email](#email)
20
-
- [Erlang/OTP](#erlangotp)
21
-
- [Error handling](#error-handling)
22
-
- [Files](#files)
23
-
- [Generators](#generators)
22
+
- [Erlang and OTP](#erlang-and-otp)
23
+
- [Error Handling](#error-handling)
24
+
- [File Formats](#file-formats)
25
+
- [File System](#file-system)
26
+
- [Frontend](#frontend)
27
+
- [Graphics](#graphics)
28
+
- [HTML](#html)
24
29
- [HTTP](#http)
25
-
- [HTTP clients](#http-clients)
26
-
- [HTTP servers](#http-servers)
30
+
- [HTTP Clients](#http-clients)
31
+
- [HTTP Servers](#http-servers)
32
+
- [Hashing and Encryption](#hashing-and-encryption)
27
33
- [JSON](#json)
28
-
- [Language Developement](#language-developement)
29
-
- [Logging](#logging)
30
-
- [Machine learning](#machine-learning)
31
-
- [Mimetypes](#mimetypes)
34
+
- [JavaScript](#javascript)
35
+
- [Logging and Monitoring](#logging-and-monitoring)
36
+
- [Networking](#networking)
37
+
- [Numbers](#numbers)
32
38
- [Parsing](#parsing)
33
-
- [Protocols](#protocols)
34
-
- [Science](#science)
35
-
- [Templating](#templating)
39
+
- [Push Notifications](#push-notifications)
40
+
- [Randomness](#randomness)
36
41
- [Testing](#testing)
37
-
- [Text and numbers](#text-and-numbers)
38
-
- [Validation](#validation)
39
-
- [Websockets](#websockets)
42
+
- [Text](#text)
43
+
- [Time](#time)
44
+
- [Web frameworks](#web-frameworks)
40
45
- [Templates](#templates)
41
46
- [Projects](#projects)
42
47
- [Compilers](#compilers)
43
-
- [Programming Challenges](#programming-challenges)
44
48
- [Web applications](#web-applications)
45
49
- [Tools](#tools)
46
50
- [Editor support](#editor-support)
···
49
53
- [Courses](#courses)
50
54
- [Social Media](#social-media)
51
55
52
-
# Libraries
56
+
# Packages
53
57
54
-
## Ansi
58
+
## API Clients
55
59
56
-
- [dahlia-lib/dahlia](https://github.com/dahlia-lib/dahlia-gleam) - a simple text formatting package, inspired by the game Minecraft.
57
-
- [Willyboar/colours](https://github.com/Willyboar/colours) - a Library for adding colours in Terminal
60
+
- [aws4_request](https://github.com/lpil/aws4_request) [(docs)](https://hexdocs.pm/aws4_request/) - An AWS Signature Version 4 client implementation, used for S3 auth, etc
61
+
- [glatus](https://github.com/lpil/glatus) [(docs)](https://hexdocs.pm/glatus/) - Gleam bindings to the API of the Gatus health check tool
62
+
- [gleam_hexpm](https://github.com/gleam-lang/hexpm) [(docs)](https://hexdocs.pm/gleam_hexpm/) - Gleam dynamic decoders for the API of Hex, the package manager for the BEAM ecosystem.
63
+
- [glevatar](https://github.com/bunopnu/glevatar) [(docs)](https://hexdocs.pm/glevatar/) - Easily create Gravatar URLs in Gleam
58
64
59
-
## CLI
65
+
## Benchmarking
60
66
61
-
- [tynanbe/shellout](https://github.com/tynanbe/shellout) - A Gleam library for cross-platform shell operations.
62
-
- [tanklesxl/glint](https://github.com/tanklesxl/glint) - Gleam command line argument parsing with basic flag support.
67
+
- [gleamy_bench](https://github.com/schurhammer/gleamy_bench) [(docs)](https://hexdocs.pm/gleamy_bench/) - A library for benchmarking gleam code.
68
+
- [glychee](https://github.com/inoas/glychee) [(docs)](https://hexdocs.pm/glychee/) - Glychee: Easy access to Elixir's Benchee from Gleam!
63
69
64
-
## Cryptography
65
-
66
-
- [gleam-experiments/crypto](https://github.com/gleam-experiments/crypto) - A Gleam library for the BEAM cryptography functions.
70
+
## Build Tooling
67
71
68
-
## Databases
69
-
70
-
- [massivefermion/mungo](https://github.com/massivefermion/mungo) - A MongoDB driver for Gleam.
71
-
- [gleam-experiments/pgo](https://github.com/gleam-experiments/pgo) - Use PostgreSQL databases with PGO.
72
-
- [lpil/sqlight](https://github.com/lpil/sqlight) - Use SQLite databases with esqlite.
73
-
- [massivefermion/radish](https://github.com/massivefermion/radish) - A Redis client for Gleam.
72
+
- [esgleam](https://github.com/Enderchief/esgleam) [(docs)](https://hexdocs.pm/esgleam/) - esbuild for Gleam
73
+
- [gleescript](https://github.com/lpil/gleescript) [(docs)](https://hexdocs.pm/gleescript/) - Bundle your Gleam-on-Erlang project into an escript, a single executable file!
74
74
75
-
## Data structures
75
+
## Command Line
76
76
77
-
Libraries that define generic data structures for use in Gleam projects.
77
+
- [argv](https://github.com/lpil/argv) [(docs)](https://hexdocs.pm/argv/) - A cross platform library for getting the command line arguments
78
+
- [gleam_community_ansi](https://github.com/gleam-community/ansi) [(docs)](https://hexdocs.pm/gleam_community_ansi/) - ANSI colours, formatting, and control codes
79
+
- [glint](https://github.com/TanklesXL/glint) [(docs)](https://hexdocs.pm/glint/) - Gleam command line argument parsing with basic flag support.
80
+
- [rad](https://github.com/tynanbe/rad) [(docs)](https://hexdocs.pm/rad/) - A task runner for Gleam projects
81
+
- [shellout](https://github.com/tynanbe/shellout) [(docs)](https://hexdocs.pm/shellout/) - A Gleam library for cross-platform shell operations
82
+
- [spinner](https://github.com/lpil/spinner) [(docs)](https://hexdocs.pm/spinner/) - Animated progress spinners for your console
78
83
79
-
- [gleam-lang/bitwise](https://github.com/gleam-lang/bitwise) - Bitwise operations on integers.
80
-
- [gleam-lang/stdlib](https://github.com/gleam-lang/stdlib) - Core data structures and types for Gleam.
81
-
- [massivefermion/ranger](https://github.com/massivefermion/ranger) - Create ranges over any type!
82
-
- [massivefermion/puddle](https://github.com/massivefermion/puddle) - A resource pool manager for Gleam.
84
+
## Configuration
83
85
84
-
## Date and Time
86
+
- [envoy](https://github.com/lpil/envoy) [(docs)](https://hexdocs.pm/envoy/) - A zero dependency cross platform Gleam package for reading environment variables
87
+
- [gleam_dotenv](https://github.com/Grubba27/gleam_dotenv) [(docs)](https://hexdocs.pm/gleam_dotenv/) - dotenv for Gleam
88
+
- [glenvy](https://github.com/maxdeviant/glenvy) [(docs)](https://hexdocs.pm/glenvy/) - A pleasant way to interact with your environment.
85
89
86
-
Libraries for handling date and time
90
+
## Data Structures
87
91
88
-
- [massivefermion/birl](https://github.com/massivefermion/birl) - Date and Time handling for Gleam
92
+
- [gleam_stdlib](https://github.com/gleam-lang/stdlib) [(docs)](https://hexdocs.pm/gleam_stdlib/) - A standard library for the Gleam programming language
93
+
- [glearray](https://github.com/fschwalbe/glearray) [(docs)](https://hexdocs.pm/glearray/) - Immutable arrays for Gleam
94
+
- [non_empty_list](https://github.com/giacomocavalieri/non_empty_list) [(docs)](https://hexdocs.pm/non_empty_list/) - Non-empty lists in Gleam
95
+
- [tote](https://github.com/giacomocavalieri/tote) [(docs)](https://hexdocs.pm/tote/) - Bags (or multisets) in Gleam
96
+
- [trie_again](https://github.com/giacomocavalieri/trie_again) [(docs)](https://hexdocs.pm/trie_again/) - Tries in Gleam
89
97
90
-
## Email
98
+
## Database
91
99
92
-
Libraries for sending email.
100
+
- [mungo](https://github.com/massivefermion/mungo) [(docs)](https://hexdocs.pm/mungo/) - A MongoDB driver for Gleam (formerly gleam_mongo)
93
101
94
-
- [lpil/gleam_sendgrid](https://github.com/lpil/gleam_sendgrid) - A client for the SendGrid transactional email API.
95
-
- [lpil/zeptomail](https://github.com/lpil/zeptomail) - A client for the ZeptoMail transactional email API.
96
-
- [aosasona/plunk.gleam](https://github.com/aosasona/plunk.gleam) - A client to interact with [Plunk](https://www.useplunk.com/) email API.
102
+
## Databases
97
103
98
-
## Erlang/OTP
104
+
- [gleam_pgo](https://github.com/gleam-experiments/pgo) [(docs)](https://hexdocs.pm/gleam_pgo/) - Gleam bindings to the PGO PostgreSQL client
105
+
- [radish](https://github.com/massivefermion/radish) [(docs)](https://hexdocs.pm/radish/) - A Redis client for Gleam
106
+
- [sqlight](https://github.com/lpil/sqlight) [(docs)](https://hexdocs.pm/sqlight/) - Use SQLite from Gleam!
99
107
100
-
Libraries for working with Erlang and OTP.
108
+
## Email
101
109
102
-
- [gleam-lang/gleam_erlang](https://github.com/gleam-lang/erlang) - Bindings to common Erlang/OTP types and functions.
103
-
- [gleam-lang/otp](https://github.com/gleam-lang/otp) - Write fault tolerant multicore programs with Erlang/OTP.
104
-
- [midas-framework/beam](https://github.com/midas-framework/beam) - Interoperating with specific functionality in the Erlang runtime (BEAM).
105
-
- [gleam-experiments/otp_code](https://github.com/gleam-experiments/otp_code) - Work with Erlang code at runtime.
110
+
- [gleam_sendgrid](https://github.com/lpil/gleam_sendgrid) [(docs)](https://hexdocs.pm/gleam_sendgrid/) - Send emails from Gleam with SendGrid
111
+
- [zeptomail](https://github.com/lpil/zeptomail) [(docs)](https://hexdocs.pm/zeptomail/) - A wrapper for ZeptoMail's transactional email API
106
112
107
-
## Error handling
113
+
## Erlang and OTP
108
114
109
-
Libraries for working with errors and computations that can fail.
115
+
- [gen_core_erlang](https://codeberg.org/kero/gleam_codegen) [(docs)](https://hexdocs.pm/gen_core_erlang/) - Generate Core Erlang from Gleam (wraps the Erlang cerl compiler module)
116
+
- [gleam_crypto](https://github.com/gleam-lang/crypto) [(docs)](https://hexdocs.pm/gleam_crypto/) - Gleam bindings to the BEAM cryptography functions
117
+
- [gleam_erlang](https://github.com/gleam-lang/erlang) [(docs)](https://hexdocs.pm/gleam_erlang/) - A Gleam library for working with Erlang
118
+
- [gleam_otp](https://github.com/gleam-lang/otp) [(docs)](https://hexdocs.pm/gleam_otp/) - Fault tolerant multicore Gleam programs with OTP
119
+
- [gts](https://github.com/lunarmagpie/gts) [(docs)](https://hexdocs.pm/gts/) - Opinionated bindings to erlang's ets tables.
120
+
- [process_waiter](https://github.com/lpil/process-waiter) [(docs)](https://hexdocs.pm/process_waiter/) - Wait for Erlang processes to exit
121
+
- [puddle](https://github.com/massivefermion/puddle) [(docs)](https://hexdocs.pm/puddle/) - A resource pool manager for gleam
110
122
111
-
- [gleam-experiments/snag](https://github.com/gleam-experiments/snag) - A boilerplate-free ad-hoc error type.
123
+
## Error Handling
112
124
113
-
## Files
125
+
- [exception](https://github.com/lpil/exception) [(docs)](https://hexdocs.pm/exception/) - A tiny package for dealing with exceptions
126
+
- [snag](https://github.com/gleam-experiments/snag) [(docs)](https://hexdocs.pm/snag/) - A boilerplate-free ad-hoc error type
114
127
115
-
- [bcpeinhardt/simplifile](https://github.com/bcpeinhardt/simplifile) - Simple file operations for Gleam that work on all targets (Erlang/Node/Deno)
116
-
- [lpil/filepath](https://github.com/lpil/filepath) - Work with file paths in Gleam!
117
-
- [cdaringe/fswalk](https://github.com/cdaringe/fswalk) - Efficiently walk a directory recursively
128
+
## File Formats
118
129
119
-
## Generators
130
+
- [gsv](https://github.com/bcpeinhardt/gsv) [(docs)](https://hexdocs.pm/gsv/) - A simple csv parser and generator written in gleam
131
+
- [tom](https://github.com/lpil/tom) [(docs)](https://hexdocs.pm/tom/) - A pure Gleam TOML parser!
120
132
121
-
- [mrdimosthenis/minigen](https://github.com/mrdimosthenis/minigen) - A library for generating random data in the Erlang ecosystem, written in Gleam.
122
-
- [massivefermion/blah](https://github.com/massivefermion/blah) - fake data generation for gleam.
133
+
## File System
123
134
124
-
## HTTP
135
+
- [filepath](https://github.com/lpil/filepath) [(docs)](https://hexdocs.pm/filepath/) - Work with file paths in Gleam!
136
+
- [simplifile](https://github.com/bcpeinhardt/simplifile) [(docs)](https://hexdocs.pm/simplifile/) - Basic file operations that work on all targets
125
137
126
-
- [gleam-lang/http](https://github.com/gleam-lang/http) - Types and functions for HTTP clients and servers!
127
-
- [MystPi/conversation](https://github.com/MystPi/conversation) - Bindings for the web standard JavaScript Request and Response APIs
138
+
## Frontend
128
139
129
-
## HTTP clients
140
+
- [glailglind](https://github.com/okkdev/glailglind) [(docs)](https://hexdocs.pm/glailglind/) - Gleam modules and functions for installing and invoking TailwindCSS
130
141
131
-
Libraries for making HTTP requests.
142
+
## Graphics
132
143
133
-
- [gleam-lang/hackney](https://github.com/gleam-lang/hackney) - Bindings to Hackney, the simple Erlang HTTP client.
134
-
- [gleam-lang/httpc](https://github.com/gleam-lang/httpc) - Bindings to Erlang's built in HTTP client, httpc.
135
-
- [cobbinma/gleamql](https://github.com/cobbinma/gleamql) - A simple GraphQL client.
136
-
- [Nicd/finch_gleam](https://gitlab.com/Nicd/finch_gleam) - Bindings to the Finch Elixir HTTP client.
144
+
- [gleam_community_colour](https://github.com/gleam-community/colour) [(docs)](https://hexdocs.pm/gleam_community_colour/) - Colour types, conversions, and other utilities
137
145
138
-
## HTTP servers
146
+
## HTML
139
147
140
-
Libraries for serving traffic over HTTP.
148
+
- [glentities](https://gitlab.com/Nicd/glentities) [(docs)](https://hexdocs.pm/glentities/) - HTML entity encoder/decoder for Gleam
149
+
- [htmb](https://github.com/lpil/htmb) [(docs)](https://hexdocs.pm/htmb/) - A tiny HTML builder for Gleam
150
+
- [htmgrrrl](https://github.com/lpil/htmgrrrl) [(docs)](https://hexdocs.pm/htmgrrrl/) - Gleam bindings to htmerl, the fast and memory efficient Erlang HTML SAX parser.
141
151
142
-
- [gleam-lang/cowboy](https://github.com/gleam-lang/cowboy) - A Gleam HTTP service adapter for the Cowboy web server.
143
-
- [gleam-lang/elli](https://github.com/gleam-lang/elli) - A Gleam HTTP service adapter for the Elli web server.
144
-
- [gleam-lang/plug](https://github.com/gleam-lang/plug) - A Gleam HTTP service adapter for the Plug web application interface.
145
-
- [megapctr/gleam_cors](https://github.com/megapctr/gleam_cors) - A CORS middleware for Gleam.
146
-
- [rawhat/mist](https://github.com/rawhat/mist) - A pure Gleam HTTP server with WebSocket support
152
+
## HTTP
147
153
148
-
## JSON
154
+
- [gleam_http](https://github.com/gleam-lang/http) [(docs)](https://hexdocs.pm/gleam_http/) - Types and functions for Gleam HTTP clients and servers
155
+
- [marceau](https://github.com/lpil/marceau) [(docs)](https://hexdocs.pm/marceau/) - A MIME types library for Gleam
149
156
150
-
- [gleam-lang/json](https://github.com/gleam-lang/json) - Work with JSON in Gleam.
157
+
## HTTP Clients
151
158
152
-
## Language Developement
159
+
- [gleam_fetch](https://github.com/gleam-lang/fetch) [(docs)](https://hexdocs.pm/gleam_fetch/) - Make HTTP requests in Gleam JavaScript with Fetch
160
+
- [gleam_hackney](https://github.com/gleam-lang/hackney) [(docs)](https://hexdocs.pm/gleam_hackney/) - Gleam bindings to the Hackney HTTP client
161
+
- [gleam_httpc](https://github.com/gleam-lang/httpc) [(docs)](https://hexdocs.pm/gleam_httpc/) - Gleam bindings to Erlang's built in HTTP client, httpc
153
162
154
-
- [lpil/glance](https://github.com/lpil/glance) - A Gleam source code parser, in Gleam!
155
-
- [DanielleMaywood/glexer](https://github.com/DanielleMaywood/glexer) - Gleam lexer implemented in Gleam!
156
-
- [Willyboar/glove](https://github.com/Willyboar/glove) - A library to generate QBE IR code
163
+
## HTTP Servers
157
164
165
+
- [cgi](https://github.com/lpil/cgi) [(docs)](https://hexdocs.pm/cgi/) - Common Gateway Interface (CGI) in Gleam
166
+
- [gleam_elli](https://github.com/gleam-lang/elli) [(docs)](https://hexdocs.pm/gleam_elli/) - Run Gleam HTTP services with the Elli web server
167
+
- [mist](https://github.com/rawhat/mist) [(docs)](https://hexdocs.pm/mist/) - a misty Gleam web server
158
168
159
-
## Logging
169
+
## Hashing and Encryption
160
170
161
-
- [defgenx/glog](https://github.com/defgenx/glog) - A Gleam implementation of an Erlang logger inspired by the Logrus API.
162
-
- [johnbjrk/glimt](https://github.com/JohnBjrk/glimt) - A Gleam logging library with support for custom dispatchers/serializers.
171
+
- [beecrypt](https://github.com/lpil/beecrypt) [(docs)](https://hexdocs.pm/beecrypt/) - Buzzing Gleam bindings to the Erlang bcrypt hashing library
163
172
164
-
## Machine learning
173
+
## JSON
165
174
166
-
- [mrdimosthenis/gleam_synapses](https://github.com/mrdimosthenis/gleam_synapses) - A lightweight library for neural networks.
167
-
- [mrdimosthenis/emel](https://github.com/mrdimosthenis/emel) - A simple and functional machine learning library for the Erlang ecosystem
175
+
- [gleam_json](https://github.com/gleam-lang/json) [(docs)](https://hexdocs.pm/gleam_json/) - Work with JSON in Gleam
168
176
169
-
## Mimetypes
177
+
## JavaScript
170
178
171
-
- [davecaos/benetnasch](https://github.com/davecaos/benetnasch) - Benetnasch a mimetypes library for Gleam.
179
+
- [conversation](https://github.com/MystPi/conversation) [(docs)](https://hexdocs.pm/conversation/) - Gleam bindings for the standard JavaScript Request and Response APIs
180
+
- [gleam_javascript](https://github.com/gleam-lang/javascript) [(docs)](https://hexdocs.pm/gleam_javascript/) - Work with JavaScript types and values in Gleam
181
+
- [plinth](https://github.com/Crowdhailer/plinth) [(docs)](https://hexdocs.pm/plinth/) - Bindings to Node.js and browser platform APIs
172
182
173
-
## Parsing
183
+
## Logging and Monitoring
174
184
175
-
Libraries for parsing different kinds of data.
185
+
- [glimt](https://github.com/JohnBjrk/glimt) [(docs)](https://hexdocs.pm/glimt/) - A Gleam library for logging
186
+
- [glog](https://github.com/defgenx/glog) [(docs)](https://hexdocs.pm/glog/) - A Gleam implementation of Erlang logger
176
187
177
-
- [sporto/gleam_codec](https://github.com/sporto/gleam_codec) - Build codecs (encode and decode) to transform data structures between Gleam and Elixir.
178
-
- [hayleigh-dot-dev/gleam-nibble](https://github.com/hayleigh-dot-dev/gleam-nibble) - A string parsing library heavily inspired by [elm/parser](https://github.com/elm/parser).
179
-
- [sporto/gleam_qs](https://github.com/sporto/gleam_qs) - Parse and work with query strings.
188
+
## Networking
180
189
181
-
## Protocols
190
+
- [glisten](https://github.com/rawhat/glisten) [(docs)](https://hexdocs.pm/glisten/) - a shiny Gleam TCP/SSL server
191
+
- [mug](https://github.com/lpil/mug) [(docs)](https://hexdocs.pm/mug/) - A TCP client for Gleam!
182
192
183
-
- [bwireman/gleam_pb](https://github.com/bwireman/gleam_pb) - Protobuf support for Gleam.
184
-
- [massivefermion/bison](https://github.com/massivefermion/bison) - BSON encoder and decoder for Gleam.
193
+
## Numbers
185
194
186
-
## Science
195
+
- [gleam_community_maths](https://github.com/gleam-community/maths) [(docs)](https://hexdocs.pm/gleam_community_maths/) - A basic maths library
187
196
188
-
- [nicklasxyz/gleam_stats](https://github.com/NicklasXYZ/gleam_stats) - A Gleam mathematics and statistics library that is JavaScript and Erlang compatible.
189
-
- [tynanbe/argamak](https://github.com/tynanbe/argamak) - A tensor library for Gleam's Erlang and JavaScript targets.
197
+
## Parsing
190
198
191
-
## TCP/SSL
199
+
- [glance](https://github.com/lpil/glance) [(docs)](https://hexdocs.pm/glance/) - A Gleam source code parser, in Gleam!
200
+
- [glance_printer](https://github.com/bcpeinhardt/glance_printer) [(docs)](https://hexdocs.pm/glance_printer/) - A pretty_printer for the glance AST
201
+
- [glexer](https://github.com/DanielleMaywood/glexer) [(docs)](https://hexdocs.pm/glexer/) - A lexer for Gleam source code
202
+
- [jot](https://github.com/lpil/jot) [(docs)](https://hexdocs.pm/jot/) - A parser for Djot, a markdown-like language
203
+
- [nibble](https://github.com/hayleigh-dot-dev/gleam-nibble) [(docs)](https://hexdocs.pm/nibble/) - A string parsing library heavily inspired by elm/parser.
192
204
193
-
- [rawhat/glisten](https://github.com/rawhat/glisten) - A pure Gleam TCP/SSL server library
205
+
## Push Notifications
194
206
195
-
## Templating
207
+
- [wimp](https://github.com/lpil/wimp-pushover) [(docs)](https://hexdocs.pm/wimp/) - A Gleam client for the Pushover push notification API
196
208
197
-
Libraries for rendering strings from templates.
209
+
## Randomness
198
210
199
-
- [gleam-experiments/bbmustache](https://github.com/gleam-experiments/bbmustache) - Gleam bindings to the bbmustache templating library.
200
-
- [michaeljones/matcha](https://github.com/michaeljones/matcha) - Templating system where the templates are transpiled to Gleam modules.
201
-
- [hayleigh-dot-dev/gleam-lustre](https://github.com/hayleigh-dot-dev/gleam-lustre) - A framework for building create web apps – powered by Gleam and React.
202
-
- [Nicd/glemplate](https://gitlab.com/Nicd/glemplate) - A simplistic Gleam template engine.
211
+
- [blah](https://github.com/massivefermion/blah) [(docs)](https://hexdocs.pm/blah/) - fake data generation for gleam
212
+
- [minigen](https://github.com/mrdimosthenis/minigen) [(docs)](https://hexdocs.pm/minigen/) - Pure random data generation, appropriate for realistic simulations
213
+
- [prng](https://github.com/giacomocavalieri/prng) [(docs)](https://hexdocs.pm/prng/) - A Pure Random Number Generator
203
214
204
215
## Testing
205
216
206
-
Projects for testing Gleam code.
217
+
- [exercism_test_runner](https://github.com/exercism/gleam-test-runner) [(docs)](https://hexdocs.pm/exercism_test_runner/) - A test framework for Gleam exercises on Exercism
207
218
208
-
- [lpil/gleeunit](https://github.com/lpil/gleeunit) - Gleam bindings to the Erlang EUnit test framework.
209
-
- [inoas/glacier]([https://github.com/inoas/glacier) - Gleam incremental interactive unit testing.
210
-
211
-
## Text and numbers
212
-
213
-
Libraries for parsing and manipulating text and numbers.
214
-
215
-
- [greggreg/pretty_print](https://gitlab.com/greggreg/pretty_print) - An implementation of Christian Lindig's "Strictly Pretty" pretty printing algorithm.
216
-
- [giacomocavalieri/glam](https://github.com/giacomocavalieri/glam) - A package to help you easily pretty print structured data ✨
217
-
- [rvcas/ids](https://github.com/rvcas/ids) - A library for generating unique ids such as a cuid or UUID.
218
-
- [sporto/gleam_string_builder](https://github.com/sporto/gleam_string_builder) - A library for building and formatting strings.
219
-
- [defgenx/gxid](https://github.com/defgenx/gxid) - A library for generating xids
220
-
- [johnbjrk/gap](https://github.com/JohnBjrk/gap) - A library for comparing strings/lists, creating structured diffs and visualizing the differences
221
-
- [Nicd/glentities](https://gitlab.com/Nicd/glentities) - HTML entity encoding/decoding.
222
-
223
-
## Validation
224
-
225
-
- [sporto/gleam-validator](https://github.com/sporto/gleam-validator) - A library for validating custom types.
226
-
- [massivefermion/phony](https://github.com/massivefermion/phony) - A library for validating phone numbers around the world.
219
+
## Text
227
220
228
-
## Websockets
221
+
- [edit_distance](https://github.com/giacomocavalieri/edit_distance) [(docs)](https://hexdocs.pm/edit_distance/) - A pure Gleam package to compute the edit distance of two strings
222
+
- [gap](https://github.com/JohnBjrk/gap) [(docs)](https://hexdocs.pm/gap/) - A Gleam library for comparing strings/lists and producing a textual (styled) representation of the differences.
223
+
- [glam](https://github.com/giacomocavalieri/glam) [(docs)](https://hexdocs.pm/glam/) - A package to help you easily pretty print structured data
224
+
- [glemplate](https://gitlab.com/Nicd/glemplate) [(docs)](https://hexdocs.pm/glemplate/) - A simple template engine for Gleam
225
+
- [hug](https://github.com/brettkolodny/gleam-hug) [(docs)](https://hexdocs.pm/hug/) - Helpful and pretty CLI messages
226
+
- [ids](https://github.com/rvcas/ids) [(docs)](https://hexdocs.pm/ids/) - Unique IDs for Gleam
227
+
- [iso_8859](https://github.com/richard-viney/iso_8859) [(docs)](https://hexdocs.pm/iso_8859/) - Gleam library to decode ISO/IEC 8859 binary data into native UTF-8 strings.
228
+
- [justin](https://github.com/lpil/justin) [(docs)](https://hexdocs.pm/justin/) - Convert between snake_case, camelCase, and other cases in Gleam
229
+
- [phony](https://github.com/massivefermion/phony) [(docs)](https://hexdocs.pm/phony/) - An international phone number validator
230
+
- [punycode](https://codeberg.org/sotolf/gleam_punycode/) [(docs)](https://hexdocs.pm/punycode/) - Gleam implementation of punycode encoding and decoding
231
+
- [rank](https://github.com/lpil/glance) [(docs)](https://hexdocs.pm/rank/) - Ordinals for numbers, e.g. 1st, 2nd, 3rd
229
232
230
-
- [lpil/nerf](https://github.com/lpil/nerf) - Gleam bindings to gun, the Erlang HTTP/1.1, HTTP/2 and Websocket client.
233
+
## Time
231
234
232
-
# Templates
235
+
- [birl](https://github.com/massivefermion/birl) [(docs)](https://hexdocs.pm/birl/) - Date / Time handling for Gleam
233
236
234
-
## Serverless
237
+
## Web frameworks
235
238
236
-
- [nicklasxyz/gleam_openfaas](https://github.com/NicklasXYZ/gleam_openfaas) - Gleam function templates to be used with the serverless framework OpenFaaS.
237
-
- [nicklasxyz/gleam_openwhisk](https://github.com/NicklasXYZ/gleam_openwhisk) - Gleam function templates to be used with the serverless framework OpenWhisk.
239
+
- [wisp](https://github.com/gleam-wisp/wisp) [(docs)](https://hexdocs.pm/wisp/) - A practical web framework for Gleam
238
240
239
241
# Projects
240
242
···
245
247
- [gleam-lang/gleam](https://github.com/gleam-lang/gleam) - The Gleam compiler.
246
248
- [gleam-lang/example-lisp-interpreter](https://github.com/gleam-lang/example-lisp-interpreter/) - A toy Lisp interpreter in Gleam.
247
249
248
-
249
-
## Programming Challenges
250
-
251
-
- [tanklesxl/gladvent](https://github.com/tanklesxl/gladvent) - An `Advent of Code` runner for Gleam, targeting Erlang.
252
-
253
250
## Web applications
254
251
255
252
Web applications written in Gleam.
256
253
257
-
- [gleam-lang/example-echo-server](https://github.com/gleam-lang/example-url-shortener) - An example Gleam web application.
258
-
- [greggreg/gleam_todo](https://gitlab.com/greggreg/gleam_todo) - A serverside only implementation of Todo MVC written in Gleam!
259
-
- [QuinnWilton/gleam-chip8](https://github.com/QuinnWilton/gleam-chip8) - A CHIP-8 emulator built with Gleam and Phoenix LiveView, playable [here](http://chip8.quinnwilton.com).
260
-
- [toranb/elixir-gleam-match](https://github.com/toranb/elixir-gleam-match) - A game built with Gleam and Phoenix LiveView.
261
-
- [rawhat/spades](https://github.com/rawhat/spades) - A multiplayer card game with a Gleam backend and React front-end
254
+
- [gleam-lang/example-todomvc](https://github.com/gleam-lang/example-url-shortener) - A serverside only implementation of Todo MVC written in Gleam!
255
+
- [gleam-lang/example-echo-server](https://github.com/gleam-lang/example-echo-server) - An example Gleam web application.
256
+
- [gleam-lang/packages](https://github.com/gleam-lang/packages) - The Gleam package index website.
262
257
263
258
# Tools
264
259
···
281
276
282
277
Websites with Gleam related content.
283
278
284
-
- [gleam.run](https://gleam.run) - Gleam's website and introductory guide
279
+
- [gleam.run](https://gleam.run) - Gleam's website.
280
+
- [tour.gleam.run](https://gleam.run) - Gleam's interactive tour and turorial.
285
281
286
282
## Courses
287
283
288
284
- [Exercism's Gleam track](https://github.com/exercism/gleam/) - Crowd-sourced code mentorship. Practice having thoughtful conversations about code.
285
+
- [tanklesxl/gladvent](https://github.com/tanklesxl/gladvent) - An `Advent of Code` runner for Gleam, targeting Erlang.
289
286
290
287
## Talks
288
+
291
289
- [Introduction to Gleam](https://fosdem.org/2023/schedule/event/beam_gleam_intro/) - [Harry Bairstow](https://github.com/harryet)
292
290
- [Distributed music programming with Gleam, BEAM, and the Web Audio API](https://fosdem.org/2023/schedule/event/beam_distributed_music_programming_gleam/) - [Hayleigh Thompson](https://github.com/hayleigh-dot-dev)
293
291
- [I learned Gleam in a week. Here's how it went](https://www.youtube.com/watch?v=-8OIK4RIUsg) - [Theo Harris](https://github.com/Theosaurus-Rex)
+24
gleam.toml
+24
gleam.toml
···
1
+
name = "awesome"
2
+
version = "1.0.0"
3
+
4
+
# Fill out these fields if you intend to generate HTML documentation or publish
5
+
# your project to the Hex package manager.
6
+
#
7
+
# description = ""
8
+
# licences = ["Apache-2.0"]
9
+
# repository = { type = "github", user = "username", repo = "project" }
10
+
# links = [{ title = "Website", href = "https://gleam.run" }]
11
+
#
12
+
# For a full reference of all the available options, you can have a look at
13
+
# https://gleam.run/writing-gleam/gleam-toml/.
14
+
15
+
[dependencies]
16
+
gleam_stdlib = "~> 0.34 or ~> 1.0"
17
+
simplifile = "~> 1.2"
18
+
gleam_httpc = "~> 2.1"
19
+
tom = "~> 0.3"
20
+
sqlight = "~> 0.9"
21
+
gleam_http = "~> 3.5"
22
+
23
+
[dev-dependencies]
24
+
gleeunit = "~> 1.0"
+22
manifest.toml
+22
manifest.toml
···
1
+
# This file was generated by Gleam
2
+
# You typically do not need to edit this file
3
+
4
+
packages = [
5
+
{ name = "esqlite", version = "0.8.6", build_tools = ["rebar3"], requirements = [], otp_app = "esqlite", source = "hex", outer_checksum = "607E45F4DA42601D8F530979417F57A4CD629AB49085891849302057E68EA188" },
6
+
{ name = "gleam_http", version = "3.5.3", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_http", source = "hex", outer_checksum = "C2FC3322203B16F897C1818D9810F5DEFCE347F0751F3B44421E1261277A7373" },
7
+
{ name = "gleam_httpc", version = "2.1.2", build_tools = ["gleam"], requirements = ["gleam_http", "gleam_stdlib"], otp_app = "gleam_httpc", source = "hex", outer_checksum = "ACD05CA3BAC7780DF5FFAE334621FD199D1B490FAF6ECDFF74316CAA61CE88E6" },
8
+
{ name = "gleam_stdlib", version = "0.34.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "1FB8454D2991E9B4C0C804544D8A9AD0F6184725E20D63C3155F0AEB4230B016" },
9
+
{ name = "gleeunit", version = "1.0.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "D364C87AFEB26BDB4FB8A5ABDE67D635DC9FA52D6AB68416044C35B096C6882D" },
10
+
{ name = "simplifile", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "359CD7006E2F69255025C858CCC6407C11A876EC179E6ED1E46809E8DC6B1AAD" },
11
+
{ name = "sqlight", version = "0.9.0", build_tools = ["gleam"], requirements = ["esqlite", "gleam_stdlib"], otp_app = "sqlight", source = "hex", outer_checksum = "2D9C9BA420A5E7DCE7DB2DAAE4CAB0BE6218BEB48FD1531C583550B3D1316E94" },
12
+
{ name = "tom", version = "0.3.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "tom", source = "hex", outer_checksum = "0831C73E45405A2153091226BF98FB485ED16376988602CC01A5FD086B82D577" },
13
+
]
14
+
15
+
[requirements]
16
+
gleam_http = { version = "~> 3.5"}
17
+
gleam_httpc = { version = "~> 2.1" }
18
+
gleam_stdlib = { version = "~> 0.34 or ~> 1.0" }
19
+
gleeunit = { version = "~> 1.0" }
20
+
simplifile = { version = "~> 1.2" }
21
+
sqlight = { version = "~> 0.9" }
22
+
tom = { version = "~> 0.3" }
+5
packages/adglent.toml
+5
packages/adglent.toml
+5
packages/ag_html.toml
+5
packages/ag_html.toml
+5
packages/apollo.toml
+5
packages/apollo.toml
+5
packages/argamak.toml
+5
packages/argamak.toml
+5
packages/argv.toml
+5
packages/argv.toml
+5
packages/aws4_request.toml
+5
packages/aws4_request.toml
+5
packages/beecrypt.toml
+5
packages/beecrypt.toml
+5
packages/birl.toml
+5
packages/birl.toml
+5
packages/bison.toml
+5
packages/bison.toml
+5
packages/blah.toml
+5
packages/blah.toml
+5
packages/bliss.toml
+5
packages/bliss.toml
+5
packages/cgi.toml
+5
packages/cgi.toml
+5
packages/chip.toml
+5
packages/chip.toml
+5
packages/colours.toml
+5
packages/colours.toml
+5
packages/conversation.toml
+5
packages/conversation.toml
+5
packages/crossbar.toml
+5
packages/crossbar.toml
+5
packages/dahlia.toml
+5
packages/dahlia.toml
+5
packages/dew.toml
+5
packages/dew.toml
+5
packages/dot_env.toml
+5
packages/dot_env.toml
+5
packages/dotenv_gleam.toml
+5
packages/dotenv_gleam.toml
+5
packages/dove.toml
+5
packages/dove.toml
+5
packages/edit_distance.toml
+5
packages/edit_distance.toml
+5
packages/emel.toml
+5
packages/emel.toml
+5
packages/envoy.toml
+5
packages/envoy.toml
+5
packages/esgleam.toml
+5
packages/esgleam.toml
+5
packages/espresso.toml
+5
packages/espresso.toml
+5
packages/espresso_pgo_wrapper.toml
+5
packages/espresso_pgo_wrapper.toml
+5
packages/eval.toml
+5
packages/eval.toml
+5
packages/exception.toml
+5
packages/exception.toml
+5
packages/exercism_test_runner.toml
+5
packages/exercism_test_runner.toml
+5
packages/facquest.toml
+5
packages/facquest.toml
+5
packages/falcon.toml
+5
packages/falcon.toml
+5
packages/filepath.toml
+5
packages/filepath.toml
+5
packages/filespy.toml
+5
packages/filespy.toml
+5
packages/finch_gleam.toml
+5
packages/finch_gleam.toml
+5
packages/for_the_crows.toml
+5
packages/for_the_crows.toml
+5
packages/form_coder.toml
+5
packages/form_coder.toml
+5
packages/fp_gl.toml
+5
packages/fp_gl.toml
+5
packages/fswalk.toml
+5
packages/fswalk.toml
+5
packages/funtil.toml
+5
packages/funtil.toml
+5
packages/galant.toml
+5
packages/galant.toml
+5
packages/gap.toml
+5
packages/gap.toml
+5
packages/gen_core_erlang.toml
+5
packages/gen_core_erlang.toml
+5
packages/glacier.toml
+5
packages/glacier.toml
···
1
+
name = "glacier"
2
+
description = "Glacier brings incremental interactive unit testing to Gleam. It is meant as a drop-in replacement for Gleeunit and depends and wraps a fork of it."
3
+
docs_url = "https://hexdocs.pm/glacier/"
4
+
repo_url = "https://github.com/inoas/glacier"
5
+
category = ""
+5
packages/gladvent.toml
+5
packages/gladvent.toml
+5
packages/glailglind.toml
+5
packages/glailglind.toml
+5
packages/glam.toml
+5
packages/glam.toml
+5
packages/glance.toml
+5
packages/glance.toml
+5
packages/glance_printer.toml
+5
packages/glance_printer.toml
+5
packages/glare.toml
+5
packages/glare.toml
+5
packages/glats.toml
+5
packages/glats.toml
+5
packages/glatus.toml
+5
packages/glatus.toml
+5
packages/gleam.toml
+5
packages/gleam.toml
+5
packages/gleam_bbmustache.toml
+5
packages/gleam_bbmustache.toml
+5
packages/gleam_bitwise.toml
+5
packages/gleam_bitwise.toml
+5
packages/gleam_bson.toml
+5
packages/gleam_bson.toml
+5
packages/gleam_community_ansi.toml
+5
packages/gleam_community_ansi.toml
+5
packages/gleam_community_colour.toml
+5
packages/gleam_community_colour.toml
+5
packages/gleam_community_maths.toml
+5
packages/gleam_community_maths.toml
+5
packages/gleam_community_path.toml
+5
packages/gleam_community_path.toml
+5
packages/gleam_cors.toml
+5
packages/gleam_cors.toml
+5
packages/gleam_cowboy.toml
+5
packages/gleam_cowboy.toml
+5
packages/gleam_cowboy_websockets.toml
+5
packages/gleam_cowboy_websockets.toml
+5
packages/gleam_crypto.toml
+5
packages/gleam_crypto.toml
+5
packages/gleam_deno.toml
+5
packages/gleam_deno.toml
+5
packages/gleam_dotenv.toml
+5
packages/gleam_dotenv.toml
+5
packages/gleam_elli.toml
+5
packages/gleam_elli.toml
+5
packages/gleam_erlang.toml
+5
packages/gleam_erlang.toml
+5
packages/gleam_erlexec.toml
+5
packages/gleam_erlexec.toml
+5
packages/gleam_fetch.toml
+5
packages/gleam_fetch.toml
+5
packages/gleam_gun.toml
+5
packages/gleam_gun.toml
+5
packages/gleam_hackney.toml
+5
packages/gleam_hackney.toml
+5
packages/gleam_hexpm.toml
+5
packages/gleam_hexpm.toml
+5
packages/gleam_http.toml
+5
packages/gleam_http.toml
+5
packages/gleam_httpc.toml
+5
packages/gleam_httpc.toml
+5
packages/gleam_javascript.toml
+5
packages/gleam_javascript.toml
+5
packages/gleam_json.toml
+5
packages/gleam_json.toml
+5
packages/gleam_mongo.toml
+5
packages/gleam_mongo.toml
+5
packages/gleam_nodejs.toml
+5
packages/gleam_nodejs.toml
+5
packages/gleam_os_mon.toml
+5
packages/gleam_os_mon.toml
+5
packages/gleam_otp.toml
+5
packages/gleam_otp.toml
+5
packages/gleam_pgo.toml
+5
packages/gleam_pgo.toml
+5
packages/gleam_qs.toml
+5
packages/gleam_qs.toml
+5
packages/gleam_sendgrid.toml
+5
packages/gleam_sendgrid.toml
+5
packages/gleam_stats.toml
+5
packages/gleam_stats.toml
+5
packages/gleam_stdlib.toml
+5
packages/gleam_stdlib.toml
+5
packages/gleam_synapses.toml
+5
packages/gleam_synapses.toml
+5
packages/gleam_zlists.toml
+5
packages/gleam_zlists.toml
+5
packages/gleamql.toml
+5
packages/gleamql.toml
+5
packages/gleamy_bench.toml
+5
packages/gleamy_bench.toml
+5
packages/gleamy_structures.toml
+5
packages/gleamy_structures.toml
+5
packages/glearray.toml
+5
packages/glearray.toml
+5
packages/gledis.toml
+5
packages/gledis.toml
+5
packages/gleescript.toml
+5
packages/gleescript.toml
+5
packages/glemplate.toml
+5
packages/glemplate.toml
+5
packages/glentities.toml
+5
packages/glentities.toml
+5
packages/glenvy.toml
+5
packages/glenvy.toml
+5
packages/glerm.toml
+5
packages/glerm.toml
+5
packages/glesha.toml
+5
packages/glesha.toml
+5
packages/glevatar.toml
+5
packages/glevatar.toml
+5
packages/glexer.toml
+5
packages/glexer.toml
+5
packages/gliew.toml
+5
packages/gliew.toml
+5
packages/glimmer.toml
+5
packages/glimmer.toml
+5
packages/glimt.toml
+5
packages/glimt.toml
+5
packages/glint.toml
+5
packages/glint.toml
+5
packages/glisten.toml
+5
packages/glisten.toml
+5
packages/globe.toml
+5
packages/globe.toml
+5
packages/glog.toml
+5
packages/glog.toml
+5
packages/glome.toml
+5
packages/glome.toml
+5
packages/gloml.toml
+5
packages/gloml.toml
+5
packages/gloom.toml
+5
packages/gloom.toml
+5
packages/glove.toml
+5
packages/glove.toml
+5
packages/glow_auth.toml
+5
packages/glow_auth.toml
+5
packages/glubs.toml
+5
packages/glubs.toml
+5
packages/glucose.toml
+5
packages/glucose.toml
+5
packages/glue.toml
+5
packages/glue.toml
+5
packages/gluon.toml
+5
packages/gluon.toml
+5
packages/glx.toml
+5
packages/glx.toml
+5
packages/glychee.toml
+5
packages/glychee.toml
+5
packages/gserde.toml
+5
packages/gserde.toml
+5
packages/gsv.toml
+5
packages/gsv.toml
+5
packages/gts.toml
+5
packages/gts.toml
+5
packages/gxid.toml
+5
packages/gxid.toml
+5
packages/halo.toml
+5
packages/halo.toml
+5
packages/howdy.toml
+5
packages/howdy.toml
+5
packages/howdy_uuid.toml
+5
packages/howdy_uuid.toml
+5
packages/htmb.toml
+5
packages/htmb.toml
+5
packages/htmgrrrl.toml
+5
packages/htmgrrrl.toml
+5
packages/htmz.toml
+5
packages/htmz.toml
+5
packages/hug.toml
+5
packages/hug.toml
+5
packages/ids.toml
+5
packages/ids.toml
+5
packages/iso_8859.toml
+5
packages/iso_8859.toml
+5
packages/jbs.toml
+5
packages/jbs.toml
+5
packages/jot.toml
+5
packages/jot.toml
+5
packages/juno.toml
+5
packages/juno.toml
+5
packages/justin.toml
+5
packages/justin.toml
+5
packages/lotta.toml
+5
packages/lotta.toml
+5
packages/lustre.toml
+5
packages/lustre.toml
+5
packages/lustre_animation.toml
+5
packages/lustre_animation.toml
+5
packages/lustre_http.toml
+5
packages/lustre_http.toml
+5
packages/lustre_ssg.toml
+5
packages/lustre_ssg.toml
+5
packages/lustre_ui.toml
+5
packages/lustre_ui.toml
+5
packages/lustre_virtual_list.toml
+5
packages/lustre_virtual_list.toml
+5
packages/lustre_websocket.toml
+5
packages/lustre_websocket.toml
+5
packages/marceau.toml
+5
packages/marceau.toml
+5
packages/migrant.toml
+5
packages/migrant.toml
+5
packages/minigen.toml
+5
packages/minigen.toml
+5
packages/mist.toml
+5
packages/mist.toml
+5
packages/mote.toml
+5
packages/mote.toml
+5
packages/mug.toml
+5
packages/mug.toml
+5
packages/mungo.toml
+5
packages/mungo.toml
+5
packages/nakai.toml
+5
packages/nakai.toml
+5
packages/nerf.toml
+5
packages/nerf.toml
+5
packages/nibble.toml
+5
packages/nibble.toml
+5
packages/non_empty_list.toml
+5
packages/non_empty_list.toml
+5
packages/outil.toml
+5
packages/outil.toml
+5
packages/parser_gleam.toml
+5
packages/parser_gleam.toml
+5
packages/party.toml
+5
packages/party.toml
+5
packages/pb_lite.toml
+5
packages/pb_lite.toml
+5
packages/phony.toml
+5
packages/phony.toml
+5
packages/plinth.toml
+5
packages/plinth.toml
+5
packages/plunk.toml
+5
packages/plunk.toml
+5
packages/prequel.toml
+5
packages/prequel.toml
+5
packages/prng.toml
+5
packages/prng.toml
+5
packages/process_waiter.toml
+5
packages/process_waiter.toml
+5
packages/puddle.toml
+5
packages/puddle.toml
+5
packages/punycode.toml
+5
packages/punycode.toml
+5
packages/rad.toml
+5
packages/rad.toml
+5
packages/radiate.toml
+5
packages/radiate.toml
+5
packages/radish.toml
+5
packages/radish.toml
+5
packages/ranger.toml
+5
packages/ranger.toml
+5
packages/rank.toml
+5
packages/rank.toml
+5
packages/react_gleam.toml
+5
packages/react_gleam.toml
+5
packages/ream.toml
+5
packages/ream.toml
+5
packages/repeatedly.toml
+5
packages/repeatedly.toml
+5
packages/rizzo.toml
+5
packages/rizzo.toml
+5
packages/runetracer.toml
+5
packages/runetracer.toml
+5
packages/sequin.toml
+5
packages/sequin.toml
+5
packages/shellout.toml
+5
packages/shellout.toml
+5
packages/shimmer.toml
+5
packages/shimmer.toml
+5
packages/showtime.toml
+5
packages/showtime.toml
+5
packages/simplifile.toml
+5
packages/simplifile.toml
+5
packages/snag.toml
+5
packages/snag.toml
+5
packages/spinner.toml
+5
packages/spinner.toml
+5
packages/sprocket.toml
+5
packages/sprocket.toml
+5
packages/sqlight.toml
+5
packages/sqlight.toml
+5
packages/stego.toml
+5
packages/stego.toml
+5
packages/testbldr.toml
+5
packages/testbldr.toml
+5
packages/tom.toml
+5
packages/tom.toml
+5
packages/tote.toml
+5
packages/tote.toml
+5
packages/transparent_http.toml
+5
packages/transparent_http.toml
+5
packages/trie_again.toml
+5
packages/trie_again.toml
+5
packages/varasto.toml
+5
packages/varasto.toml
+5
packages/wasmify.toml
+5
packages/wasmify.toml
+5
packages/wimp.toml
+5
packages/wimp.toml
+5
packages/wisp.toml
+5
packages/wisp.toml
+5
packages/zeptomail.toml
+5
packages/zeptomail.toml
+262
src/awesome.gleam
+262
src/awesome.gleam
···
1
+
import gleam/io
2
+
import simplifile
3
+
import gleam/http/request
4
+
import gleam/httpc
5
+
import gleam/option.{type Option, Some}
6
+
import gleam/dynamic.{type Dynamic}
7
+
import gleam/list
8
+
import gleam/bool
9
+
import gleam/string
10
+
import gleam/dict
11
+
import tom
12
+
import sqlight
13
+
14
+
const remote_database_url = "https://packages.gleam.run/packages.sqlite"
15
+
16
+
const local_database_path = "database.sqlite"
17
+
18
+
const packages_query = "
19
+
select
20
+
name
21
+
, description
22
+
, docs_url
23
+
, json_extract(links, '$.Repository') as repo_url
24
+
from packages
25
+
"
26
+
27
+
pub fn main() {
28
+
io.println("Downloading package index database")
29
+
let assert Ok(req) = request.to(remote_database_url)
30
+
let req = request.set_body(req, <<>>)
31
+
let assert Ok(resp) = httpc.send_bits(req)
32
+
let assert 200 = resp.status
33
+
let assert Ok(_) = simplifile.write_bits(local_database_path, resp.body)
34
+
35
+
io.println("Writing new package config files")
36
+
let assert Ok(db) = sqlight.open(local_database_path)
37
+
let assert Ok(packages) =
38
+
sqlight.query(packages_query, db, [], database_package_decoder)
39
+
list.each(packages, write_config)
40
+
41
+
io.println("Loading config files")
42
+
43
+
let assert Ok(entries) = simplifile.read_directory("packages")
44
+
let packages =
45
+
entries
46
+
|> list.map(read_config)
47
+
|> list.filter(fn(p) { p.category != "" })
48
+
|> list.group(fn(p) { p.category })
49
+
|> dict.map_values(fn(_, packages) {
50
+
list.sort(packages, fn(a, b) { string.compare(a.name, b.name) })
51
+
})
52
+
|> dict.to_list
53
+
|> list.sort(fn(a, b) { string.compare(a.0, b.0) })
54
+
55
+
let markdown = "# Awesome Gleam
56
+
57
+
For a full list of packages check out [**the Gleam package index**](https://packages.gleam.run/).
58
+
59
+
Have a Gleam project to share with the world? Run `gleam run`, assign a
60
+
category for it in `packages/NAME.toml`, and run `gleam run` again.
61
+
62
+
Looking for something to build? Check out [the suggestions list][suggestions].
63
+
64
+
[suggestions]: https://github.com/gleam-lang/awesome-gleam/issues/34
65
+
66
+
- [Packages](#packages)
67
+
" <> string.join(list.map(packages, contents_list_entry), "\n") <> "
68
+
- [Templates](#templates)
69
+
- [Projects](#projects)
70
+
- [Compilers](#compilers)
71
+
- [Web applications](#web-applications)
72
+
- [Tools](#tools)
73
+
- [Editor support](#editor-support)
74
+
- [Resources](#resources)
75
+
- [Websites](#websites)
76
+
- [Courses](#courses)
77
+
- [Social Media](#social-media)
78
+
79
+
# Packages
80
+
81
+
" <> string.join(list.map(packages, category_section), "\n\n") <> "
82
+
83
+
# Projects
84
+
85
+
## Compilers
86
+
87
+
Compilers for Gleam and compilers written in Gleam.
88
+
89
+
- [gleam-lang/gleam](https://github.com/gleam-lang/gleam) - The Gleam compiler.
90
+
- [gleam-lang/example-lisp-interpreter](https://github.com/gleam-lang/example-lisp-interpreter/) - A toy Lisp interpreter in Gleam.
91
+
92
+
## Web applications
93
+
94
+
Web applications written in Gleam.
95
+
96
+
- [gleam-lang/example-todomvc](https://github.com/gleam-lang/example-url-shortener) - A serverside only implementation of Todo MVC written in Gleam!
97
+
- [gleam-lang/example-echo-server](https://github.com/gleam-lang/example-echo-server) - An example Gleam web application.
98
+
- [gleam-lang/packages](https://github.com/gleam-lang/packages) - The Gleam package index website.
99
+
100
+
# Tools
101
+
102
+
- [tynanbe/rad](https://github.com/tynanbe/rad) - A flexible task runner companion for the Gleam build manager.
103
+
- [inoas/glychee](https://github.com/inoas/glychee) - A simple Gleam benchmark runner which wraps Benchee for the heavy lifting.
104
+
105
+
## Editor support
106
+
107
+
- [gleam-lang/gleam.vim](https://github.com/gleam-lang/gleam.vim) - Gleam support for Vim/Neovim.
108
+
- [gleam-lang/gleam-mode](https://github.com/gleam-lang/gleam-mode) - An emacs major mode for the Gleam programming language.
109
+
- [gleam-lang/vscode-gleam](https://github.com/gleam-lang/vscode-gleam) - Gleam support for VS Code.
110
+
- [digitalcora/sublime-text-gleam](https://github.com/digitalcora/sublime-text-gleam) - Gleam support for Sublime Text.
111
+
- [sbdchd/neoformat](https://github.com/sbdchd/neoformat) - A Vim/Neovim plugin for formatting code with support for `gleam format`.
112
+
- [itsgreggreg/language-gleam](https://github.com/itsgreggreg/language-gleam) - Gleam language support in Atom.
113
+
- [DannyLettuce/gleam_gedit](https://github.com/DannyLettuce/gleam_gedit) - Gleam syntax support for Gedit (and other GtkSourceView editors).
114
+
115
+
# Resources
116
+
117
+
## Websites
118
+
119
+
Websites with Gleam related content.
120
+
121
+
- [gleam.run](https://gleam.run) - Gleam's website.
122
+
- [tour.gleam.run](https://gleam.run) - Gleam's interactive tour and turorial.
123
+
124
+
## Courses
125
+
126
+
- [Exercism's Gleam track](https://github.com/exercism/gleam/) - Crowd-sourced code mentorship. Practice having thoughtful conversations about code.
127
+
- [tanklesxl/gladvent](https://github.com/tanklesxl/gladvent) - An `Advent of Code` runner for Gleam, targeting Erlang.
128
+
129
+
## Talks
130
+
131
+
- [Introduction to Gleam](https://fosdem.org/2023/schedule/event/beam_gleam_intro/) - [Harry Bairstow](https://github.com/harryet)
132
+
- [Distributed music programming with Gleam, BEAM, and the Web Audio API](https://fosdem.org/2023/schedule/event/beam_distributed_music_programming_gleam/) - [Hayleigh Thompson](https://github.com/hayleigh-dot-dev)
133
+
- [I learned Gleam in a week. Here's how it went](https://www.youtube.com/watch?v=-8OIK4RIUsg) - [Theo Harris](https://github.com/Theosaurus-Rex)
134
+
135
+
## Social Media
136
+
137
+
### Twitter
138
+
139
+
* [#gleamlang hashtag](https://twitter.com/search?q=%23gleamlang&src=typed_query)
140
+
* [@gleamlang](https://twitter.com/gleamlang) - The official twitter account.
141
+
* [@louispilfold](https://twitter.com/louispilfold) - The creator of Gleam.
142
+
143
+
### Reddit
144
+
145
+
* [r/gleamlang](https://reddit.com/r/gleamlang/)
146
+
"
147
+
148
+
io.println("Writing REAME")
149
+
let assert Ok(_) = simplifile.write("README.md", markdown)
150
+
151
+
io.println("Done! ✨")
152
+
}
153
+
154
+
fn category_section(pair: #(String, List(ConfigPackage))) -> String {
155
+
let #(name, packages) = pair
156
+
157
+
"## " <> name <> "
158
+
159
+
" <> string.join(list.map(packages, package_entry), "\n")
160
+
}
161
+
162
+
fn package_entry(package: ConfigPackage) -> String {
163
+
"- ["
164
+
<> package.name
165
+
<> "]("
166
+
<> package.repo_url
167
+
<> ") [(docs)]("
168
+
<> package.docs_url
169
+
<> ") - "
170
+
<> package.description
171
+
}
172
+
173
+
fn contents_list_entry(pair: #(String, _)) -> String {
174
+
let name = pair.0
175
+
let slug = string.replace(string.lowercase(name), " ", "-")
176
+
" - [" <> name <> "](#" <> slug <> ")"
177
+
}
178
+
179
+
fn read_config(entry: String) -> ConfigPackage {
180
+
let assert Ok(toml) = simplifile.read("packages/" <> entry)
181
+
let assert Ok(doc) = tom.parse(toml)
182
+
183
+
let assert Ok(name) = tom.get_string(doc, ["name"])
184
+
let assert Ok(description) = tom.get_string(doc, ["description"])
185
+
let assert Ok(docs_url) = tom.get_string(doc, ["docs_url"])
186
+
let assert Ok(repo_url) = tom.get_string(doc, ["repo_url"])
187
+
let assert Ok(category) = tom.get_string(doc, ["category"])
188
+
189
+
ConfigPackage(
190
+
name: name,
191
+
description: description,
192
+
docs_url: docs_url,
193
+
repo_url: repo_url,
194
+
category: category,
195
+
)
196
+
}
197
+
198
+
fn write_config(package: DatabasePackage) -> Nil {
199
+
let exists = simplifile.is_file("packages/" <> package.name <> ".toml")
200
+
use <- bool.guard(when: exists, return: Nil)
201
+
202
+
case package {
203
+
DatabasePackage(
204
+
name: name,
205
+
description: description,
206
+
docs_url: Some(docs_url),
207
+
repo_url: Some(repo_url),
208
+
) -> {
209
+
let toml = new_toml(name, description, docs_url, repo_url)
210
+
let assert Ok(_) = simplifile.write("packages/" <> name <> ".toml", toml)
211
+
Nil
212
+
}
213
+
_ -> Nil
214
+
}
215
+
}
216
+
217
+
fn new_toml(
218
+
name: String,
219
+
description: String,
220
+
docs_url: String,
221
+
repo_url: String,
222
+
) -> String {
223
+
"name = \"" <> name <> "\"
224
+
description = \"" <> description <> "\"
225
+
docs_url = \"" <> docs_url <> "\"
226
+
repo_url = \"" <> repo_url <> "\"
227
+
category = \"\"
228
+
"
229
+
}
230
+
231
+
pub type ConfigPackage {
232
+
ConfigPackage(
233
+
name: String,
234
+
description: String,
235
+
docs_url: String,
236
+
repo_url: String,
237
+
category: String,
238
+
)
239
+
}
240
+
241
+
pub type DatabasePackage {
242
+
DatabasePackage(
243
+
name: String,
244
+
description: String,
245
+
docs_url: Option(String),
246
+
repo_url: Option(String),
247
+
)
248
+
}
249
+
250
+
fn database_package_decoder(
251
+
data: Dynamic,
252
+
) -> Result(DatabasePackage, dynamic.DecodeErrors) {
253
+
let decoder =
254
+
dynamic.decode4(
255
+
DatabasePackage,
256
+
dynamic.element(0, dynamic.string),
257
+
dynamic.element(1, dynamic.string),
258
+
dynamic.element(2, dynamic.optional(dynamic.string)),
259
+
dynamic.element(3, dynamic.optional(dynamic.string)),
260
+
)
261
+
decoder(data)
262
+
}