{"id":13647064,"url":"https://github.com/lamdu/lamdu","last_synced_at":"2025-12-16T21:49:52.260Z","repository":{"id":1022559,"uuid":"2616288","full_name":"lamdu/lamdu","owner":"lamdu","description":"lamdu - towards the next generation IDE","archived":false,"fork":false,"pushed_at":"2025-10-26T07:48:26.000Z","size":32696,"stargazers_count":1876,"open_issues_count":22,"forks_count":73,"subscribers_count":47,"default_branch":"main","last_synced_at":"2025-10-30T18:37:02.194Z","etag":null,"topics":["integrated-development-environment","programmer-tool","programming-language","projectional-editor","structure-editor","wytiwys"],"latest_commit_sha":null,"homepage":"https://www.lamdu.org","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lamdu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"lamdu","open_collective":"lamdu"}},"created_at":"2011-10-20T21:13:43.000Z","updated_at":"2025-10-28T22:27:25.000Z","dependencies_parsed_at":"2023-12-16T13:05:18.009Z","dependency_job_id":"f5bfb94e-91c1-44f0-b8c5-426053981c85","html_url":"https://github.com/lamdu/lamdu","commit_stats":{"total_commits":9819,"total_committers":29,"mean_commits":"338.58620689655174","dds":"0.45788776861187497","last_synced_commit":"043bfd8782307c1516df37688994f08b412681a5"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/lamdu/lamdu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdu%2Flamdu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdu%2Flamdu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdu%2Flamdu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdu%2Flamdu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lamdu","download_url":"https://codeload.github.com/lamdu/lamdu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdu%2Flamdu/sbom","scorecard":{"id":577996,"data":{"date":"2025-08-11","repo":{"name":"github.com/lamdu/lamdu","commit":"574c63d9b55254d85fadd7384b564b320f7605eb"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":2,"reason":"Found 4/20 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":5,"reason":"6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.8.1 not signed: https://api.github.com/repos/lamdu/lamdu/releases/67809906","Warn: release artifact v0.8.0 not signed: https://api.github.com/repos/lamdu/lamdu/releases/49033091","Warn: release artifact v0.7.1 not signed: https://api.github.com/repos/lamdu/lamdu/releases/14077635","Warn: release artifact v0.7 not signed: https://api.github.com/repos/lamdu/lamdu/releases/13639799","Warn: release artifact v0.8.1 does not have provenance: https://api.github.com/repos/lamdu/lamdu/releases/67809906","Warn: release artifact v0.8.0 does not have provenance: https://api.github.com/repos/lamdu/lamdu/releases/49033091","Warn: release artifact v0.7.1 does not have provenance: https://api.github.com/repos/lamdu/lamdu/releases/14077635","Warn: release artifact v0.7 does not have provenance: https://api.github.com/repos/lamdu/lamdu/releases/13639799"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/lamdu/lamdu/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/lamdu/lamdu/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/lamdu/lamdu/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/lamdu/lamdu/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:89: update your workflow using https://app.stepsecurity.io/secureworkflow/lamdu/lamdu/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:102: update your workflow using https://app.stepsecurity.io/secureworkflow/lamdu/lamdu/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:103: update your workflow using https://app.stepsecurity.io/secureworkflow/lamdu/lamdu/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:104: update your workflow using https://app.stepsecurity.io/secureworkflow/lamdu/lamdu/ci.yml/main?enable=pin","Warn: containerImage not pinned by hash: doc/platforms/ArchLinux/Dockerfile:1","Warn: containerImage not pinned by hash: tools/linux/dockerfile:1: pin your Docker image by updating ubuntu:latest to ubuntu:latest@sha256:7c06e91f61fa88c08cc74f7e1b7c69ae24910d745357e0dfe1d2c0322aaf20f9","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 15 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T18:22:19.606Z","repository_id":1022559,"created_at":"2025-08-20T18:22:19.606Z","updated_at":"2025-08-20T18:22:19.606Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27772006,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-16T02:00:10.477Z","response_time":57,"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":["integrated-development-environment","programmer-tool","programming-language","projectional-editor","structure-editor","wytiwys"],"created_at":"2024-08-02T01:03:19.578Z","updated_at":"2025-12-16T21:49:52.222Z","avatar_url":"https://github.com/lamdu.png","language":"Haskell","readme":"# Lamdu\n\n[![Join the chat at https://gitter.im/lamdu/lamdu](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/lamdu/lamdu?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\nThis project aims to create a *next-generation*, *live programming* environment\nthat radically improves the programming experience.\n\nSee the [Main Page](http://www.lamdu.org/)\n\n## Installation\n\nTo build Lamdu from source, [see the instructions for your platform](doc/Build.md)\n\n## Tutorial\n\n*Note:* In the shortcut key combinations, \"left\" refers to the left cursor key.\n\n### Simple expressions\n\nAt the top we have an interactive shell, where we can type calculations.\n\nThe `⋙` is our prompt to this shell. Think of it like a calculator:\nyou enter an expression, hit a button, and it tells you the answer.\nThe next time you use the calculator,\nyou clear whatever's in there and enter a new expression. Same here.\n\n![Golden ratio example](https://i.imgur.com/vbPRcCO.png)\n\nTo type the calculation above:\n\n* Type \"**`1+s`**\" at the prompt (`⋙`).\n  Notice we have chosen \"`1`\" for the addition's left argument.\n  However, we have only begun to type the second argument: it starts with an \"s\".\n  Lamdu knows we have finalized the left argument because we have moved on from it,\n  indicated by the `+`.\n  But we have done nothing to indicate that just `s` is the second argument.\n  To help us finalize the right argument, Lamdu has presented a menu of\n  type-appropriate choices containing \"s\" in their names \u0026ndash; \"containing\",\n  not just \"starting with\". This menu updates as we type.\n* Next, we will flesh out the \"s\" into a \"sqrt\".\n  As of September 2017, \"sqrt\" should already be selected in the nearby menu,\n  because it is alphabetically the first function in the library to contain an \"s\"\n  in its name and to output a number.\n  However your menu, take the path of fewest keystrokes:\n  continuing to type the function's name\n  reduces the menu options to just those that match.\n  Cursor keys allow you to select from the menu.\n  Hit **space** to choose your selected menu option.\n* Type \"**`5`**\".\n* Select the whole expression by pressing **shift+left** until the whole REPL expression is selected.\n* Type \"**`/2`**\".\n  Notice that Lamdu automatically inserted the parentheses.\n\nLamdu displays the evaluation of each expression, whether the whole or a subexpression.\nSuch an automatic display is called an \"annotation\".\nThe annotation of an expression appears below that of any child expression.\nFor example, the evaluation of `(1 + sqrt 5) / 2`\nappears below that of its child expression, `(1 + sqrt 5)`.\nThe former is `1.61...` and the latter is `3.23...`.\n\nTo keep the expression size from bloating, some annotations are shrunk,\nlike that of the `sqrt 5` above, which is `2.23...`.\nTo see this in normal size, navigate to the expression by going to the `sqrt`,\nor to the `5`, and press **shift+left**.\n\nWe have just expressed the golden ratio.\nTo save it and give it a name, navigate to the `⋙` sign and press **return**.\nPress **return** to name the new definition.\nType \"**`golden`**\" and **enter**.\nYou do not need to explicitly save - as your Lamdu program is always saved.\n\n### Creating a function\n\n*Note:* Ctrl-Z is undo.\n\n![Factorial function](https://i.imgur.com/vWjV8pc.png)\n\nTo create the function above:\n\n* Navigate to the \"New...\" button and type **`factorial x=`**.\n\n  Note: Lamdu spaces your code automatically.\n  When you pressed **space** at the left-hand-side of a definition, Lamdu\n  added a parameter to the function rather than a \"space\" whitespace character as a normal text editor would.\n\n  The equals sign after `factorial` appeared without typing it because all definitions have one.\n  However, after `factorial x`, you may type an equals sign anyways, or skip over it with the right cursor key.\n\n* Now type the body of the function: **`if x=0`**, **tab**, **`1`**, **tab**, **`x*fac (x-1)`**\n\nWe've now written the function. Let's use it.\n\n* Open a REPL by navigating to the \"New...\" button and pressing **space**.\n* We don't have to name the repl, press **right** or **tab** to go to its body\n* Type \"**`fac 5`**\" and press **space**.\n\nLamdu should now display the evaluation of the whole function, as well as its subexpresssions.\nThe active `if` branch (the `else`) is highlighted via a green background on the `|` symbol.\nThe `|` represents a [suspended computation](https://github.com/lamdu/lamdu/blob/master/doc/Language.md#suspended-computations).\n\nThis function is recursive and invoked additional applications of itself.\nTo navigate between these function applications,\nnavigate to the arrows under the `x` parameter and press **right** or **left**.\n\n## Further Exploration / Help Documentation\n\nIn the lower-right of Lamdu's screen, you'll see that F1 brings up contextual help.\n\nIt shows all the key bindings currently active, which changes\naccording to the current context.\n","funding_links":["https://github.com/sponsors/lamdu","https://opencollective.com/lamdu"],"categories":["Haskell"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flamdu%2Flamdu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flamdu%2Flamdu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flamdu%2Flamdu/lists"}