{"id":17992841,"url":"https://github.com/leostera/lam","last_synced_at":"2025-05-08T00:21:43.026Z","repository":{"id":51560280,"uuid":"310817624","full_name":"leostera/lam","owner":"leostera","description":":rocket: a lightweight, universal actor-model vm for writing scalable and reliable applications that run natively and on WebAssembly","archived":false,"fork":false,"pushed_at":"2021-03-07T20:19:34.000Z","size":21545,"stargazers_count":253,"open_issues_count":6,"forks_count":15,"subscribers_count":14,"default_branch":"main","last_synced_at":"2024-12-14T15:05:30.808Z","etag":null,"topics":["actor-machine","actor-model","beam","elixir","erlang","native","runtime-system","virtual-machine","vm","wasm","webassembly"],"latest_commit_sha":null,"homepage":"https://lam.run/manual","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leostera.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":"AbstractMachinesLab"}},"created_at":"2020-11-07T10:17:54.000Z","updated_at":"2024-11-05T00:15:26.000Z","dependencies_parsed_at":"2022-08-22T08:00:59.962Z","dependency_job_id":null,"html_url":"https://github.com/leostera/lam","commit_stats":null,"previous_names":["leostera/lam","abstractmachineslab/lam"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Flam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Flam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Flam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leostera%2Flam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leostera","download_url":"https://codeload.github.com/leostera/lam/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":231468021,"owners_count":18381174,"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","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":["actor-machine","actor-model","beam","elixir","erlang","native","runtime-system","virtual-machine","vm","wasm","webassembly"],"created_at":"2024-10-29T20:09:22.852Z","updated_at":"2024-12-27T10:07:35.810Z","avatar_url":"https://github.com/leostera.png","language":"Rust","funding_links":["https://github.com/sponsors/AbstractMachinesLab"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://lam.run/\" target=\"_blank\"\u003e\n    \u003cimg width=\"80\" src=\"https://raw.githubusercontent.com/AbstractMachinesLab/lam/main/docs/lam.png\" alt=\"LAM logo\"\u003e\n  \u003c/a\u003e\n  \u003cp\u003e\u0026nbsp;\u003c/p\u003e\n\u003c/div\u003e\n\n![Main workflow](https://github.com/AbstractMachinesLab/lam/workflows/Main%20workflow/badge.svg)\n\n**LAM** is a lightweight, universal virtual machine for writing scalable and\nreliable applications that run natively and on\n[WebAssembly](https://webassembly.org).\n\nIt is inspired by [Erlang](https://erlang.org) and\n[Lua](https://www.lua.org/start.html), and it is compatible with the [Erlang\nVM](https://erlang.org).\n\nLAM lets you reuse the same programming paradigm, known for being\n**productive**, across your entire application stack.\n\nCome join us on [Discord](https://discord.gg/v5aAqKq6Rs)! (Ps: we share a\nserver with [Caramel](https://caramel.run))\n\n## Features\n\n* Runs Natively and on WebAssembly -- pick and choose your runtime!\n* Easy to Target -- a small and specified bytecode with a text and binary format\n* Erlang VM compatibility -- run your existing Erlang, Elixir, Caramel, and Gleam code\n* Seamless multi-core -- built to scale from one to thousands of cores for free\n* Extreme reliability -- use Erlang's OTP supervision patterns\n\n## Status\n\nStill under heavy development!\n\nThere's plenty of work to be done for it to be fully usable, but we keep a few\ntracking issues here:\n\n* [LAM Specification Status](https://github.com/AbstractMachinesLab/lam/issues/5)\n* [Targetability Status](https://github.com/AbstractMachinesLab/lam/issues/7)\n* [WebAssembly and Native Runtime Support](https://github.com/AbstractMachinesLab/lam/issues/8)\n\nThe Erlang and Elixir ecosystem compatibility is tracked here:\n* [Erlang VM Compatibility Status](https://github.com/AbstractMachinesLab/lam/issues/4)\n* [Erlang/Elixir Support Across Runtimes](https://github.com/AbstractMachinesLab/lam/issues/6)\n\n## Getting Started\n\nYou can download the latest binary from the [releases\npage](https://github.com/AbstractMachinesLab/lam/releases). After\nunpacking it you should be able to add it to your PATH env and start playing\naround with the `lam` binary.\n\nLike this:\n\n```sh\n# in this example I'm running linux with glibc\n$ wget https://github.com/AbstractMachinesLab/lam/releases/download/v0.0.7/lam-v0.0.7-x86_64-unknown-linux-gnu.tar.gz\n$ tar xzf lam-*\n$ export PATH=$(pwd)/lam/bin:$PATH\n```\n\nNow we can do a quick test. Make a file `test.erl` with this contents:\n\n```erl\n-module(test).\n\n-export([main/1]).\n\nmain([]) -\u003e ok;\nmain([Name|T]) -\u003e\n  io:format(\u003c\u003c\"Hello, ~p!\\n\"\u003e\u003e, [Name]),\n  main(T).\n```\n\nAnd we can compile it to BEAM byte code and use LAM to build a binary for it,\nlike this:\n\n```sh\n$ erlc test.erl\n$ lam build test.beam --output test.exe --target native --entrypoint test\n$ ./test.exe Joe Robert Mike\nHello, Joe!\nHello, Robert!\nHello, Mike!\n```\n\n## How does it work?\n\nLAM compiles your .beam files ahead of time into a representation that's\noptimized for running them.\n\nThen it bundles that with the appropriate target runtime into some binary\noutput.\n\n```\n                       binary\n                    instructions\n                   +------------+              output\n .beam files +----\u003e| 1001101110 |-----+    +-----------+\n                   +------------+     |    | .exe      |\n                                      |---\u003e| .wasm     |\n                   +-------------+    |    | .wasm/.js |\n                   | LAM RunTime |----+    +-----------+\n                   +-------------+\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleostera%2Flam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleostera%2Flam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleostera%2Flam/lists"}