Turtl's logic core, built in Rust. Made for embedding in other platforms (desktop, mobile, possibly browser w/ Emscripten).
Switch branches/tags
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci setting very very low (energy) poll timeout for stupid fucking ci tests Oct 31, 2018
build-tools OOPs adding sodium 1.0.16 sig May 22, 2018
carrier converting all .unwrap() -> .expect() with a somewhat informative or … Sep 23, 2018
client converting all .unwrap() -> .expect() with a somewhat informative or … Sep 23, 2018
clippo clippo: implement proxy Oct 18, 2018
clouseau upgrade quick-error from 1.1.0 -> 1.2.2 to get rid of new macro warni… Jul 10, 2018
config converting all .unwrap() -> .expect() with a somewhat informative or … Sep 23, 2018
cwrap converting all .unwrap() -> .expect() with a somewhat informative or … Sep 23, 2018
dumpy Misc. typo fixes Oct 10, 2018
include Misc. typo fixes Oct 10, 2018
integration-tests adding a protected test. adding a validate function to notes (needs s… Nov 28, 2018
jedi upgrade quick-error from 1.1.0 -> 1.2.2 to get rid of new macro warni… Jul 10, 2018
migrate adding bin_to_words implementation tot he migration crate to make it … Nov 6, 2018
protected_derive converting all .unwrap() -> .expect() with a somewhat informative or … Sep 23, 2018
sock converting all .unwrap() -> .expect() with a somewhat informative or … Sep 23, 2018
src grabbing extra sync data from incoming/outgoing sync and passing alon… Dec 9, 2018
.appveyor.yml sqlite3.dll Nov 6, 2017
.gitignore gitignore scripts/cross May 8, 2018
CHANGELOG.md changelog, veersion bump Oct 9, 2018
CONTRIBUTING.md update contrib Feb 9, 2018
Cargo.lock two things: in dispatch, log panics (dont just msg them, derrrrr). al… Oct 31, 2018
Cargo.toml two things: in dispatch, log panics (dont just msg them, derrrrr). al… Oct 31, 2018
LICENSE adding license file/cargo entry Aug 8, 2017
Makefile override CARGO_BUILD_ARGS Apr 18, 2018
README.md updating build instructions. up libsodium version to 1.0.16, more def… Aug 19, 2018
TODO.md updating turtl_core.h (documentation) and todo Feb 11, 2018
config.yaml.default replacing hyper with reqwest Oct 18, 2018

README.md

Turtl core-rs

Opening an issue? See the Turtl project tracker

This is the Rust core for Turtl. It houses the logic for Turtl's main client operations and is meant to be embedded as a shared/static library that is standard across all platforms. The idea is, if it can go in the core, it should go in the core. Pretty much everything except UI goes here:

  • User join/login/deletion
  • Talking to the server/syncing data
  • Encryption/Decryption of data
  • In-memory storage of profile data
  • Permissions checking
  • Searching of notes
  • Sharing/Collaboration handling
  • Local storage
  • Bookmark handling

When building a UI (Android/iOS/Desktop/etc etc) you should have to worry about two things: loading/talking to the core and building the interface around the core. All logic (syncing/crypto/storage) lives in the core.

Although the core project is posted, the new server it talks to (NodeJS/Postgres) is not yet public (yes, a fond farewell to Lisp). Stay tuned!

This project is unfinished and alpha status. I won't be responding to issues or bug reports on it yet. Use at your own risk.

Building the core

Let's go over how to build the Turtl core.

Prerequisites

  • Rust >= 1.27.0
  • OpenSSL 1.0.x (shared or static)
  • Libsodium 1.0.16 (static preferred)

Compiling

make

The Makefile includes (optionally) a non-versioned file called vars.mk which can be used to house any ENV vars specific to your build environment:

# Example vars.mk
export PATH := $(PATH):/your/custom/path
export RUSTFLAGS := -L/opt/lib64 -lmylib
export SODIUM_LIB_DIR := /opt/libsodium/lib
export SODIUM_STATIC := static
export OPENSSL_LIB_DIR=/usr/lib/openssl-1.0
export OPENSSL_INCLUDE_DIR=/usr/include/openssl-1.0

NOTE: If your system uses OpenSSL 1.1.0, you need to install OpenSSL 1.0.0 and tell make to use it with OPENSSL_LIB_DIR=/usr/lib/openssl-1.0 OPENSSL_INCLUDE_DIR=/usr/include/openssl-1.0 make for example. This would be a good place to use vars.mk.

NOTE 2: If your system has libsodium version different than 1.0.16 and your build fails, do this:

cargo build
wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.16.tar.gz
tar xzf libsodium-1.0.16.tar.gz
cd libsodium-1.0.16
./configure
make
cp -r src/libsodium/.libs/* ../target/debug/deps/
cargo build

After every cargo clean or make clean you should do the last command

Using

This section is a work in progress. To use the Turtl core embedded library, you'll have to know two things:

  • How to interface: see turtl_core.h
  • How to use: see dispatch.rs for a list of commands you can send the core, and also check the integration tests for example usage. The integration tests strive for complete coverage of all the publicly-exported capabilities of the core library, so they should help somewhat with documentation (I know it's not a substitute, but I'd rather release the project then toil away on docs than the other way around).