Skip to content
Choose a tag to compare



Code Refactoring


  • 14e8c9b: add basic expression syntax (Christian Menard) #1023
  • 9a1427b: replace Value with Expressions in the grammar (Christian Menard) #1023
  • a4989a5: Use Expression instead of Value in ASTUtils (Christian Menard) #1023
  • 50ded1d: fix various occurrences of Value in Kotlin code (Christian Menard) #1023
  • 4fe7f28: fix all kotlin code (Christian Menard) #1023
  • 12e8e04: update all occurences of Value in Java code (Christian Menard) #1023
  • 1c7fde0: rename ValueGenerator -> ExpressionGenerator (Christian Menard) #1023
  • 686303e: fix the CGenerator (Christian Menard) #1023
  • 9143842: Merge branch 'master' into expressions (Christian Menard) #1023
  • 23d79ae: fix compile errors after merge (Christian Menard) #1023
  • ae88382: fix compile errors in tests (Christian Menard) #1023
  • 2b72c41: bugfixes (Christian Menard) #1023
  • 745eedf: fix compile errors in diagram synthesis (Christian Menard) #1023
  • b563a55: fix validation of deadlines (Christian Menard) #1023
  • 78e3dd2: Merge branch 'master' into expressions (Christian Menard) #1023
  • 18e798c: fix use of eReferences in checkExpressionAsTime (Christian Menard) #1023
  • d213f43: bugfix (Christian Menard) #1023
  • 872191d: fix unit tests (Christian Menard) #1023
  • 2605217: fix bug in C++ generator (Christian Menard) #1023
  • 647782c: use Expressions for after delays, add a validator rule (Christian Menard) #1023
  • a5a073b: remove all uses of Delay from the code base (Christian Menard) #1023
  • f9dd4ec: fix unit tests (Christian Menard) #1023
  • 5ce567e: delete unused grammar rule (Christian Menard) #1023
  • beee9e5: simplify time check (Christian Menard) #1023
  • 7c530cd: avoid code duplication and always use checkExpressionAsTime (Christian Menard) #1023
  • 4d23097: Merge remote-tracking branch 'origin/master' into expressions (Christian Menard) #1023
  • d3cd947: implement toText in dedicated switch class (Christian Menard) #1023
  • f32212f: fix compilation error in tests (Christian Menard) #1023
  • 20f0ef8: bugfix (Christian Menard) #1023
  • 750f8ae: bugfix (Christian Menard) #1023
  • 1fb9003: fix a weird exception that suddenly occurred (Christian Menard) #1023
  • b98ea06: correctly deal with null (Christian Menard) #1023
  • a086884: fix logic error in validator (Christian Menard) #1023
  • 70a2e4d: adjust unit tests (Christian Menard) #1023
  • a62b6c5: fix zero delays; no need to replicate expressions anymore (Christian Menard) #1023
  • a05bc20: add tests for zero delays (Christian Menard) #1023
  • 038781c: bugfix in test (Christian Menard) #1023
  • 59bd9e9: Merge remote-tracking branch 'origin/master' into expressions (Christian Menard) #1023
  • 73e4495: remove Element case from toText as its specification differs from the other cases (Christian Menard) #1023
  • f35ce29: refactoring (Christian Menard) #1023
  • c2f7949: code should not be null when toText is called (Christian Menard) #1023
  • 4e921dd: make ToText a singleton (Christian Menard) #1023
  • 87842d8: use ToText also in diagrams (Christian Menard) #1023
  • 97a1cc7: Merge remote-tracking branch 'origin/master' into expressions (Christian Menard) #1023
  • 1ee3e3b: Simplify pr method. (Peter Donovan) #1023
  • 82b4d4b: [tests] Ad hoc patch for LSP tests. (Peter Donovan) #1023
  • 1b5dbd2: [tests] Further revise LSP tests. (Peter Donovan) #1182
  • 8d4d047: [tests] Whitespace only. (Peter Donovan) #1183
  • 3ef8ae5: [tests] Whitespace only. (Peter Donovan) #1183
  • ec064c1: [tests] Whitespace only. (Peter Donovan) #1183
  • 065468a: [tests] Clean up after previous few commits. (Peter Donovan) #1183
  • 911a3cb: Merge branch 'master' into expressions (Peter Donovan) #1023
  • d8675a5: Clean up after merge. (Peter Donovan) #1023
  • 1e2ac1f: [tests] Another ad hoc patch in LSP tests. (Peter Donovan) #1023
  • 0cafd5a: Merge branch 'master' into expressions (Peter Donovan) #1023
  • 04f23bb: Address Python LSP test failure. (Peter Donovan) #1023
  • a121c89: [lsp] Rename toText etc. and refactor accordingly. (Peter Donovan) #1023
  • 2d06ded: [lsp] Ad hoc patch over an NPE. (Peter Donovan) #1023
  • 26df952: [refactoring] Bugfixes related to function renaming. (Peter Donovan) #1023
  • 610d67e: [refactoring] Bugfix related to function renaming. (Peter Donovan) #1023
  • 7c84b6f: [refactoring] Bugfix related to function renaming. (Peter Donovan) #1023
  • 1b6cadd: [refactoring] Bugfix related to function renaming. (Peter Donovan) #1023
  • e933452: Address comments from code review. (Peter Donovan) #1023
  • a8e68ff: Address comments from code review. (Peter Donovan) #1023
  • 63a171c: added info report when no main reactor (Zekai Lin) #1192
  • fb89053: Update org.lflang.diagram/src/org/lflang/diagram/synthesis/util/ (Zekai Lin) #1192
  • 69d48e1: Update org.lflang.diagram/src/org/lflang/diagram/synthesis/util/ (Zekai Lin) #1192
  • 5359d14: Update org.lflang.diagram/src/org/lflang/diagram/synthesis/util/ (Zekai Lin) #1192
  • 09510a0: Update org.lflang/src/org/lflang/ (Zekai Lin) #1192
  • 8badb12: Update org.lflang/src/org/lflang/ (Zekai Lin) #1192
  • 256993f: Update org.lflang/src/org/lflang/ (Zekai Lin) #1192
  • e28aede: Update org.lflang/src/org/lflang/ (Zekai Lin) #1192
  • db62403: Update org.lflang/src/org/lflang/ (Zekai Lin) #1192
  • abfe8f4: Added comments (Zekai Lin) #1192
  • 59f7748: Corrected some typos (Zekai Lin) #1192
  • 4535fff: Removed repetitive comments (Zekai Lin) #1192
