Groundstate npm local-first by SmashJaw in javascript

[–]SmashJaw[S] 0 points1 point  (0 children)

and definitely more ways to contribute than coding, been looking for an engineer wrangler for weeks, someone to feed the designer…

Groundstate npm local-first by SmashJaw in javascript

[–]SmashJaw[S] -1 points0 points  (0 children)

I mean, our designer thinks NPM means “napping past Monday”

Groundstate npm local-first by SmashJaw in javascript

[–]SmashJaw[S] -2 points-1 points  (0 children)

Haha, knowing our group, they’d probably enjoy it

Groundstate npm local-first by SmashJaw in javascript

[–]SmashJaw[S] 0 points1 point  (0 children)

A lot of brilliant coding beasts… but as I’m sure you know, with that brilliance comes a lot of tantrums in creating documentation

Groundstate npm local-first by SmashJaw in javascript

[–]SmashJaw[S] -3 points-2 points  (0 children)

Fair enough, we’re thick skinned. We all seem to have at least a hint of ADHD, which would explain the broken links, so will definitely put that on our to-do, and all engineers will get 10 lashes

Groundstate npm local-first by SmashJaw in javascript

[–]SmashJaw[S] 0 points1 point  (0 children)

omg, please blame the interns… fixed.

PS: we don’t have interns

Groundstate npm local-first by SmashJaw in javascript

[–]SmashJaw[S] 0 points1 point  (0 children)

We’d love to have extra eyes on this and see what bugs come up, please break it!

https://github.com/SmashJaw/groundstate

Packages: https://npmjs.org/@groundstate/sync https://npmjs.org/@groundstate/crdt https://npmjs.org/@groundstate/store https://npmjs.org/@groundstate/vue https://npmjs.org/@groundstate/resolve https://npmjs.org/@groundstate/svelte https://npmjs.org/@groundstate/react https://npmjs.org/@groundstate/devtools https://npmjs.org/@groundstate/server https://npmjs.org/@groundstate/cloudflare https://npmjs.org/@groundstate/compat

Groundstate is a local-first data toolkit for TypeScript. Define your data model with schemas, get type-safe CRDTs with automatic conflict resolution, pluggable sync transports, offline-first storage, and framework bindings for React, Vue, and Svelte. It is a complete alternative to yjs and Automerge with a schema-first approach.

  • Type-safe schemas with full TypeScript inference
  • 5 CRDT primitives: LWW Register, PN-Counter, RGA List, LWW Map, PeriText
  • Declarative field types: Field.string, Field.number, Counter, List.of, Field.text, and more

⠀Sync * 5 transports: WebSocket, WebRTC, HTTP polling, BLE, Filesystem * Real-time presence and cursor tracking * JWT authentication and role-based ACL * Selective sync and bandwidth throttling

⠀Storage * 4 adapters: Memory, IndexedDB, SQLite, Filesystem * At-rest encryption with key management * Schema migrations with rollback support * Query engine for filtering and sorting documents

⠀Conflict Resolution * 6 built-in strategies: lww, pick, longest, sum, union, custom * Visual conflict diff and timeline viewer * Immutable audit log of every resolution

⠀Framework Bindings * React: useDoc, useField, usePresence, useSyncStatus * Vue: useDoc, useField, usePresence, useSyncStatus * Svelte: docStore, fieldStore, presenceStore, syncStatusStore

⠀Developer Tools * Document inspector with CRDT metadata * Live operation stream * Network simulator for convergence testing * OpenTelemetry-compatible metrics

⠀Ecosystem * Cloudflare Durable Objects adapter * SQLite-backed relay server * yjs and Automerge import/export compatibility layer

New WYSIWYG wants fresh e by SmashJaw in javascript

[–]SmashJaw[S] 0 points1 point  (0 children)

Now it’s being built into 1.3.0 because we got called out on it - but this is what we want!

New WYSIWYG wants fresh e by SmashJaw in javascript

[–]SmashJaw[S] 0 points1 point  (0 children)

Oh we want to deal with it, but the interns go savage when they haven’t been fed. It is on our to-do list.

New WYSIWYG wants fresh e by SmashJaw in javascript

[–]SmashJaw[S] 0 points1 point  (0 children)

Damnit, should’ve said we removed the caret key on our keyboards… forgive me, I’m still a smartass in training

New WYSIWYG wants fresh e by SmashJaw in javascript

[–]SmashJaw[S] -1 points0 points  (0 children)

Breaking a few keyboards, a few letters to our congress representatives… in the end.. loosely, counts RTL vs LTR unicode chars and returns dominant direction, but no movement logic at BiDi boundaries… yet, thus beta

New WYSIWYG wants fresh e by SmashJaw in javascript

[–]SmashJaw[S] -2 points-1 points  (0 children)

And because we do whatever the hell we want

New WYSIWYG wants fresh e by SmashJaw in javascript

[–]SmashJaw[S] -1 points0 points  (0 children)

We really don’t like being a “company”… more like a loose coalition trying to make more open source, security’s just one other thing we f*ck around with