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:
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.