Sandpolis is a real-time distributed administration platform for servers, desktop computers, embedded devices, and anything in-between.
This project is unfinished (unstable) and should only be used in a testing environment!
The vision for Sandpolis is to build the ultimate no-expense-spared administration system that:
- provides unlimited control over any kind of device 💻,
- is fast and responsive âš¡,
- scales to thousands of devices 💥,
- and gives you money 💰.
Maybe that last one is a stretch, but at least Sandpolis won't cost you anything because it's free in terms of cost and, more importantly, free as in freedom.
This project has existed in some form since 2013 and has made tremendous progress since, but it's also the kind that can never truly be completed.
Sandpolis is not just one program, but a set of several working together. There are three catagories in which every Sandpolis component (or "instance") belongs:
- 💻 an agent installed on a remote system that carries out administration tasks on behalf of users
- 📱 a client application that users can use to interact with agents
- 🔒 a server that facilitates communication between instances in the network and makes everything "work"
For end-user convenience (or confusion), there are multiple official programs in each category. For example, you can login to a Sandpolis server with either the Desktop Client or from a mobile device with the iOS Client.
Instance | Status | Description |
---|---|---|
Server | The official server implementation | |
iOS Client | The mobile iOS client written in Swift | |
Desktop Client | A desktop GUI client written in Java/Kotlin | |
Terminal Client | A simple client with a terminal UI | |
Web Client | A browser-based client written in Python/JavaScript | |
Agent | The official agent implementation | |
Bootagent | A specialized agent designed to run at boot time | |
Agent Deployer | A specialized instance responsible for installing agents |
Sandpolis supports plugins as a first-class feature. Essentially all end-user functionality (file transfers, remote desktop, etc) is implemented as a plugin. This allows users to choose exactly what features they want and ignore the rest. Third-party plugins can also be installed, but must be signed with a trusted code-signing certificate.
The following plugins are officially supported:
Plugin | Status |
---|---|
Alert Plugin | |
Desktop Plugin | |
Shell Plugin | |
Filesystem Plugin | |
Snapshot Plugin | |
Device Plugin | |
Update Plugin |
The following library modules define the core of Sandpolis. Instances and plugins depend on these basic modules which prevents code duplication. You probably don't need to worry about these unless you're developing plugins.
Module | Status |
---|---|
core.foundation | |
core.instance | |
core.protocol |
You could install Sandpolis now, but it's likely to be an underwhelming experience. Once things are more stable, installation instructions will appear here.
In the meantime, here's a screenshot of the iOS client back when it was actually functional:
Since git submodules are used extensively here, you can conveniently build just a subset of the project. To choose what components to build, initialize the desired submodules using the makefile utilities:
# Checkout required modules for the server component
make enableServerVanilla
Gradle is used to orchestrate the build:
./gradlew build
This will build all modules that are currently checked out.
In order to conveniently build components for other operating systems, Vagrant can be used:
vagrant up linux
vagrant ssh linux