diff --git a/AGENTS.md b/AGENTS.md index 5e4b1a4..0acb38f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,4 +1,4 @@ -# Pocketbook +# Atomsync Clojure/ClojureScript offline-first synced atom library backed by IndexedDB (CLJS) or SQLite (CLJ). @@ -24,7 +24,7 @@ This project uses **promesa** (`funcool/promesa`) for all async operations. Do n ## Project structure ``` -src/pocketbook/ +src/atomsync/ store.cljc โ€” PStore protocol (promises) store/memory.cljc โ€” in-memory store (testing/JVM) store/idb.cljs โ€” IndexedDB store (browser) diff --git a/README.md b/README.md index f2b30b2..4861b05 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# Pocketbook +# Atomsync A Clojure-native synced atom. Offline-first key-value store with an `atom` interface that syncs to a SQLite-backed server over Transit. ```clojure -(def conn ( {"todo:1" {:text "Buy milk" :tags #{:groceries}}} @@ -26,13 +26,13 @@ clj -M:server # or: clj -M:server 8090 my-data.db ``` -Starts on `http://localhost:8090` with a SQLite file at `pocketbook.db`. +Starts on `http://localhost:8090` with a SQLite file at `atomsync.db`. ### Client (CLJS) ```clojure (ns my-app.core - (:require [pocketbook.core :as pb] + (:require [atomsync.core :as pb] [cljs.core.async :refer [go - Pocketbook ยท TodoMVC + Atomsync ยท TodoMVC @@ -399,14 +399,14 @@
- Pocketbook ยท TodoMVC + Atomsync ยท TodoMVC
Loading from local store

Double-click to edit a todo

-

Built with Pocketbook โ€” offline-first synced atoms for Clojure

+

Built with Atomsync โ€” offline-first synced atoms for Clojure

Data persists in IndexedDB ยท syncs via Transit to SQLite

