{"id":19299883,"url":"https://github.com/roc-lang/book-of-examples","last_synced_at":"2026-02-28T07:10:09.576Z","repository":{"id":226604528,"uuid":"768829663","full_name":"roc-lang/book-of-examples","owner":"roc-lang","description":"Software Design by Example in Roc","archived":false,"fork":false,"pushed_at":"2024-08-08T20:37:48.000Z","size":1593,"stargazers_count":56,"open_issues_count":28,"forks_count":18,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-10-13T04:23:37.693Z","etag":null,"topics":["roc","software-design","tutorial"],"latest_commit_sha":null,"homepage":"","language":"Roc","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/roc-lang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":"GOVERNANCE.md","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-07T20:13:23.000Z","updated_at":"2025-09-26T11:48:41.000Z","dependencies_parsed_at":"2024-03-28T14:43:34.723Z","dependency_job_id":"20a289a3-a176-4c4e-9b10-d539a9f2e350","html_url":"https://github.com/roc-lang/book-of-examples","commit_stats":null,"previous_names":["roc-lang/book-of-examples"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/roc-lang/book-of-examples","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roc-lang%2Fbook-of-examples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roc-lang%2Fbook-of-examples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roc-lang%2Fbook-of-examples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roc-lang%2Fbook-of-examples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/roc-lang","download_url":"https://codeload.github.com/roc-lang/book-of-examples/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/roc-lang%2Fbook-of-examples/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29927293,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T19:37:42.220Z","status":"online","status_checked_at":"2026-02-28T02:00:07.010Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["roc","software-design","tutorial"],"created_at":"2024-11-09T23:13:03.287Z","updated_at":"2026-02-28T07:10:09.555Z","avatar_url":"https://github.com/roc-lang.png","language":"Roc","funding_links":[],"categories":[],"sub_categories":[],"readme":"[book website (WIP)](https://roc-lang.github.io/book-of-examples/)\n\n# Software Design by Example in [Roc][roc]\n\nThe best way to learn design in any field is to study examples.\nThese lessons therefore build scale models of tools that programmers use every day\nto show how experienced software designers think.\nAlong the way,\nthey introduce some fundamental concepts about pure functional languages\nthat most programmers have never encountered.\n*SDXRoc* is a sequel to previous books in [JavaScript][sdxjs] and [Python][sdxpy].\n\n## Contributing\n\n1.  Fork this repository on GitHub so that you have a copy under your own account.\n\n2.  Clone your repository to your machine.\n\n3.  Make your changes in a branch in the repository on your machine\n    (or in `main` if you prefer).\n\n4.  Push that branch to your forked repository on GitHub.\n\n5.  Create a pull request from that branch of your repository on GitHub to the main repository.\n\nWe suggest that you add this repository as a remote to your desktop:\n\n```\n$ git remote add upstream git@github.com:roc-lang/book-of-examples\n```\n\nso that you can `git pull upstream main` periodically to stay up to date with changes.\n\n## Topics\n\n| Name               | GitHub ID          | Topic                     | Slug       |\n| ------------------ | ------------------ | ------------------------- | ---------- |\n| Shritesh Bhattarai | shritesh           | SVG rendering             | svg        |\n| Luke Boswell       | lukewilliamboswell | text editor               | editor     |\n| Sophie Collard     | sophiecollard      | property-based testing    | proptest   |\n| Ashley Davis       | ashleydavis        | thumbnail gallery         | gallery    |\n| Eli Dowling        | faldor20           | autocompletion            | completion |\n| *unclaimed*        | *unclaimed*        | file backup               | backup     |\n| Hristo Georgiev    | hristog            | file diffing              | diff       |\n| Norbert Hajagos    | HajagosNorbert     | file transfer             | ftp        |\n| Norbert Hajagos    | HajagosNorbert     | discrete event simulation | des        |\n| Stuart Hinson      | stuarth            | pattern matching          | match      |\n| Stuart Hinson      | stuarth            | redis data store          | redis      |\n| Nathaniel Knight   | nathanielknight    | random number generation  | prng       |\n| Monica McGuigan    | monmcguigan        | JSON codec                | json       |\n| Noel Rivas         | noelrivasc         | logging framework         | logging    |\n| Abhinav Sarkar     | abhin4v            | pretty printing           | pretty     |\n| Fabian Schmalzried | FabHof             | binary data packing       | binary     |\n| Isaac Van Doren    | isaacvando         | compression               | compress   |\n| Isaac Van Doren    | isaacvando         | HTML templates            | template   |\n| Jasper Woudenberg  | jwoudenberg        | continuous integration    | ci         |\n| Agustin Zubiaga    | agu-z              | HTML parser               | parser     |\n\n## Learner Persona\n\n1.  Ning (26) has a college degree in software engineering\n    and has been working as a programmer for four years.\n    They are comfortable using JavaScript, Python, the Unix shell, Git, and Docker\n    to build web applications\n    in a team with half a dozen others.\n\n2.  Ning is helping to convert a 20K line legacy front end from JavaScript to TypeScript.\n    That experience sparked an interest in strongly-typed languages,\n    which led them to experiment with Elm on some personal projects\n    and to go through the Roc tutorial.\n\n3.  Ning would like to learn more about functional programming,\n    and about the differences between working in interpreted and compiled languages.\n    They are also interested in getting involved with an active open source community\n    where they might still be able to make a noticeable contribution.\n\n4.  Ning has never done a course on compilers or programming language semantics,\n    so they are worried that they don't know enough to start\n    and will look foolish if they ask questions.\n    In addition,\n    their workload means they cannot commit to a regular learning schedule,\n    so lessons must be usable in bursts of two or three hours at a time.\n\n## FAQ\n\n-   **Why [Roc][roc] rather than a more established language like Haskell, Clojure, or Elixir?**\n    One of the lessons from the previous books is that\n    a large language can make design harder to see:\n    core ideas might actually have been clearer\n    if those books had used a smaller language like Lua.\n    This book is also partly an experiment:\n    can a project like this early in a language's development\n    accelerate its evolution\n    by drawing attention to oversights and sources of friction\n    while the language is still malleable?\n\n-   **What license are we using?**\n    The code is covered by the [MIT License][mit-license],\n    so it can be copied, remixed, extended, and incorporated into other projects\n    (both open and closed source).\n    The prose (i.e., the text of the lessons) is covered by\n    the [CC-BY-NC-ND][cc-by-nc-nd] License,\n    which means it is free to read\n    but people must cite us as the source if they quote or copy it,\n    cannot republish it commercially without our permission,\n    and cannot create derivative works (e.g., translations) without our permission.\n    We may remove some of these restrictions once we have a contract with a publisher,\n    but they are in place now because it's much easier to relax a license after the fact\n    than to tighten one up.\n\n-   **How do I propose a topic?**\n    Create an issue with \"topic proposal:\" in its title\n    and a brief description of what you'd like to cover.\n    Greg will triage issues, start discussions, and identify overlaps.\n\n-   **How do I know what topics are taken?**\n    Look at the \"Topics\" section of this file\n    or for issues marked [assigned][assigned] in [our repository][repo].\n\n-   **What if I don't have an idea but still want to contribute?**\n    Issues labeled [help wanted][help-wanted] in [our repo][repo]\n    are topic proposals in search of authors.\n    If you are interested in taking one of these on,\n    please add a comment to the issue and mention `@gvwilson` to start discussion.\n\n-   **Where should code and notes go?**\n    For now,\n    each topic should go in a subdirectory of the root directory\n    whose name is a short hyphenated slug,\n    e.g., `editor` or `http-server`.\n    Each topic should be a standalone project;\n    please include an `index.md` Markdown file\n    with point-form notes about the design of the code.\n\n## Structure\n\nWe are currently building this site using [Jekyll][jekyll]\n(the default static site generator for GitHub Pages);\nwe will convert to something Roc-based soon.\n\n-   Project\n    -   `./CODE_OF_CONDUCT.md`: code of conduct\n    -   `./GOVERNANCE.md`: how this project is run`\n    -   `./LICENSE.md`: license\n    -   `./README.md`: this file\n-   `./index.md`: home page\n-   `./*_.md` (trailing underscore): create website pages for project files\n-   `*/index.md`: chapters and appendices\n-   `./*.css` and `./favicon.svg`: for generated website\n-   Jekyll\n    -   `./_config.yml`: configuration\n    -   `./_data/`: data files (see below)\n    -   `./_includes/`: inclusions\n    -   `./_layouts/default.html`: our page template\n-   Data files\n    -   `_data/contrib.yml`: contributors (use GitHub ID as primary key)\n    -   `_data/order.yml`: chapters and appendices in order (use slug as primary key)\n    -   `_data/topic.yml`: chapter and appendix information (use slug as primary key)\n\n[assigned]: https://github.com/roc-lang/book-of-examples/labels/assigned\n[cc-by-nc-nd]: https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode\n[help-wanted]: https://github.com/roc-lang/book-of-examples/labels/help-wanted\n[jekyll]: https://jekyllrb.com/\n[mit-license]: https://opensource.org/license/MIT\n[repo]: https://github.com/roc-lang/book-of-examples\n[roc]: https://www.roc-lang.org/\n[sdxjs]: https://third-bit.com/sdxjs/\n[sdxpy]: https://third-bit.com/sdxpy/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froc-lang%2Fbook-of-examples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froc-lang%2Fbook-of-examples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froc-lang%2Fbook-of-examples/lists"}