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.

CRVJA transpiler.jpg

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.

CRVJA front-back.jpg

In this architecture, the transpilation process remains the same; the difference is that each version is organized in a dedicated folder.

➜  ls src/transpilers 
transpiler_v1_1_0 transpiler_v2_0_0

➜  ls src/transpilers/transpiler_v1_1_0/*
src/transpilers/transpiler_v1_1_0/amos-translator.js             
src/transpilers/transpiler_v1_1_0/transpile-amos-to-js-v1-1-0.js
src/transpilers/transpiler_v1_1_0/error-listener.js

src/transpilers/transpiler_v1_1_0/grammar:
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.

crvja-metadata-vscode.png

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 copo americano.

workbench.png

In v1, the Program Screen was continuously updated through React Hooks while the user edited the AMOS code. Although this provided immediate feedback, it also introduced several bugs and unnecessary complexity.

In v2, the code is transpiled and executed only when the user presses Run Code. This explicit behaviour is similar to the AMOS Professional Editor.

The CINA IDE also allows users to manually select the transpiler version they want to use. When loading one of the bundled examples or ReAnimate games, however, the IDE automatically selects the appropriate version by reading the project's metadata.

The AMOS examples and the games created during the ReAnimate Summer School are now available through the Menu. To load an example, users simply open the Menu and select the desired program (for example, Pac-Man).

cina-ide.png

Conclusions and Future Work

The release of CRVJA v2 lays the foundation for a more modular and maintainable platform. By separating the transpiler into an independent back-end service and introducing support for multiple transpiler versions, we have prepared the project for future growth while preserving compatibility with existing AMOS programs.

There is still plenty of work ahead. Future efforts will focus on further refactoring the transpiler, restoring error highlighting in the IDE, and continuing to improve the handling of AMOS banks and related tools.

As always, CRVJA remains an open and evolving project. If you are interested in following its development or contributing to it, the source code is available on GitHub:

We look forward to seeing what new games, experiments, and creative projects the community will build with CRVJA in the future.