Hypergolix is “programmable Dropbox”. Think of it like this:
Hypergolix runs as a local background service, just like Dropbox does. Once it’s running, instead of spending time worrying about relative IP addresses, NAT traversal, pub/sub brokers, or mutual authentication, your code can just do this:
>>> import hgx >>> hgxlink = hgx.HGXLink() >>> alice = hgxlink.whoami >>> bob = hgx.Ghid.from_str('AR_2cdgIjlHpaqGa7K8CmvSksaKMIi_scApddFgHT8dZy_vW3YgoUV5T4iVvlzE2V8qsje19K33KZhyI2i0FwAk=') >>> obj = hgxlink.new_threadsafe(cls=hgx.JsonProxy, state='Hello world!') >>> obj.share_threadsafe(bob)
and Hypergolix takes care of the rest. Alice can modify her object locally, and so long as she and Bob share a common network link (internet, LAN...), Bob will automatically receive an update from upstream.
Hypergolix is marketed towards Internet of Things development, but it’s perfectly suitable for other applications as well. For example, the first not-completely-toy Hypergolix demo app is a remote monitoring app for home servers.
This install, configure, and start Hypergolix. You must have already satisfied all install requirements. See Hypergolix installation for a thorough install guide, and Running Hypergolix for a thorough configuration and startup guide.
There are two parts to Hypergolix: the Hypergolix daemon, and the Hypergolix integration. The daemon is installed only once per system, but the integration must be installed in every Python environment that wants to use Hypergolix.
Linux & OSX¶
sudo apt-get install python3-venv sudo mkdir /usr/local/hypergolix sudo python3 -m venv /usr/local/hypergolix/hgx-env sudo /usr/local/hypergolix/hgx-env/bin/python -m pip install --upgrade pip sudo /usr/local/hypergolix/hgx-env/bin/pip install hypergolix sudo ln -s /usr/local/hypergolix/hgx-env/bin/hypergolix /usr/local/bin/hypergolix hypergolix config --add hgx hypergolix start app
your/env/here/bin/pip install hgx
mkdir "%PROGRAMFILES%/Hypergolix" python -m venv "%PROGRAMFILES%/Hypergolix/hgx-env" "%PROGRAMFILES%/Hypergolix/hgx-env/Scripts/python" -m pip install --upgrade pip "%PROGRAMFILES%/Hypergolix/hgx-env/Scripts/pip" install hypergolix "%PROGRAMFILES%/Hypergolix/hgx-env/Scripts/python" -m hypergolix.winpath ^%PROGRAMFILES^%/Hypergolix/hgx-env/Scripts set PATH=%PATH%;%PROGRAMFILES%/Hypergolix/hgx-env/Scripts hypergolix config --add hgx hypergolix start app
your/env/here/Scripts/pip install hgx
Both Hypergolix objects and users are hash-addressed. Hypergolix applications don’t need to worry about the network topology between endpoints; Hypergolix is offline-first and can failover to local storage and/or LAN servers when internet connectivity is disrupted. This happens completely transparently to both the application and the end user.
Client-side encryption and authentication¶
All non-local operations are enforced by cryptograpy. Specifically, Hypergolix is backed by the Golix protocol, with the current implementation supporting SHA-512, AES-256, RSA-4096, and X25519, with RSA deprecation planned by early 2018.
Except in local memory, Hypergolix objects are always encrypted (including on-disk). Authentication is verified redundantly (by both client and server), as is integrity. Both checks can be performed offline.
Accounts are self-hosting: all user data is extracted from a special Hypergolix
bootstrap object encrypted with the user’s
Explicit data expiration¶
Hypergolix data is explicitly removed, and removal propagates to upstream servers automatically. Hypergolix lifetimes are directly analogous to object persistence in a reference-counting memory-managed programming language: each object (Hypergolix container) is referenced by a name (a Hypergolix address), and when all its referents pass out of scope (are explicitly dereferenced), the object itself is garbage collected.
Hypergolix is completely open-source. Running your own local server is easy:
just run the command
hypergolix start server. Here are some source code
Simple to integrate¶
Hypergolix supports all major desktop platforms (OSX, Windows, Linux; mobile
support is planned in the future). Applications interact with Hypergolix
through inter-process communication, using Websockets over
Hypergolix ships with Python bindings to the API (broader language support is a
very high priority) for easy integration:
>>> # This connects to Hypergolix >>> import hgx >>> hgxlink = hgx.HGXLink() >>> # This creates a new object >>> obj = hgxlink.new_threadsafe( ... cls = hgx.JsonProxy, ... state = 'Hello World!', ... ) >>> # This updates the object >>> obj += ' Welcome to Hypergolix.' >>> obj.hgx_push_threadsafe() >>> obj <JsonProxy to 'Hello World! Welcome to Hypergolix!' at Ghid('WFUmW...')> >>> # This is the object's address, which we need to retrieve it >>> obj.hgx_ghid.as_str() 'AWFUmWQJvo3U81-hH3WgtXa9bhB9dyXf1QT0yB_l3b6XwjB-WqeN-Lz7JzkMckhDRcjCFS1EmxrcQ1OE2f0Jxh4=' >>> # This retrieves the object later >>> address = hgx.Ghid.from_str( ... 'AWFUmWQJvo3U81-hH3WgtXa9bhB9dyXf1QT0yB_l3b6XwjB-WqeN-Lz7JzkMckhDRcjCFS1EmxrcQ1OE2f0Jxh4=') >>> obj = hgxlink.get_threadsafe(cls=hgx.JsonProxy, ghid=address) >>> obj <JsonProxy to 'Hello World! Welcome to Hypergolix!' at Ghid('WFUmW...')>