Home
Softono
cooklang-sync

cooklang-sync

Open source MPL-2.0 Rust
11
Stars
3
Forks
6
Issues
2
Watchers
4 weeks
Last Commit

About cooklang-sync

Low hassle file-sync lib optimised for text files

Platforms

Web Self-hosted

Languages

Rust

Links

Cooklang Sync

A file synchronization library for text files and small binary files (<10MB). Based on Dropbox's streaming file synchronization design.

Installation

iOS (Swift Package Manager)

Add to your Package.swift:

dependencies: [
    .package(url: "https://github.com/cooklang/cooklang-sync.git", from: "0.4.1")
]

Or in Xcode: File → Add Package Dependencies → enter https://github.com/cooklang/cooklang-sync.git

Android (Gradle)

Add the GitHub Packages repository to settings.gradle.kts:

dependencyResolutionManagement {
    repositories {
        maven {
            url = uri("https://maven.pkg.github.com/cooklang/cooklang-sync")
            credentials {
                username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
                password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN")
            }
        }
    }
}

Add the dependency to build.gradle.kts:

dependencies {
    implementation("org.cooklang:cooklang-sync:0.4.4")
}

See Mobile SDK Integration Guide for detailed setup instructions.

Development

Prerequisites

  • Rust (latest stable)
  • For iOS builds: Xcode with command-line tools
  • For Android builds: Android NDK, cargo-ndk

Building

# Install build dependencies
make install-deps

# Build iOS XCFramework
make ios

# Build Android library
make android

# Build both platforms
make all

Running the Server

cargo run

Running the Client

cargo run --bin client <sync-directory> <db-path> <server-url> <jwt-token>

Example:

cargo run --bin client ../tmp ./db/client.sqlite3 http://localhost:8000 eyXX.XXX.XXX

JWT Token Generation

Test tokens can be generated at https://jwt.io with:

  • Secret: secret
  • Payload:
    {
    "uid": 100,
    "exp": 1720260223
    }

Architecture

The library consists of two main components:

  • Server (cooklang-sync-server): Handles file synchronization requests
  • Client (cooklang-sync-client): Provides sync capabilities with FFI bindings for iOS and Android

Roadmap

  • [ ] Garbage collection for client
  • [ ] Comprehensive test suite
  • [ ] Generalize for broader use cases
  • [ ] Read-only file support
  • [ ] Metrics export
  • [ ] Security audit
  • [ ] Symlink support
  • [ ] Hidden file handling

License

MPL-2.0