The third generation of Acter ("a3" or "A3") is a matrix-backed community organizing App for the regular joe. It has a mobile-first approach with support for desktop as well, supporting all major platforms (Apple iOS, Android, Windows, MacOSx & Linux).
Acter consist of two main parts
core, written in Rust (on the matrix-rust-sdk) and compiled to the target architecture
- the end-user Application built with Flutter.
- and in between those two we have the glue that is the ffi-interface bridged through a flutter package into the app
When looking at the repository, you will find the following folder structure:
app # The flutter app ├── android # - Android specific configuration ├── assets # - general assets ├── .. ├── integration_test # - Full app integration tests ├── ios # - iOS specific configuration ├── lib # - the actual flutter App ├── linux # - Linux specific configuration ├── macos # - MacOS specific configuration ├── packages # - custom packages │ └── rust_sdk # - the SDK package ├── test # - Flutter widget unit tests ├── web # - Web specific configuration (not yet support) └── windows # - Windows specific configuration docs # These documentation files ├── * native # Rust native libraries ├── cli # Command-Line interface ├── core # Core types and inner system ├── acter # FFI generation layer and public lib interface ├── acter-test # Rust integration tests └── acter-tui # A terminal UI client util # Further utilities └── cucumber_reporter # generating HTML reports from cucumber integration tests └── ...
The main logic takes place into the rust core library. Let's take a look at that:
native/core/src ├── client.rs # -- CoreClient main interface, binding it all together ├── error.rs # -- Core Error types ├── events # -- Matrix Event specific for our App │ ├── ... ├── events.rs ├── executor.rs # -- The core state machine ├── lib.rs ├── models # -- The state machine models the events are applied on │ ├── ... ├── models.rs ├── spaces.rs # -- Anything related to Acter spaces ├── statics.rs # -- Some static strings and helpers ├── store.rs # -- Our internal storage interface (on top ) ├── support.rs # -- Additional support structure ├── templates.rs # -- the template engine logic └── util.rs # -- further utilities