diff --git a/src/pocketbook/core.cljc b/src/atomsync/core.cljc similarity index 99% rename from src/pocketbook/core.cljc rename to src/atomsync/core.cljc index ae6fd10..8240747 100644 --- a/src/pocketbook/core.cljc +++ b/src/atomsync/core.cljc @@ -1,5 +1,5 @@ -(ns pocketbook.core - "Pocketbook: a Clojure-native synced atom. +(ns atomsync.core + "Atomsync: a Clojure-native synced atom. Usage: (def store @(idb/open \"my-app\")) ;; or (memory/create) @@ -9,8 +9,8 @@ (fn [_] (swap! todos assoc \"todo:1\" {:text \"Buy milk\"}))) @todos ;=> {\"todo:1\" {:text \"Buy milk\"}} " - (:require [pocketbook.store :as store] - [pocketbook.sync :as sync] + (:require [atomsync.store :as store] + [atomsync.sync :as sync] [clojure.string :as str] [promesa.core :as p]) #?(:clj (:import [java.util.concurrent Executors ScheduledExecutorService TimeUnit]))) diff --git a/src/pocketbook/db.clj b/src/atomsync/db.clj similarity index 99% rename from src/pocketbook/db.clj rename to src/atomsync/db.clj index 9971729..e276702 100644 --- a/src/pocketbook/db.clj +++ b/src/atomsync/db.clj @@ -1,4 +1,4 @@ -(ns pocketbook.db +(ns atomsync.db "SQLite storage layer with Nippy serialization. Stores documents as binary blobs preserving all Clojure types." (:require [next.jdbc :as jdbc] diff --git a/src/pocketbook/server.clj b/src/atomsync/server.clj similarity index 95% rename from src/pocketbook/server.clj rename to src/atomsync/server.clj index 040d7a6..c4d39ca 100644 --- a/src/pocketbook/server.clj +++ b/src/atomsync/server.clj @@ -1,5 +1,5 @@ -(ns pocketbook.server - "Pocketbook sync server. Single-file HTTP server backed by SQLite. +(ns atomsync.server + "Atomsync sync server. Single-file HTTP server backed by SQLite. Endpoints: GET /sync?since=T&group=G โ€” pull changes since timestamp @@ -7,10 +7,10 @@ Start: clj -M:server - bb -m pocketbook.server" + bb -m atomsync.server" (:require [org.httpkit.server :as http] - [pocketbook.db :as db] - [pocketbook.transit :as t] + [atomsync.db :as db] + [atomsync.transit :as t] [clojure.string :as str] [clojure.java.io :as io]) (:gen-class)) @@ -21,7 +21,7 @@ (def default-config {:port 8090 - :db-path "pocketbook.db" + :db-path "atomsync.db" :static-dir nil ;; nil = no static serving, or path like "example/todomvc" :cors true}) @@ -205,7 +205,7 @@ ;; --------------------------------------------------------------------------- (defn start! - "Start the Pocketbook server. Returns a stop function." + "Start the Atomsync server. Returns a stop function." ([] (start! {})) ([config] @@ -213,7 +213,7 @@ ds (db/open (:db-path config)) handler (make-handler ds config) server (http/run-server handler {:port (:port config)})] - (println (str "๐Ÿ”ถ Pocketbook server running on http://localhost:" (:port config))) + (println (str "๐Ÿ”ถ Atomsync server running on http://localhost:" (:port config))) (println (str " Database: " (:db-path config))) (when (:static-dir config) (println (str " Static: " (:static-dir config))) diff --git a/src/pocketbook/store.cljc b/src/atomsync/store.cljc similarity index 92% rename from src/pocketbook/store.cljc rename to src/atomsync/store.cljc index aa60002..b633049 100644 --- a/src/pocketbook/store.cljc +++ b/src/atomsync/store.cljc @@ -1,5 +1,5 @@ -(ns pocketbook.store - "Storage protocol for Pocketbook. +(ns atomsync.store + "Storage protocol for Atomsync. All methods return promesa promises.") (defprotocol PStore diff --git a/src/pocketbook/store/idb.cljs b/src/atomsync/store/idb.cljs similarity index 97% rename from src/pocketbook/store/idb.cljs rename to src/atomsync/store/idb.cljs index ef0a9bf..2051ba2 100644 --- a/src/pocketbook/store/idb.cljs +++ b/src/atomsync/store/idb.cljs @@ -1,7 +1,7 @@ -(ns pocketbook.store.idb +(ns atomsync.store.idb "IndexedDB store implementing the PStore protocol." - (:require [pocketbook.store :as store] - [pocketbook.transit :as transit] + (:require [atomsync.store :as store] + [atomsync.transit :as transit] [promesa.core :as p])) ;; --------------------------------------------------------------------------- diff --git a/src/pocketbook/store/memory.cljc b/src/atomsync/store/memory.cljc similarity index 91% rename from src/pocketbook/store/memory.cljc rename to src/atomsync/store/memory.cljc index 9e54919..8634991 100644 --- a/src/pocketbook/store/memory.cljc +++ b/src/atomsync/store/memory.cljc @@ -1,6 +1,6 @@ -(ns pocketbook.store.memory +(ns atomsync.store.memory "In-memory store backed by atoms. Useful for testing and JVM clients." - (:require [pocketbook.store :as store] + (:require [atomsync.store :as store] [promesa.core :as p] [clojure.string :as str])) diff --git a/src/pocketbook/sync.cljc b/src/atomsync/sync.cljc similarity index 97% rename from src/pocketbook/sync.cljc rename to src/atomsync/sync.cljc index 71b98e8..5778085 100644 --- a/src/pocketbook/sync.cljc +++ b/src/atomsync/sync.cljc @@ -1,6 +1,6 @@ -(ns pocketbook.sync - "HTTP sync client โ€” pull and push documents to/from the Pocketbook server." - (:require [pocketbook.transit :as transit] +(ns atomsync.sync + "HTTP sync client โ€” pull and push documents to/from the Atomsync server." + (:require [atomsync.transit :as transit] [clojure.string :as str] [promesa.core :as p]) #?(:clj (:import [java.net URI] diff --git a/src/pocketbook/transit.cljc b/src/atomsync/transit.cljc similarity index 98% rename from src/pocketbook/transit.cljc rename to src/atomsync/transit.cljc index 1968051..4ae7309 100644 --- a/src/pocketbook/transit.cljc +++ b/src/atomsync/transit.cljc @@ -1,4 +1,4 @@ -(ns pocketbook.transit +(ns atomsync.transit "Transit encoding/decoding helpers for the HTTP wire format." (:require [cognitect.transit :as t]) #?(:clj (:import [java.io ByteArrayInputStream ByteArrayOutputStream]))) diff --git a/test/pocketbook/core_test.clj b/test/atomsync/core_test.clj similarity index 95% rename from test/pocketbook/core_test.clj rename to test/atomsync/core_test.clj index 7b7d064..9b44b62 100644 --- a/test/pocketbook/core_test.clj +++ b/test/atomsync/core_test.clj @@ -1,10 +1,10 @@ -(ns pocketbook.core-test +(ns atomsync.core-test (:require [clojure.test :refer [deftest is testing use-fixtures]] [promesa.core :as p] - [pocketbook.core :as pb] - [pocketbook.store :as store] - [pocketbook.store.memory :as memory] - [pocketbook.server :as server]) + [atomsync.core :as pb] + [atomsync.store :as store] + [atomsync.store.memory :as memory] + [atomsync.server :as server]) (:import [java.io File])) ;; --------------------------------------------------------------------------- @@ -21,7 +21,7 @@ (use-fixtures :each (fn [f] (let [port (free-port) - db-path (str (File/createTempFile "pocketbook-core-test" ".db")) + db-path (str (File/createTempFile "atomsync-core-test" ".db")) srv (server/start! {:port port :db-path db-path})] (Thread/sleep 200) (try diff --git a/test/pocketbook/db_test.clj b/test/atomsync/db_test.clj similarity index 97% rename from test/pocketbook/db_test.clj rename to test/atomsync/db_test.clj index e340ac3..4c7f12b 100644 --- a/test/pocketbook/db_test.clj +++ b/test/atomsync/db_test.clj @@ -1,12 +1,12 @@ -(ns pocketbook.db-test +(ns atomsync.db-test (:require [clojure.test :refer [deftest is testing use-fixtures]] - [pocketbook.db :as db]) + [atomsync.db :as db]) (:import [java.io File])) (def ^:dynamic *ds* nil) (defn- temp-db-path [] - (str (File/createTempFile "pocketbook-test" ".db"))) + (str (File/createTempFile "atomsync-test" ".db"))) (use-fixtures :each (fn [f] diff --git a/test/pocketbook/server_test.clj b/test/atomsync/server_test.clj similarity index 97% rename from test/pocketbook/server_test.clj rename to test/atomsync/server_test.clj index fe12215..f2653a0 100644 --- a/test/pocketbook/server_test.clj +++ b/test/atomsync/server_test.clj @@ -1,7 +1,7 @@ -(ns pocketbook.server-test +(ns atomsync.server-test (:require [clojure.test :refer [deftest is testing use-fixtures]] - [pocketbook.server :as server] - [pocketbook.transit :as t]) + [atomsync.server :as server] + [atomsync.transit :as t]) (:import [java.io File] [java.net URI] [java.net.http HttpClient HttpRequest HttpResponse$BodyHandlers HttpRequest$BodyPublishers])) @@ -16,7 +16,7 @@ (use-fixtures :each (fn [f] (let [port (free-port) - db-path (str (File/createTempFile "pocketbook-server-test" ".db")) + db-path (str (File/createTempFile "atomsync-server-test" ".db")) srv (server/start! {:port port :db-path db-path})] (Thread/sleep 200) ;; let server start (try diff --git a/test/pocketbook/transit_test.clj b/test/atomsync/transit_test.clj similarity index 93% rename from test/pocketbook/transit_test.clj rename to test/atomsync/transit_test.clj index 59e62f4..3ca9735 100644 --- a/test/pocketbook/transit_test.clj +++ b/test/atomsync/transit_test.clj @@ -1,6 +1,6 @@ -(ns pocketbook.transit-test +(ns atomsync.transit-test (:require [clojure.test :refer [deftest is testing]] - [pocketbook.transit :as t])) + [atomsync.transit :as t])) (deftest roundtrip-basic-types (doseq [v [42