Choose a tag to compare

v0.2.0 (2022-05-01)


This release brings the minimum version requirement of Java to 17, which is a long-term support version that is also broadly supported by newer platforms (e.g., Apple silicon). Other changes included in this release are: a refactoring of the user-facing API of reactor-c, various bugfixes and enhancements of Rust, TypeScript, and C target, and minor improvements of the diagram synthesis.

Full Changelog

Implemented enhancements:

  • The Rust target should support the 'workers' and 'threading' target properties #991
  • Optionally suppress the red No Main Reactor icon #1089 (edwardalee)

Fixed bugs:

  • Segfault when calling _lf_check_deadline #1123
  • In generated Rust code, logical actions in main reactors aren't mutable, making them not schedulable #1110
  • Add categories explicitly to the diagram synthesis options #1119 (soerendomroes)

Closed issues:

  • User facing utility functions such as info_print should also have lf_ prefix #1124
  • Tracking the renaming of APIs in C and Python target #1108
  • Remove logic for handling examples from testing framework #1079

Merged pull requests:

  • Prefix print functions with lf_ #1127 (housengw)
  • Fix set executing_reaction in self struct #1126 (housengw)
  • Remove references to deprecated APIs in the code generator #1122 (housengw)
  • Update Python target APIs to match the C target updates #1116 (housengw)
  • Update SET, schedule and tag APIs in the C target #1103 (housengw)
  • Remove redundant struct and related code in python target #1102 (housengw)
  • Allow bank_index in initializers #1101 (edwardalee)
  • Added support for state variables in diagrams #1100 (a-sr)
  • Support inline code arguments on main reactor for Rust target #1099 (jhaye)
  • Add support for threading compiler flag to Rust target #1098 (jhaye)
  • Update SET, schedule and tag APIs in the C target #1097 (housengw)
  • Java configuration bumped to version 17 #1094 (lhstrh)
  • Add validation tests for ports in main or federated reactor #1091 (housengw)
  • Update and add federated execution tests for TypeScript target #1062 (hokeun)
Choose a tag to compare

v0.1.0 (2022-04-11)


