All Projects β†’ Nozbe β†’ Watermelondb

Nozbe / Watermelondb

Licence: mit
πŸ‰ Reactive & asynchronous database for powerful React and React Native apps ⚑️

Programming Languages

javascript
184084 projects - #8 most used programming language
objective c
16641 projects - #2 most used programming language
C++
36643 projects - #6 most used programming language
swift
15916 projects
kotlin
9241 projects
Objective-C++
1391 projects

Projects that are alternatives of or similar to Watermelondb

Platform
Reactive libraries for Angular
Stars: ✭ 7,020 (-12.21%)
Mutual labels:  hacktoberfest, reactive, rxjs
Lychee
The most complete and powerful data-binding library and persistence infra for Kotlin 1.3, Android & Splitties Views DSL, JavaFX & TornadoFX, JSON, JDBC & SQLite, SharedPreferences.
Stars: ✭ 102 (-98.72%)
Mutual labels:  hacktoberfest, reactive, persistence
Rxdb
πŸ”„ A client side, offline-first, reactive database for JavaScript Applications
Stars: ✭ 16,670 (+108.48%)
Mutual labels:  reactive, rxjs, database
Vue Materialize Datatable
A fancy Materialize CSS datatable VueJS component.
Stars: ✭ 162 (-97.97%)
Mutual labels:  hacktoberfest, reactive, database
Nano Sql
Universal database layer for the client, server & mobile devices. It's like Lego for databases.
Stars: ✭ 717 (-91.03%)
Mutual labels:  database, persistence
R2dbc Postgresql
Postgresql R2DBC Driver
Stars: ✭ 714 (-91.07%)
Mutual labels:  reactive, database
Phpauth
PHPAuth is a secure PHP Authentication class that easily integrates into any site.
Stars: ✭ 748 (-90.65%)
Mutual labels:  hacktoberfest, database
Ftl
The Pi-hole FTL engine
Stars: ✭ 776 (-90.3%)
Mutual labels:  hacktoberfest, database
Laravel Translatable
A Laravel package for multilingual models
Stars: ✭ 624 (-92.2%)
Mutual labels:  hacktoberfest, database
Migrate
Database migrations. CLI and Golang library.
Stars: ✭ 7,712 (-3.55%)
Mutual labels:  hacktoberfest, database
Ngx Restangular
Restangular for Angular 2 and higher versions
Stars: ✭ 787 (-90.16%)
Mutual labels:  reactive, rxjs
Tech Refrigerator
🍰 기술 냉μž₯κ³ μž…λ‹ˆλ‹€. πŸ›’ 기술 λ©΄μ ‘ , 전곡 μ‹œν—˜ , 지식 함양 λ“± λΆ„λͺ… 도움될 κ±°μ˜ˆμš”! 🀟
Stars: ✭ 699 (-91.26%)
Mutual labels:  hacktoberfest, database
Tidb
TiDB is an open source distributed HTAP database compatible with the MySQL protocol
Stars: ✭ 29,871 (+273.57%)
Mutual labels:  hacktoberfest, database
Sinuous
🧬 Light, fast, reactive UI library
Stars: ✭ 740 (-90.75%)
Mutual labels:  hacktoberfest, reactive
Faker
Faker is a pure Elixir library for generating fake data.
Stars: ✭ 673 (-91.58%)
Mutual labels:  hacktoberfest, database
Reaktive
Kotlin multi-platform implementation of Reactive Extensions
Stars: ✭ 760 (-90.5%)
Mutual labels:  hacktoberfest, reactive
Push State
Turn static web sites into dynamic web apps.
Stars: ✭ 16 (-99.8%)
Mutual labels:  reactive, rxjs
Realm Core
Core database component for the Realm Mobile Database SDKs
Stars: ✭ 836 (-89.54%)
Mutual labels:  reactive, database
Db Mysql
Stars: ✭ 22 (-99.72%)
Mutual labels:  hacktoberfest, database
Memento
Simple + Powerful interface to the Mnesia Distributed Database πŸ’Ύ
Stars: ✭ 597 (-92.53%)
Mutual labels:  hacktoberfest, database

WatermelonDB

A reactive database framework

