PhaseLock is currently in Alpha. All the core features are implemented, a few of them are tested, and none of them are properly documented.
There's still a lot to do:
-
Documentation for:
- the TypeSpec API
- the TypeSpec emitter configuration (per-language)
- the generated APIs (per language)
- recommended backend architecture(s)
-
Support aliases in TypeSpec... today they cause confusing/broken generated code.
-
Support official KurrentDB clients as inputs to Engine
- reduce the IO boilerplate needed to populate events from KurrentDB
- serve as canonical examples for the IO handling
-
Reimplement go and python bindings to match new cross-language plan:
- No more JS wrapper types; native types should be fully-native
- Native queries read native types directly from storage, no JS layer
- Generate type registry per framework for handling conversions
- StoreGenerator redesign around the type registry
- Eliminate "plain-json object" as central type in Engine UI.
-
Support additional languages, starting with C#, Kotlin, and Swift
-
Additional frontend demos:
- React Native
- iOS
- Android
- PhaseLock engine in a Shared Worker serving multiple tabs
-
Additional backend demos:
- Pure TypeScript backend for library demo
- Cloudflare CDN-based log distribution
- Cloudflare CDN-based server-side queries
- Will require implementing a Store MVCC capability
-
Add indices as a formal concept in the PhaseLock Engine
- possibly a plugin interface, for define-your-own index?
- include a btree implementation at a minimum
-
Add support for time-based triggers
- reducers currently only wake due to events
- currently unable to be triggered by passage of time
- user workaround is possible (Tick events and a query for wakeups)
- ought to be first-class in PhaseLock
- will require careful consideration: how will it interact with catchup and replay?
-
Performance testing
- Test various backend designs for read/write throughput and round trip latency.
- Bottleneck analysis and optimization.
- How do different designs scale, especially on the read side?
- Use this data to pick recommended backend architecture(s).
-
Investigate snapshot tooling
- Snapshots can greatly reduce cold-start times
- Snapshots may require per-user sanitization
- How can we offer tooling to make this easier?
-
Investigate Kurrent integrations
- Run as part of KurrentDB?
- Run as part of kurrent.cloud?