LispBM language support

March 23, 2026 · View on GitHub

Temp README

LispBM language support

This brings basic language support for the lispBM language to vscode.

LispBM is a functional programming language in the lisp family designed to be run on microcontrollers.

This is the first real extention I write for vscode, so don't put too much faith in this extension.

Features

This extension adds the new language LispBM.

The primary feature are the provided Textmate grammar definitions. This means that basic syntax highlighting is supported (no semantic highlighting!).

Bracket definitions are also provided.

Custom folding ranges can be specified using comments. Start the range with a ;#region line and end it with a ;#endregion comment. Custom text after #region and #endregion is allowed. Example:

;#region My Optional Region

; This can be folded :)
(def a 5)
(print a)

;#endregion

Requirements

  • A serial port accessible to the OS (e.g. /dev/ttyUSB0 on Linux, COM3 on Windows)
  • A device running LispBM with the VESC packet protocol interface (e.g. the ESP32C3 example from the LispBM repository)

Device Integration

Version 0.4.0 adds direct communication with LispBM devices over serial using the VESC packet protocol.

When a .lbm or .lisp file is open, a row of buttons appears in the editor title bar:

ButtonCommandDescription
plugConnectConnect to a serial port
disconnectDisconnectClose the serial connection
cloud-uploadUploadStream the current file to the device
playEvaluateEvaluate an expression on the device
refreshResetRestart the LispBM evaluator
pausePausePause the evaluator
continueContinueResume the evaluator
pulseStatsShow heap and memory usage

Device output (print statements and REPL results) appears in the LispBM output channel.

All commands are also available via Ctrl+Shift+PLispBM: ....

Extension Settings

SettingDefaultDescription
lispbm.serialPort(prompt on connect)Serial port path, e.g. /dev/ttyUSB0
lispbm.baudRate115200Baud rate for the serial connection
lispbm.streamChunkSize256Chunk size in bytes when uploading code

Known Issues

None! :)

Building

make          # compile TypeScript
make package  # produce a .vsix installable package

Install the resulting .vsix via Extensions panel → ...Install from VSIX...

Release Notes

See CHANGELOG.md for more details

0.0.1

Initial release of the extension.

0.1.0

  • Changed line comments from ;; to single ;. This seems to fix an issue where bracket pair colorization would colorize brackets in comments.
  • Added default file icon

0.1.1

  • Fixed a lot of syntax grammar issues, including broken quoted lists, and supporting inserting function expressions into quasi-quoted lists, and lots of function parameter list improvements.

0.2.0

  • Add indentation to language config. Pressing enter will now auto indent more often.
  • Improved textmate operator recognition.

0.2.2

  • Add syntax grammar support for @const-start and @const-end (their documentation).

0.2.3

  • Add syntax support for match structure.
  • Fix <=, >=, and not-eq not being recognized as operators.

0.3.0

  • Add custom folding marker comments
  • Fix a lot of indentation issues.
  • Fix unrecognized true and false constants.

0.3.1

  • Add support for @const-symbol-strings

0.3.2

  • Fix escaped characters in strings not being detected.

0.3.3

  • Add support for read-eval-program, undefine, import, and defunret.

0.3.4

  • Add more operators, like cdr
  • Add missing numeric literals

0.3.5

  • Fix bug causing incorrect symbol highlighting
  • Support strings and numbers in match patterns
  • Support the ".lbm" extension
  • Remove the ".lispbm" extension

0.3.6

  • Add missing special forms
  • Fix negative integer parsing

0.3.7

  • Add support for defmacro

0.4.0

  • Add basic VESC Packet compatibility, allowing devices to be connected over serial interfaces