Build powerful React and React Native apps that scale from hundreds to tens of thousands of records and remain fast ⚑️

MIT License npm

WatermelonDB
⚑️ Launch your app instantly no matter how much data you have
πŸ“ˆ Highly scalable from hundreds to tens of thousands of records
😎 Lazy loaded. Only load data when you need it
πŸ”„ Offline-first. Sync with your own backend
πŸ“± Multiplatform. iOS, Android, web, and Node.js
βš›οΈ Optimized for React. Easily plug data into components
🧰 Framework-agnostic. Use JS API to plug into other UI frameworks
⏱ Fast. And getting faster with every release!
βœ… Proven. Powers Nozbe Teams since 2017 (and many others)
✨ Reactive. (Optional) RxJS API
πŸ”— Relational. Built on rock-solid SQLite foundation
⚠️ Static typing with Flow or TypeScript

Why Watermelon?

WatermelonDB is a new way of dealing with user data in React Native and React web apps.

It's optimized for building complex applications in React Native, and the number one goal is real-world performance. In simple words, your app must launch fast.

For simple apps, using Redux or MobX with a persistence adapter is the easiest way to go. But when you start scaling to thousands or tens of thousands of database records, your app will now be slow to launch (especially on slower Android devices). Loading a full database into JavaScript is expensive!

Watermelon fixes it by being lazy. Nothing is loaded until it's requested. And since all querying is performed directly on the rock-solid SQLite database on a separate native thread, most queries resolve in an instant.

But unlike using SQLite directly, Watermelon is fully observable. So whenever you change a record, all UI that depends on it will automatically re-render. For example, completing a task in a to-do app will re-render the task component, the list (to reorder), and all relevant task counters. Learn more.

React Native EU: Next-generation React Databases WatermelonDB Demo

πŸ“Ί Next-generation React databases
(a talk about WatermelonDB)

✨ Check out web Demo

Usage

Quick (over-simplified) example: an app with posts and comments.

First, you define Models:

class Post extends Model {
  @field('name') name
  @field('body') body
  @children('comments') comments
}

class Comment extends Model {
  @field('body') body
  @field('author') author
}

Then, you connect components to the data:

const Comment = ({ comment }) => (
  <View style={styles.commentBox}>
    <Text>{comment.body} β€” by {comment.author}</Text>
  </View>
)

// This is how you make your app reactive! ✨
const enhance = withObservables(['comment'], ({ comment }) => ({
  comment,
}))
const EnhancedComment = enhance(Comment)

And now you can render the whole Post:

const Post = ({ post, comments }) => (
  <View>
    <Text>{post.name}</Text>
    <Text>Comments:</Text>
    {comments.map(comment =>
      <EnhancedComment key={comment.id} comment={comment} />
    )}
  </View>
)

const enhance = withObservables(['post'], ({ post }) => ({
  post,
  comments: post.comments
}))

The result is fully reactive! Whenever a post or comment is added, changed, or removed, the right components will automatically re-render on screen. Doesn't matter if a change occurred in a totally different part of the app, it all just works out of the box!

➑️ Learn more: see full documentation

Who uses WatermelonDB

Nozbe Teams
CAPMO
Steady
Aerobotics
Smash Appz
Rocket Chat
HaloGo
SportsRecruits
Chatable
Todorant
Blast Workout

Does your company or app use πŸ‰? Open a pull request and add your logo/icon with link here!

Contributing

We need you

WatermelonDB is an open-source project and it needs your help to thrive!

If there's a missing feature, a bug, or other improvement you'd like, we encourage you to contribute! Feel free to open an issue to get some guidance and see Contributing guide for details about project setup, testing, etc.

If you're just getting started, see good first issues that are easy to contribute to. If you make a non-trivial contribution, email me, and I'll send you a nice πŸ‰ sticker!

If you make or are considering making an app using WatermelonDB, please let us know!

Author and license

WatermelonDB was created by @Nozbe. Main author and maintainer is Radek Pietruszewski.

Contributors: @mobily, @kokusGr, @rozPierog, @rkrajewski, @domeknn, @Tereszkiewicz and more.

WatermelonDB is available under the MIT license. See the LICENSE file for more info.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].