Project Layout

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

  • the 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

File structure

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
└── ...

Rust Core

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