This is the first stable release of Lingua Franca. Aside from numerous bugfixes, a number of new features have been introduced since v0.1.0-beta, including: generation of ROS2 nodes directly from LF code (C++); improved error handling; support for multiports and banks (TypeScript); modular support for runtime schedulers (C); and modal reactors (C and Python). Finally, a major refactoring has been performed in which all remaining Xtend code was ported to Java.

Full Changelog

Implemented enhancements:

  • Add a -v / --version flag to lfc #927
  • Produce informative message when lfc is run on non-LF files #919
  • Make Docker generation compatible with the files target property #887
  • Preconfigure Epoch with example projects #374
  • In banks of reactors, make bank_index a proper parameter #343
  • Align the meaning of the threads target property across targets #290
  • Improve Stability of Positioning Edges connected to Reactions in Diagrams #1040 (a-sr)
  • Improve layout options #1015 (soerendomroes)
  • Support modal models in Python #1009 (edwardalee)
  • Replace the 'threads' target property with the 'workers' and 'threading' properties #993 (cmnrd)
  • Docker files property #987 (housengw)
  • Enable generation of ROS2 nodes directly from C++ code #984 (cmnrd)
  • Added --version flag to lfcand improved error messages #979 (cmnrd)
  • Improve warning message for unrecognized target parameters #964 (cmnrd)
  • Add bank & multiport support in TypeScript code generator with > 30 multiport tests. #942 (hokeun)
  • Added support for modular scheduler in C runtime #743 (Soroosh129)
  • Added support for Modal Models #501 (a-sr)

Fixed bugs:

  • Tracing does not get enabled in all files of reactor-c #1067
  • C benchmark PingPong is broken #1058
  • Command line argument -w does not work. #1056
  • Maven build is broken #1033
  • FilterBank benchmark in C++ has cycles #1031
  • EclipseErrorReporter reports errors in the wrong file #1030
  • Dependency cycle detection does not seem to work #1024
  • Spurious warnings in Epoch #1016
  • Error reporting in Epoch is broken #994
  • Epoch fails to highlight errors on codegen #966
  • Some cargo errors are not reported in LF #936
  • Files without main don't compile if they have imports #913
  • Invalid time literal causees IllegalArgumentException #908
  • Reactor extending itself causes StackOverflowError #907
  • Having multiple unnamed main reactors causes nullPointerException #905
  • Catch errors from the TS type checker in the examples category #405
  • Fixed an issue with bank_index #1087 (Soroosh129)
  • Fix bug where tracing does not get fully enabled #1068 (hokeun)
  • Fix errors in tracing util. #1043 (hokeun)
  • Properly recognize network message actions in TypeScript generator #1042 (hokeun)
  • [error reporting] Correct bugs reported on Epoch #1038 (petervdonovan)
  • Fix handling of ganged connections #1037 (edwardalee)
  • Broaden a pylint ignore. #1029 (petervdonovan)
  • Fixed causality loop detection bug #1026 (edwardalee)
  • Suppress line-too-long warnings in the Python target. #1018 (petervdonovan)
  • [C] do not generate code without main reactor #1000 (housengw)
  • Check for null reactor to avoid NPE #998 (edwardalee)
  • Fix eclipse error reporting #995 (cmnrd)
  • Epoch error reporting #967 (edwardalee)
  • Detect and flag and as error multiple mains #965 (edwardalee)
  • Inheritance cleanups #962 (edwardalee)
  • Fixes #768 #952 (housengw)
  • Report raw, unparsed error streams as a last resort. #941 (petervdonovan)

Closed issues:

  • Epoch fails on valid file #1027
  • List modal reactor tests in own test category #1020
  • Merge JavaAstUtils and ASTUtils #1003
  • Kotlin classes do not get build by buildLfc task (unless the clean task is also run) #930
  • Navigate to imported reactors in diagrams #889
  • Port Xtend classes to Java #838
  • Use the same implementation of deque accross all C benchmarks #765
  • Use the BenchmarkRunner reactor in all C benchmarks #764
  • Build both Epoch with maven and lfc with gradle in our CI workflow #575
  • Declutter repo and move into separate Github Organization #347
  • C syntax for referencing parameters and state variables #82

Merged pull requests:

Choose a tag to compare

