There is no cloud, it's just someone else's computer.
The Local-First SDK offers a stack to write applications as productively as when using state-of-the-art cloud-based architectures, while providing the Seven Ideals for Local-First Software 0 -- basically for free:
- Software can respond near-instantaneously to user input. (No waiting on server round-trips, no spinners.)
- Cross-device synchronization. (Pick up work on your mobile device just where you left off with your laptop.)
- "Offline-First" as a subset of Local-First. (Connectivity is irrelevant when interacting with the application>0
- Seamless collaboration with other peers. (Edit and sync shared data without fear of conflicts.)
- Full data agency. (Do what you want with your data, it's yours only.)
- Secure and private data management. (Everything is encrypted, only you have the keys.)
- Full ownership and control over the application's data. (No one can take away a service from you.)
The Local-First SDK comprises the following components:
- User and Access Control: ... (key management, acl)
- Multi-Device Support and Collaboration: ... (device auth, p2p, peer discovery (mdns and via cloud peer))
- Data Persistence ... (cloud peer or self-hosted)
- Multi device support and interoperability ... (browser, native, android/ios?)
The Local-First SDK comes in three flavours:
- An opinionated Javascript package (with Typescript bindings) to write Local-First applications targeting the browser.
- A library which can be embedded into other applications, either as a rust library or a C-compatible FFI.
- A native, permanent process shepherding the user's data. Applications can interface with this daemon via HTTP.
As the browser's API guarantees are weak, its environment has to be considered ephemeral1. This is why the optional Cloud-Peer supplemental services complement the browser environment very well (data persistence, peer discovery).
As of now, the SDK is just offered as an ES module, requiring asynchronous import:
import * as localFirst from 'local-first';
await localFirst.init();
[..]
Rust, libp2p, crdts, cambria, .. --> INSERT AWESOMENESS HERE <--
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Be respectful. Check out our Contribution Guidelines for specifics. Any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Footnotes
-
Most notably this is about persistence of user data (key material and application data). However, it's easy to lose one's browsing data by switching to another browser profile/container, etc. ↩