Agera SDK progress track and ideas

Agera SDK is a solution for rich internet applications, which might take long to be completed. Thanks to @steffahn, @H2CO3, @SkiFire13, @DanielKeep and other users for formulas and advices given in my recent help topics.

I decided to create a topic about it again since I'm feeling a need to share the progress I have done.

Rust API Documentation

To get a feel of how things will look like when using Agera, here is the current API documentation.

I have updated some names to feel better.

The goal

The project is inspired by neutral solutions such as Adobe AIR, which compiles for native platforms. Adobe AIR is a derivative of the Flash Platform. However, of course, Agera is also aiming to compile to the web through use of conditional configuration attributes.

I am aware of Tauri and I like the name, but the only thing annoying me is that it only targets the web and it does have some complicated items in its crate.

I am aware of Ruffle, but it is solely a Flash Player and it exposes complicated APIs as well, using a garbage collector.

I do not guarantee to anyone that I will continue Agera SDK. I am the only person interested in it, I think, but I feel I need it for me. I am leaving it open-source regardless of my wasted energy because maybe I can get contributors in the future.

Inheritance

Agera uses Entity-Component (entities consisting of components) with Entity subtypes, therefore I provided an entity_type! definition.

Inheritance might sound unsound in terms of Rust, however the idea is to use it only for Entities.

You have to specify all inherited types (in descending order in a < delimited sequence) in entity_type! and that definition will provide several field getters/setters and traits such as Deref and AsRef. Note that an Entity is reference-counted and its Clone is a reference clone (it hides its inner Arc).

entity_type! {
    struct A : Entity {}

    fn constructor() {
        super();
    }
}

entity_type! {
    struct B : A < Entity {}

    fn constructor() {
        super();
    }
}

Related preview on the repository on how Entities will look like:

image

File system

The file system API gives a feeling of a "sandboxed" environment due to the support of the special URLs app: and app-storage: when using the File object. And app: ensures you never write accidentally to the application's installation directory.

Timers

There are different timer functions available in the crate. Some return a future; some call a callback function.

Bootstrap

The Agera application initiates through agera::application::start! and not a manually written fn main or alike function. Additionally, depending on the export platform, the application crate is compiled as a library instead of a binary.

The reason for that is mainly because of the asynchronous runtime and the file system APIs.

Also, although your entry point will be simply an agera::application::start! invokation, your project should be straightly created through an agera new command, for instance, as it will create a properly structured project.