Frame is a simple yet powerful system specification language for defining the dynamic behavior of systems. With Frame notation it is easy to quickly design state machines that comply with core UML statechart concepts through a decidedly advantageous new approach.
A Markdown Language For System Designers
UML and other modeling specifications promote a visual-first paradigm. However this approach to system design requires (sometimes expensive) diagramming and modeling tools. Additionally - let’s just say it - working with boxes and lines to code can be a pain when the systems get complex.
With Frame, anyone with a text editor can quickly sketch out a system design concept - notepad is just fine!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #Lamp -interface- turnOn turnOff -machine- $Off |turnOn| -> $On ^ $On |turnOff| -> $Off ^ ##
The true power of Frame, however, is realized by the ability to generate both documentation and code from Frame specification documents:
Frame comes with a supporting transpiler called the Framepiler (clever huh?). The Framepiler is written in Rust and is deployed online as a WebAssembly module on the page itself - no server interactions are required to transpile!
Additionally, the Framepiler is written as both a library as well as standalone executable. This allows Frame to support browser based use cases as well as to be included as part of arbitrary build toolchains.
Software Architecture and Engineering.
Traditionally software projects struggle with maintaining code and documentation that must be kept in sync. With Frame, these activities become one.
Frame notation directly supports the following statechart concepts and features:
- Hierarchical State Machines
- State Actions (enter/exit events)
- State History
It should be noted that Frame does not (and will not) adhere strictly to the UML and W3C standards. Although functionally compliant with the best parts of the specifications, Frame intends to break new ground not covered with those approaches.
At a functional level, Frame currently provides the ability to easily restructure object-oriented classes to support state machines.
This capability, in and of itself, is interesting and valuable. However, by taking the viewpoint of these classes as system controllers, the larger utility and direction of Frame becomes vast and very exciting.
The Future of Frame
The roadmap for Frame will be a journey that starts with the evolution of the language to define the capabilities and semantics of individual systems as implemented by object-oriented classes. Additionally, the project will explore other possible targets for system controllers than just object-oriented classes. These will include but are not limited to lower-level languages for embedded systems and hardware.
Looking into the future, the Frame project will explore how to design, generate and document systems-of-systems that control vastly more complex environments in a powerful and understandable way.