Full Changelog: v0.1.0-alpha...v0.1.0-beta


  • Reduced size of generated C code when using banks and multiports (#759 and #875)
  • Significantly reduced memory footprint and compilation time (#759 and #875)
  • Ported the C++ code generator to Kotlin (#345)
  • Ported the TypeScript code generator to Kotlin (#431, #486)
  • Added enforcement of LF scoping rules in generated C++ code (#375)
  • Fixed support for generic reactors in the C++ target (#467)
  • Dropped the rebuild feature of lfc (#530)
  • Fixed after for various complex connection patterns (#541, #553, #593)
  • Improved error reporting in the standalone compiler (#543)
  • The C target now uses CMake to compile generated code (#402)


  • eclipse.core.resources 3.15.0 -> 3.16.0 (#829)
  • eclipse.core.runtime 3.22.0 -> 3.24.0 (#829)
  • exec-maven-plugin 1.6.0 -> 3.0.0 (#829)
  • gradle 6.5 -> 7.0 (#829)
  • junit 4.12 -> 4.13.2 (#829)
  • junit-jupiter-* 5.7.2 -> 5.8.2 (#829)
  • junit-platform-* 1.7.2 -> 1.8.2 (#829)
  • kotlin 1.4.10 -> 1.6.10 (#866)
  • lsp4j 0.10.0 -> 0.12.0 (#829)
  • shadowJar 6.0.0 -> 7.1.2 (#829)
  • xtext-gradle-plugin -> 2.0.8 -> 3.0.0 (#829)

Federation support

  • Added support for federated Python programs
  • Added support for federated TypeScript programs (#538, #596, #646, reactor-ts#71)
  • Enhanced support for Docker containers (including for federated programs) (#700, #750, #754)
  • Added built-in support for ROS 2 serialization (#449)
  • RTI is now a standalone application (#395)


  • Introduced syntax for method definitions (currently only supported by the C++ target) (#382)
  • Added support for giving widths of banks and multiports as runtime parameters or target code in the C++ target (#387, #420)
  • Added syntax for interleaved connections (#416)
  • Created a new Rust target (#488, #628)
  • Added the CCpp target, which accepts C++ code but is supported by the C runtime (#513)

Platform support

  • LF programs with the TypeScript target can now be compiled on Windows (#850).
  • Added Windows support for the C and Python targets (#532)


  • Implemented the Savina benchmark suite in the C, C++, and Rust target (modulo those that require mutations)
  • Improved performance of the C++ runtime considerably


  • Multiports and banks are now iterable in the Python target (#713)
  • Fixed an issue where top-level custom Python classes were being serialized incorrectly
  • bank_index (useful for banks of reactors) is now a proper parameter (#424)
    that can be passed down the reactor hierarchy via parameter assignment.

Tool support

VS Code extension

  • Generated code is now validated when an LF file is saved for all targets except C (#828). Generated C code is only validated when it is fully compiled.


  • Added compile button as an alternative to the Eclipse automatic build feature (#848)
  • Added terminal window support (#509)
  • Updated icons


  • Added tools for exporting dependency information from the C++ runtime (#788)
  • Added tracing support for the Python target (#568)
  • Added a script for conveniently running benchmarks (#243)
  • Added version bump script (#829)
Choose a tag to compare

This is a preliminary release of the Lingua Franca Compiler (lfc), a command-line code generator that translates Lingua Franca programs into target language programs, and an Eclipse-based IDE (integrated development environment) that provides a sophisticated editor as well as a code generator. This release supports four target languages: C, C++, Python, and Typescript. See documentation. Of the four target languages, C is the most complete. It supports all documented language features including an experimental implementation of federated execution.

The IDE is suitable for the following platforms:

  • Linux (lingua-franca-rca-0.1.0-alpha-linux.gtk.x86_64.tar.gz)
  • MacOS (lingua-franca-rca-0.1.0-alpha-macosx.cocoa.x86_64.tar.gz)
    • IMPORTANT NOTE: MacOS will report that is broken because it was not signed. To execute it, please run xattr -cr first on the command line. Eventually, we will provide a signed download.
  • Windows (

The lfc command line application is suitable for:

  • Linux, MacOS (lfc-0.1.0-alpha.tar.gz)
  • Windows (

System Requirements

IDE Features

  • code generation
  • diagram synthesis
  • error forwarding from target compiler
  • validation

Language Features (see language specification)

  • imports
  • banks
  • multiports
  • list-valued parameters
  • target properties
  • time type