{"id":17231974,"url":"https://github.com/pushfoo/docker-gren","last_synced_at":"2026-02-11T16:37:28.724Z","repository":{"id":245600675,"uuid":"817116678","full_name":"pushfoo/docker-gren","owner":"pushfoo","description":"Gren in a docker container.","archived":false,"fork":false,"pushed_at":"2024-06-27T19:16:53.000Z","size":27,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-25T02:22:45.238Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pushfoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2024-06-19T04:04:09.000Z","updated_at":"2024-06-27T19:16:56.000Z","dependencies_parsed_at":"2025-08-25T01:19:28.791Z","dependency_job_id":"d6463255-3ed9-4070-8489-43e4596f8d96","html_url":"https://github.com/pushfoo/docker-gren","commit_stats":null,"previous_names":["pushfoo/docker-gren"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pushfoo/docker-gren","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pushfoo%2Fdocker-gren","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pushfoo%2Fdocker-gren/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pushfoo%2Fdocker-gren/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pushfoo%2Fdocker-gren/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pushfoo","download_url":"https://codeload.github.com/pushfoo/docker-gren/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pushfoo%2Fdocker-gren/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29338481,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T16:14:43.024Z","status":"ssl_error","status_checked_at":"2026-02-11T16:14:15.258Z","response_time":97,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-10-15T05:00:11.342Z","updated_at":"2026-02-11T16:37:28.707Z","avatar_url":"https://github.com/pushfoo.png","language":"Shell","readme":"# docker-gren\n\n[![License](https://img.shields.io/badge/License-BSD_3-Clause.svg)](https://opensource.org/licenses/BSD-3-Clause)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://makeapullrequest.com)\n\n[Gren]: https://gren-lang.org/\n[docker-overview]: https://docs.docker.com/guides/docker-overview/\n\nThe Gren programming language in a docker container!\n\n\nTo learn about the Gren programming language, see [What's Gren?](#whats-gren) below.\n\n## The Basics\n\n### What is this?\n\nCurrent features include:\n\n- [x] Full [Gren][] in a [Docker][docker-overview] container\n- [ ] Beginner-friendly documentation\n  - [ ] Persistent state \u0026 volumes\n  - [ ] Ports \u0026 networks\n- [ ] Advanced usage guide\n\n\n### How do I use it?\n\n[docker-postinstall]: https://docs.docker.com/engine/install/linux-postinstall/\n[gren-learn]: https://gren-lang.org/book/\n[dockerhub]: https://hub.docker.com/r/pushfoo/gren\n\n1. Install [Docker][docker-overview]\n2. `docker run -it pushfoo/gren gren repl` to get a throwaway REPL\n3. [Start learning Gren!](gren-learn)\n\nView a full list of currently built versions at [hub.docker.com/r/pushfoo/gren][dockerhub].\n\n\u003e [!TIP]\n\u003e On Linux, you may also need to do one of the following:\n\u003e 1. Use `sudo` before your `docker` commands\n\u003e 2. Follow the [post-install steps][docker-postinstall] to enable sudoless `docker` commands\n\n\n### Why did you make it?\n\n[13r0ck]: https://github.com/13r0ck\n\n**TL;DR:** [13r0ck][] hooked me on Elm's syntax and Gren frees it from frontend\n\n[13r0ck][] has a rare combination of technical, communication, and community\nengagement skills. He suggested I try [Elm][] as an antidote to the Python flaws\nwhich continue to crush my hopes now and then. I only used [Elm][] briefly, but it\nwas enough to upend my views on programming languages in the best ways.\n\n**Brief \u0026 shameless promotion: Hire [13r0ck][] if you get the chance!**\n\n### Who is this for?\n\n[Node.js]: https://nodejs.org/en\n[Haskell]: https://www.haskell.org/\n[dep-issues]: https://en.wikipedia.org/wiki/Dependency_hell\n\n**TL;DR:** Anyone who wants consistent [Gren][] environments in a box!\n\nIt isn't just beginners who have a hard time with getting the right\n[Node.js][] and [Haskell][] versions. It can be surprisingly hard, even\nwith knowledge and experience!\n\nThese situations can include:\n\n* Systems with permission or dependency issues\n* Large-scale web deployments[^1]\n\n\n## What's Gren?\n\n[Elm]: https://elm-lang.org/\n\n**TL;DR:** Gren is Elm's younger, more adventurous sibling\n\n\n### How's it like Elm?\n\n[soulslike-gameplay]: https://en.wikipedia.org/wiki/Soulslike#Gameplay\n\n**TL;DR:** They're both a [Dark Souls][soulslike-gameplay] of functional programming\n\nInstead of end-of-level bosses, you fight the compiler:\n\n* **It's strict:** unhandled conditions are compile errors\n* **It's fair:** the errors tell you how to fix your mistakes\n* **It's rewarding:** beating it produces reliable software\n\n### How's Gren different from Elm?\n\n[Roadmap FAQ]: https://github.com/elm/projects/blob/0d0f52abb320d1370aa7b6abc7e1007ba4c524ab/roadmap.md\n[See Elm's Roadmap FAQ]: https://github.com/elm/projects/blob/0d0f52abb320d1370aa7b6abc7e1007ba4c524ab/roadmap.md#can-i-use-elm-on-servers\n[Unlike Elm]: https://github.com/elm/projects/blob/0d0f52abb320d1370aa7b6abc7e1007ba4c524ab/notes/on-general-purpose.md\n[domain-specific language]: https://en.wikipedia.org/wiki/Domain-specific_language\n[Turing tarpit]: https://en.wikipedia.org/wiki/Turing_tarpit\n[on general purpose languages]: https://github.com/elm/projects/blob/0d0f52abb320d1370aa7b6abc7e1007ba4c524ab/notes/on-general-purpose.md\n[if another language handles them better]: https://github.com/elm/projects/blob/0d0f52abb320d1370aa7b6abc7e1007ba4c524ab/notes/on-general-purpose.md#relevance-to-elm\n\n**TL;DR:** [Unlike Elm][], [Gren][] wants to explore the world outside the browser\n\n#### Elm Sticks Closer to Home\n\n**TL;DR:** Elm wants to stick to being a strong web frontend language\n\nElm's designers outline three excellent points in their official\n[Roadmap FAQ][] and statement [on general purpose languages][]:\n\n1. Languages tend to be great in certain roles\n2. Forcing a language into the wrong role turns it into [Turing tarpit][]\n3. Each language is to some degree a [domain-specific language][]\n\nThen it veers somewhere inconvenient. They explain how Elm will:\n\n* stick to its stated purpose and current strengths\n* avoid areas outside those [if another language handles them better][].\n\nIt's a strict policy, but it's also a useful one. It means Elm will\ncontinue being an excellent frontend language.\n\n#### Gren Wants to Explore\n\n**TL;DR:** Gren devs love many Elm ideas, so we're freeing them from the browser\n\n[make a PR]: https://github.com/pushfoo/docker-gren/pulls\n[ANSI escape codes]: https://en.wikipedia.org/wiki/ANSI_escape_code\n[rich]: https://github.com/Textualize/rich?tab=readme-ov-file\n[gren-tui]: https://github.com/blaix/gren-tui/tree/main\n[node.FileSystem]: https://packages.gren-lang.org/package/gren-lang/node/latest/module/FileSystem\n\n\u003e [!NOTE]\n\u003e Please [make a PR][] if I got something wrong below.\n\u003e I'm fairly new to both Elm and Gren, so the chances are high.\n\n[syntax and feature differences]: https://gren-lang.org/book/appendix/faq/#what-are-the-differences-between-gren-and-elm\n\nIn addition to some [syntax and feature differences][], some Gren packages implement\nfeatures which Elm avoids by design.\n\n| Task                         | Exemplary Gren Package  | Does Elm Have an Equivalent?          |\n|------------------------------|-------------------------|---------------------------------------|\n| On-disk File handling        | [node.FileSystem][]     | Not really, per Elm's [Roadmap FAQ][] |\n| TUI (Python's [rich][], etc) | [gren-tui][]            | Please [make a PR][] if you know any! |\n\n\n[elm-ansi]: https://package.elm-lang.org/packages/wolfadex/elm-ansi/latest/\n[gren-ansi]: https://packages.gren-lang.org/package/blaix/gren-ansi/version/1.0.0/overview\n[elm/html]: https://package.elm-lang.org/packages/elm/html/latest/\n[gren-html]: https://packages.gren-lang.org/package/icidasset/html-gren/version/4.1.0/overview\n[elm/url]: https://package.elm-lang.org/packages/elm/url/latest/\n[gren-url]: https://packages.gren-lang.org/package/gren-lang/url/latest/\n[prettynice]: https://prettynice.dev/\n[elm-pages]: https://github.com/dillonkearns/elm-pages\n\nGren also offers replacements for many existing Elm packages. Many are forks or\nports with APIs which remain close or identical to their Elm counterparts. Some may\neven be by the same author, but I haven't had the time to verify which ones yet.\n\n\n| Example Task                 | Elm Package       | Gren Alternative | API Similarity[^2] |\n|------------------------------|-------------------|------------------|--------------------|\n| HTML generation              | [elm/html][]      | [gren-html][]    | Close or identical |\n| URL Parsing                  | [elm/url][]       | [gren-url][]     | Close or identical |\n| [ANSI escape codes][]        | [elm-ansi][]      | [gren-ansi][]    | Very different     |\n| Full-stack Support           | [elm-pages][][^3] | [prettynice][]   | Differs            |\n\nTo search for more packages, please see the following:\n\n* https://package.elm-lang.org/\n* https://packages.gren-lang.org/\n\n\n## A Practical Example: Debian OldStable\n\n[DontBreakDebian]: https://wiki.debian.org/DontBreakDebian\n\n**TL;DR:** Docker helps avoid [breaking debian with non-distro packages][DontBreakDebian]\n\n### The Scenario\n\n[OldStable]: https://wiki.debian.org/DebianOldStable\n\nImagine you need to deploy to a system running Debian, or worse, its\n[OldStable][] version:\n\n* Packages tend to only merge security patches\n* Feature releases tend to lag years behind the latest\n* The Debian documentation explicitly warns you that third party packages\n  [are a common way to break Debian!][DontBreakDebian]\n\n### The Solution\n\nUsing a [Docker container][docker-overview] container saves you the trouble\nof managing package sources, extracting archives, and especially the worst of\nall: [hunting down the right versions of each][dep-issues].\n\nWith a container, all of it's in already in the box:\n\n* [Gren][] itself\n* [Node.js][] to allow [prettynice][] and other web dev tools to run\n\n[not a first-class feature]: https://dev.to/eberfreitas/elm-in-the-server-or-anywhere-else-with-promises-5eoj\n\n[^1]: Okay, let's be real: maybe you shouldn't use this in production *quite* yet, but we all have ambitions!\n[^2]: API similarity was eyeballed without using AST comparison tools. Please [make a PR][] if this table needs corrections.\n[^3]: It's [not a first-class feature][].\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpushfoo%2Fdocker-gren","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpushfoo%2Fdocker-gren","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpushfoo%2Fdocker-gren/lists"}