{"id":23187274,"url":"https://github.com/svenssonjoel/lispbm","last_synced_at":"2025-09-09T01:33:57.757Z","repository":{"id":38621044,"uuid":"152950119","full_name":"svenssonjoel/lispBM","owner":"svenssonjoel","description":"An interpreter for a concurrent lisp with message-passing and pattern-matching.","archived":false,"fork":false,"pushed_at":"2025-09-02T09:17:33.000Z","size":32325,"stargazers_count":112,"open_issues_count":5,"forks_count":11,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-09-02T10:26:09.443Z","etag":null,"topics":["chibios","concurrency","esp32","freertos","functional-programming","interpreter","language","lisp","microcontroller","nrf52","pattern-matching","programming-language","quasiquotation","repl","riscv32","stm32f4","zephyr"],"latest_commit_sha":null,"homepage":"http://www.lispbm.com","language":"C","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/svenssonjoel.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-10-14T07:32:37.000Z","updated_at":"2025-09-02T09:17:37.000Z","dependencies_parsed_at":"2023-10-22T10:32:03.037Z","dependency_job_id":"d74f56f1-2b51-49e0-b899-cb2309ddc2ae","html_url":"https://github.com/svenssonjoel/lispBM","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/svenssonjoel/lispBM","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenssonjoel%2FlispBM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenssonjoel%2FlispBM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenssonjoel%2FlispBM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenssonjoel%2FlispBM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/svenssonjoel","download_url":"https://codeload.github.com/svenssonjoel/lispBM/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenssonjoel%2FlispBM/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274232029,"owners_count":25245856,"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-09-08T02:00:09.813Z","response_time":121,"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":["chibios","concurrency","esp32","freertos","functional-programming","interpreter","language","lisp","microcontroller","nrf52","pattern-matching","programming-language","quasiquotation","repl","riscv32","stm32f4","zephyr"],"created_at":"2024-12-18T10:19:03.414Z","updated_at":"2025-09-09T01:33:57.748Z","avatar_url":"https://github.com/svenssonjoel.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lispBM (LBM)\n\nLispBM is a lisp or scheme like programming language for\nmicrocontrollers.  LispBM also borrows a couple of ideas from Erlang\nwhen it comes to concurrency, message passing, pattern matching and\nprocess monitoring.  The LispBM runtime system can be compiled for\neither 32 or 64 bit platforms and runs on a wide range of hardware\nsuch as for example STM32, NRF52, ESP32 or X86.  When running the\nLispBM runtime system on a microcontroller it can be built on top of\nChibiOS, FreeRTOS or ZephyrOS or, if you are adventurous, on bare-metal.\nLispBM can also be built to run on top of a regular linux.\n\nLispBM is an embeddable scripting language meant to be integrated into\na larger application. Our goal is that LispBM is a suitably sandboxed scripting\nlanguage to be used in just about any application domain.\n\n![LispBM mascot](https://github.com/svenssonjoel/lispBM/blob/master/mascot/lispbm_llama_small.png)\n\nThe LispBM mascot, Lispy the llama, was created by\n[PixiLadyArt](https://www.instagram.com/pixiladyart/). Thank you, Pixi! \n\n## Contribute to LispBM!\nLispBM is an open source project and welcomes collaboration and contribution.\nDo you want to get involved and help out?\n\n - Check out the [lispbm.com](http://www.lispbm.com) website.\n - Join the [discord server](https://discord.gg/urtJUUMnwQ).\n\n## Getting started \n\nThe easiest way to get started with LispBM programming is to use\n[VESC-Tool](https://vesc-project.com/vesc_tool) together with the\n[VESC EXPRESS Firmware](https://github.com/vedderb/vesc_express) on an [esp32c3](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitm-1.html).\n\nVESC-Tool gives you access to a very capable [IDE](https://vesc-project.com/sites/default/files/lisp%20overview.png) for lisp programming on embedded systems\nand the VESC Express firmware provides built in functionality to interface with CAN, WIFI, BLE and UART\nas well as GPIO and display drivers.\n\nIf you are looking for a more bare-bones way to add scripting capabilities to your\nembedded system, LispBM is quite platform independent and can be compiled for many\ndifferent MCUs and systems. LispBM can tie into the rest of your application via\nwhat we call \"extensions\" which are C functions that can be called from your LispBM scripts. \n\n### Documentation\n\n - [LispBM language reference](./doc/lbmref.md).\n - [Display library reference](./doc/displayref.md).\n - [TrueType Font (TTF) library reference](./doc/ttfref.md).\n - [Runtime system library reference](./doc/runtimeref.md).\n - [Dynlib reference](./doc/dynref.md).\n - [Gotchas and caveats](./doc/gotchas.md).\n - C code documentation can be found [here](http://lispbm.com/cdocs/html/index.html).\n - LispBM's internals are documented as a series of (now quite outdated) [blog posts](http://svenssonjoel.github.io).\n - There are [demonstrations on YouTube](https://youtube.com/playlist?list=PLtf_3TaqZoDOQqZcB9Yj-R1zS2DWDZ9q9).\n\n## The LBM REPL\n\nThere is an example REPL implementation that runs on X86 32 or 64bit in the `repl` directory.\nThe REPL depends on libreadline.\n\n\n**REPL Dependencies for 32Bit executable on 64Bit linux:**\n* libreadline\n* lib32readline\n* gcc-multilib\n* libpng\n\nOn Ubuntu you can obtain the depencies by:\n```shell\nsudo apt-get install gcc-multilib libreadline-dev lib32readline-dev libpng-dev libpng-dev:i386\n```\n\nThen issue command `make` in the repl directory.\n\nThere is also a Nix flake (see details below). You can build and run the repl using `nix run`. This will build the 32 bit version. For the 64 bit repl you instead run `nix run .#repl64`.\n\n### Editor support\n\n* [vesc_tool](https://vesc-project.com/vesc_tool)\n* [vscode support](https://marketplace.visualstudio.com/items?itemName=rasmus-soderhielm.lispbm-language-support)\n* [zed](https://github.com/cortex/zed-lispbm)\n* [Tree-sitter](https://github.com/cortex/tree-sitter-lispbm)\n\n## Development\n\nThere is a Nix flake to help you build the repl and documentation. It outputs packages for the 32 and 64 bit repl: `repl` and `repl64`, the documentation: `doc`, and the doxygen source code documentation: `c-doc`. Assuming you have Nix installed, you can build these using\n```shell\nnix build .#\u003cpackage\u003e\n```\n\nThe generated output is then placed in the `result/` directory. However `doc` and `c-doc` packages might not make much sense to build in this way because they are supposed to generate files inside the repository tree. Therefore, it makes more sense to instead enter their respective development environment with `nix develop .#\u003cpackage\u003e`. This places you in a new shell with the required dependencies installed where you can build them with `make`. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsvenssonjoel%2Flispbm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsvenssonjoel%2Flispbm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsvenssonjoel%2Flispbm/lists"}