# Features
## Shared Code
The application is split into five crates, with `core` being shared between the server binary and WASM. Shared messages are passed across a websocket in text or binary form.
## Cross-built
The app is compiled by [TravisCI](https://travis-ci.org) and [AppVeyor](https://appveyor.com), publishing binaries for a variety of desktop and mobile architectures.
## Versioned Publishing
Scripts provided to publish to [crates.io](https://crates.io) and trigger CI publishing to [Github Releases](https://github.com).
## JavaScript Interop
WASM-to-JavaScript helpers provided by [wasm-bindgen](https://github.com/rustwasm/wasm-bindgen), allowing DOM manipulation and simple event handlers.
## HTML Templating
Loads of [maud](https://maud.lambda.xyz) templates, integrating with the user's session and theme. Helpers provided for UI components, flash messages, reverse routing, and backtraces.
## WebSocket
WebSocket connections (using [serde_json](https://serde.rs) in debug mode, [bincode](https://docs.rs/bincode) in release), passing messages defined by shared code.
## HTTP Server
High-performance server implementation provided by [actix-web](https://actix.rs), with integrations to pass app configuration and user data to each request.
## Multi-project Build
Code is spread across several crates, splitting shared code and templates to different published libraries.
## UIKit Integration
SCSS stylesheets extending [UIKit](https://getuikit.com), which is included as a git submodule.
## User Theme
Light mode, dark mode, and color selection make a good starting point for user sessions, supported by all the template components.
## Logging
File and console-based logging using [slog](https://github.com/slog-rs/slog) on the server (including backtraces and source location), and [wasm-bindgen](https://github.com/rustwasm/wasm-bindgen) on the client.