|
1 |
| -# Pulse Framework |
2 |
| - |
3 |
| -Pulse is a global state and logic framework for reactive Javascript applications. Supporting frameworks like VueJS, React and React Native. Lightweight, modular and powerful, but most importantly friendly to beginners. |
4 |
| - |
5 |
| -Pulse replaces global state management solutions such as Redux, VueX and MobX, including HTTP libraries such as Axios, Fetch or Request.js. It makes your application more modular, ensuring you follow the best practices while writing significantly less code. Your Pulse code can be used in many different applications, such as a webapp in Vue and a mobile app in React native; if it uses Javascript, it can use Pulse. |
6 |
| - |
7 |
| -## Features |
8 |
| - |
9 |
| -- :gear: Modular structure ([Modules](https://pulsejs.org/v2/docs/modules.html)) |
10 |
| -- :zap: Reactive data ([Reactivity](https://pulsejs.org/v2/docs/concepts.html#reactivity)) `pulse.something = somethingElse` |
11 |
| -- :robot: Computed data with automatic dependency tracking ([Computed](https://pulsejs.org/v2/docs/computed.html)) |
12 |
| -- :first_quarter_moon: Lifecycle hooks [`watch()`]() / `onReady()` / `nextPulse()` |
13 |
| -- :gem: SSOT architecture (single source of truth) |
14 |
| -- :nerd_face: DB/ORM-like structure with [Collections](https://pulsejs.org/v2/docs/collections.html#collection-basics) |
15 |
| -- :sparkles: Automatic data normalization using [Collect](https://pulsejs.org/v2/docs/collections.html#what-is-data-normalization) `collection.collect()` |
16 |
| -- :lock: Model based [data validation](https://pulsejs.org/v2/docs/collections.html#models) with Collections |
17 |
| -- :timer_clock: Mutation history tracking with [smart undo]() `collection.undo()` |
18 |
| -- :crystal_ball: Dynamic relations between collections using [Populate]() `populate()` |
19 |
| -- :wrench: Wrappers for utils and services |
20 |
| -- :construction: Task queuing for race condition prevention |
21 |
| -- :telephone_receiver: Promise based HTTP requests and websocket connections (web sockets coming soon) |
22 |
| -- :hourglass_flowing_sand: Timed interval task handler using [Jobs]() |
23 |
| -- :bus: Event bus `pulse.on() / pulse.emit()` |
24 |
| -- :floppy_disk: Persisted data API for localStorage and async storage |
25 |
| -- :closed_book: Error logging & snapshot bug reporting (WIP) |
26 |
| -- :leaves: Lightweight (only 100KB) with 0 dependencies |
27 |
| -- :fire: Supports Vue, React and React Native |
28 |
| -- :yellow_heart: Well documented (I'm getting there...) |
| 1 | +# Pulse Framework `3.0` |
29 | 2 |
|
30 |
| -## Why Pulse? |
31 |
| - |
32 |
| -After exploring the many options for Javascript state libraries, including the popular VueX and Redux, I felt like I needed a simpler solution. I wanted to get more out of a library than just state management― something that could provide solid structure for the **entire** application. It needed to be structured and simple, but also scalable. This framework provides everything needed to get a reactive javascript front-end application working fast, taking care to follow best practices and to employ simple terminology that makes sense even to beginners. |
| 3 | +_Pulse is a global state and logic framework for reactive Typescript & Javascript applications. Supporting frameworks like VueJS, React and React Native._ |
33 | 4 |
|
34 |
| -I built Pulse reflective of the architecture in which we use at Notify.me, and as a replacement for VueX at Notify also, making sure it is also compatible with React and vanilla environments. The team at Notify love it and I think you will too. |
| 5 | +Lightweight, modular and powerful. An alternative to `Redux`/`VueX`/`MobX` and request libraries such as `Axios`/`Request.js`. Use Pulse to creare a **_core_** state & logic library for your application; plug and play directly into any UI Framework. |
35 | 6 |
|
36 |
| -## Get involved |
| 7 | +Created by [@jamiepine]() | Sponsored and maintained by the [Notify Team]() |
37 | 8 |
|
38 |
| -If you wish contribute, that is very much welcome! But please reach out first so we don't work on the same thing at the same time, twitter dm @jamiepine or Discord jam#0001 |
39 |
| -[Join Community Discord](https://discord.gg/RjG8ShB) |
| 9 | +### Official website: [pulsejs.org](https://pulsejs.org/v3/introduction/what-is-pulse.html) |
40 | 10 |
|
41 |
| -FULL DOCUMENTATION HERE: [pulsejs.org](https://pulsejs.org) |
42 |
| - |
43 |
| -<p align="center"> |
44 |
| - <a href="https://patreon.com/jamiepine"><img src="https://img.shields.io/badge/donate-patreon-F96854.svg" alt="Donate on patreon"></a> |
45 |
| - <a href="https://twitter.com/jamiepine"><img src="https://img.shields.io/twitter/follow/jamiepine.svg?label=Follow" alt="Follow on twitter"></a> |
46 |
| - <a href="https://twitter.com/pulseframework"><img src="https://img.shields.io/twitter/follow/pulseframework.svg?label=Pulse+Twitter" alt="Follow Pulse on twitter"></a> |
| 11 | +<p align="left"> |
47 | 12 | <a href="https://discord.gg/RjG8ShB"><img src="https://discordapp.com/api/guilds/658189217746255881/embed.png" alt="Join Discord"></a>
|
48 |
| - <a href="https://npmjs.com/pulse-framework"><img src="https://img.shields.io/npm/v/pulse-framework.svg" alt="NPM Package Version"></a> |
49 |
| - <a href="https://npmjs.com/pulse-framework"><img src="https://img.shields.io/npm/dm/pulse-framework.svg" alt="NPM Monthly Downloads"></a> |
50 |
| - <a href="https://npmjs.com/pulse-framework"><img src="https://img.shields.io/npm/dw/pulse-framework.svg" alt="NPM Weekly Downloads"></a> |
51 |
| - <a href="https://npmjs.com/pulse-framework"><img src="https://img.shields.io/npm/dt/pulse-framework.svg" alt="NPM Total Downloads"></a> |
52 |
| - <a href="https://npmjs.com/pulse-framework"><img src="https://img.shields.io/bundlephobia/min/pulse-framework.svg" alt="NPM Bundle MIN Size"></a> |
53 |
| - <a href="https://github.com/jamiepine/pulse"><img src="https://img.shields.io/github/license/jamiepine/pulse.svg" alt="GitHub License"></a> |
54 |
| - <a href="https://github.com/jamiepine/pulse"><img src="https://img.shields.io/github/languages/code-size/jamiepine/pulse.svg" alt="GitHub Code Size"></a> |
55 |
| - <a href="https://github.com/jamiepine/pulse"><img src="https://img.shields.io/github/repo-size/jamiepine/pulse.svg" alt="GitHub Repo Size"></a> |
| 13 | + <a href="https://patreon.com/jamiepine"><img src="https://img.shields.io/badge/donate-patreon-F96854.svg" alt="Donate on patreon"></a> |
| 14 | + <a href="https://twitter.com/jamiepine"><img src="https://img.shields.io/twitter/follow/jamiepine.svg?label=Jamie's Twitter" alt="Follow on twitter"></a> |
| 15 | + <a href="https://twitter.com/pulseframework"><img src="https://img.shields.io/twitter/follow/pulseframework.svg?label=Pulse+Twitter" alt="Follow Pulse on twitter"></a> |
56 | 16 | </p>
|
| 17 | + |
| 18 | +```ts |
| 19 | +const App = new Pulse(); |
| 20 | + |
| 21 | +const Hello = App.State<string>('the sound of music'); |
| 22 | +``` |
| 23 | + |
| 24 | +## Why Pulse? |
| 25 | + |
| 26 | +Pulse provides a clean-cut toolset to build a Javascript application quickly and efficiently. It encourges developers to construct a core library that can be dropped into any UI framework. Your `core` is the brain of your application, it will handle everything from state management, API requests to all logic and calculations. Pulse will supply pre-computed data to your UI components, in the framework of your choice with complete reactivity. |
| 27 | + |
| 28 | +### Typescript |
| 29 | + |
| 30 | +Pulse is written in Typescript and is designed to support it heavily. Everything is type safe out of the box and encourages you to write clean typed code. |
| 31 | + |
| 32 | +Read the [documentation](https://pulsejs.org/v3/introduction/what-is-pulse.html) to learn more! |
0 commit comments