/sandpolis

Ultimate remote monitoring and management

Primary LanguageJavaMozilla Public License 2.0MPL-2.0

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!

Introduction

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.

Instances

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 Release Build The official server implementation
iOS Client Release Build The mobile iOS client written in Swift
Desktop Client Release Build A desktop GUI client written in Java/Kotlin
Terminal Client Release Build A simple client with a terminal UI
Web Client Release Build A browser-based client written in Python/JavaScript
Agent Release Build The official agent implementation
Bootagent Release Build A specialized agent designed to run at boot time
Agent Deployer Release Build A specialized instance responsible for installing agents

Plugins

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 Release Build
Desktop Plugin Release Build
Shell Plugin Release Build
Filesystem Plugin Release Build
Snapshot Plugin Release Build
Device Plugin Release Build
Update Plugin Release Build

Core Modules

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 Release Build
core.instance Release Build
core.protocol Release Build

Installing

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:

Building

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.

Using Vagrant

In order to conveniently build components for other operating systems, Vagrant can be used:

vagrant up linux
vagrant ssh linux