The release of CRVJA v2
Subscribe
Apple
Spotify
Overcast
Stitcher
RSS
-->
About<br>Home
In this post, we will explore the major changes in the new version (v2.0.0) of Code Revival via JavaScript for AMOS (CRVJA). If you are not familiar with CRVJA yet, I recommend reading this blog post from Henrique Serra.
Improving CRVJA
A few weeks have passed since the ReAnimate Summer School 2026, where we used the CRVJA Tool Suite for the first time on real projects during the Game Jam. By "real projects," I mean games developed by participants who were not part of the CRVJA development team.
We already knew that CRVJA still contained bugs and that some AMOS commands had not yet been implemented before the Summer School began. Yet, the participants developed really nice games, with great playability, visuals, and stories. We worked on fixing some bugs during the Summer School, and we are continuing to improve CRVJA for the upcoming events.
While implementing these improvements, we realized that changes to the grammar or the transpiler could alter the behavior of games created during ReAnimate'26. A game that compiled correctly today might behave differently after a future update, even if its source code remained unchanged.
This revealed an important requirement for CRVJA: preserving compatibility across transpiler versions . In other words, projects should continue to behave as originally intended, regardless of future improvements to the compiler.
The need for backward compatibility, combined with the opportunity to refactor several parts of CRVJA, led us to split the project into a front-end and a back-end. By doing that, we would separate the most important component of CRVJA: the transpiler.
The diagram below illustrates the transpilation process and how we would separate its responsibilities between the front-end and the back-end.
Before this refactoring, CRVJA was built entirely on top of Next.js, using JavaScript functions for each process or Next/React components for UI tasks. During transpilation, the source code was passed through each stage of the pipeline as function parameters and React component props.
A New Architecture
The new architecture is relatively simple, allowing us to reuse most of the existing transpiler code, except for the React Hooks blocks that were used during the transpilation workflow.
We created an ExpressJS app for the back-end, putting the transpiler as an API route. To fulfill the requirement of having different transpiler versions for the application, each request specifies the desired transpiler version in its payload. Thus, the API can handle each call to the correct version.
The image below shows the new architecture of CRVJA.
In this architecture, the transpilation process remains the same; the difference is that each version is organized in a dedicated folder.
➜ ls src/transpilers<br>transpiler_v1_1_0 transpiler_v2_0_0
➜ ls src/transpilers/transpiler_v1_1_0/*<br>src/transpilers/transpiler_v1_1_0/amos-translator.js<br>src/transpilers/transpiler_v1_1_0/transpile-amos-to-js-v1-1-0.js<br>src/transpilers/transpiler_v1_1_0/error-listener.js
src/transpilers/transpiler_v1_1_0/grammar:<br>amos.g4 generated
After implementing the routes for each transpiler version, we needed to update the front-end to make it communicate with the new API. This introduced an important requirement: the games developed during the Summer School would be showcased in CRVJA, and selecting one of them should automatically load and execute it exactly as intended.
To ensure that each game and other AMOS code examples are executed with the appropriate transpiler version, we adopted a metadata-based approach. Each project is stored in its own directory containing the AMOS source code (.asc) and its resource banks (.abk). We have now introduced an additional metadata file (currently named crvja.txt) that specifies which version of the transpiler should be used.
Separating the transpiler into an independent service provides benefits beyond versioning. The compiler can now evolve independently from the user interface, making it easier to test, maintain, and eventually integrate with other applications. Future tools will be able to invoke the same transpilation API without depending on the CRVJA web interface.
UI Updates
The improvements in v2 were not limited to the architecture. We also introduced a few updates to the user interface. Some of these changes were necessary to support the new architecture and improve usability, while others were more symbolic and celebrated the release of v2.
The IDE is now called CINA , which means CRVJA Is Not AMOS. It also got a new icon. The rename also helps clarify our terminology: CRVJA refers to the entire tool suite, including the CINA IDE, the sprite editor, the transpiler, and supporting tools, rather than the IDE alone.
No major release is complete without a new wallpaper. For v2, we drew inspiration from AmigaOS 3.1.4 and added the iconic Brazilian...