Application orchestration layer for Softadastra systems.
The app module is the orchestrator of the entire system.
It connects all modules together and defines:
How the system starts, runs, and stops.
The goal of softadastra/app is simple:
Assemble all modules into a working system.
Compose, don’t implement.
The app module:
- Does not implement core logic
- Does not store data
- Does not handle sync decisions
👉 It wires everything together.
The app module provides:
- System bootstrap
- Module initialization
- Dependency wiring
- Runtime management
- Lifecycle control (start / stop)
- No sync logic (sync module)
- No storage logic (store module)
- No network implementation (transport module)
- No filesystem observation (fs module)
👉 It orchestrates, nothing more.
All business logic lives in modules.
The app only connects them.
All dependencies must be:
- Visible
- Configurable
- Replaceable
The app defines:
- Startup order
- Shutdown order
- Runtime coordination
Modules should not depend on each other implicitly.
The app connects them explicitly.
modules/app/
├── include/softadastra/app/
│ ├── DriveApp.hpp
│ ├── Runtime.hpp
│ ├── Bootstrap.hpp
│ └── ServiceContainer.hpp
└── src/
Main application entry.
Responsible for:
- Initializing modules
- Starting the system
- Managing runtime
Handles:
- Execution loop
- Background tasks
- System state
Responsible for:
- Loading configuration
- Initializing services
- Preparing environment
Dependency container.
Provides:
- Module instances
- Dependency injection
- Access to shared services
#include <softadastra/app/DriveApp.hpp>
using namespace softadastra::app;
int main()
{
DriveApp app;
app.start();
return 0;
}-
Load configuration
-
Initialize core services
-
Initialize modules:
- fs
- wal
- metadata
- discovery
- transport
- store
- sync
-
Start runtime
-
System becomes active
- Stop runtime
- Flush pending operations
- Close connections
- Persist state
- Shutdown modules
The app module connects:
- core
- fs
- wal
- metadata
- discovery
- transport
- sync
- store
- cli
- All Softadastra modules
- Standard C++ libraries
- Single runtime instance
- Basic module wiring
- Simple lifecycle management
- No advanced configuration system
- Advanced configuration system
- Dependency injection improvements
- Multi-instance support
- Plugin system
- Observability (metrics, tracing)
- Service health monitoring
- Never implement business logic
- Never hide dependencies
- Always keep wiring explicit
- Always control lifecycle cleanly
The app is not the system.
It is the conductor of the system.
- Assembles modules
- Controls lifecycle
- Manages runtime
- Connects everything together
See root LICENSE file.