1.0.0-alpha.5 • Published 1 year ago

estate-tools v1.0.0-alpha.5

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Estate

Simple and elegant TypeScript database for tomorrow's developers

Check out the new live example:

Open Estate Sandbox

Technical Details

Estate is a fully open-source TypeScript transactional key-value database and no-api virtual-actor AppServer that might be all you need to write exeedingly simple, powerful, data-driven, real-time SaaS backends and efficient Line-of-Business app backends for the enterprise.

Estate is lightning fast: most backend requests complete in under 200μs (Not including network round-trip).

Estate is written in TypeScript and (Rust-like) modern C++ and is built like a real-time trading platform: event-drive, fully asynchronous. The front-end/client framework is written in TypeScript. The platform ("System") is a 6-workload Kubernetes deployment.

Estate is self-hostable and provides a free-to-use multi-tenant cluster.

Feature Rundown

  • Fast, stateful App Service Workers for writing data-driven business logic
  • Single TypeScript Client/Server type system that just works.
  • First-class TypeScript, transactional, ACID-compliant Key-Value database.
  • Reactive/Observable in-built SSE: All Data is remotely observable/sharable.
  • Extremely simple client-side interface: clients are auto-generated based on backend TypeScript implementation.
  • Very, very small learning curve
  • Plays nice with existing frontend and backend frameworks like Next.js, Nuxt, React, SolidJS, and Angular.

Mental Model

With Estate you write and deploy backends called Services that contain TypeScript classes that extend three fundamental types. Which type you choose, depends on what you want to use it for.

  1. Worker = API-less, stateful Micro-services

    • Workers can be thought of as Internet-addressable/callable TypeScript objects that can be shared among any number of front-ends/clients.
    • Workers are great for managing Data with business logic.
  2. Data = Business domain data, what you'd normally store in a database.

    • Data objects can be thought of as a table or a spreadsheet, with each TypeScript property coinciding with a column.
    • You can pass Data objects to Workers just like any other TypeScript object. Data objects are transparently versioned and strongly consistent.
  3. Message = When you want to send stuff from the backend to the front-end.

    • Real-time Messages can be thought of as a TypeScript object you can send from inside a Worker to any number of front-ends/clients.

Open-Source License

*The framework (Tools SDK, Client runtime) is MIT licensed and the platform (rusty/modern C++ cloud-native Kuberneters cluster) is Apache-2 licensed.