Convert Figma logo to code with AI

salesforce logoakita

🚀 State Management Tailored-Made for JS Applications

3,697
344
3,697
49

Top Related Projects

34,658

DeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.

14,221

Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet.

82,049

Tensors and Dynamic neural networks in Python with strong GPU acceleration

185,446

An Open Source Machine Learning Framework for Everyone

8,290

A PyTorch Extension: Tools for easy mixed precision and distributed training in Pytorch

PyTorch extensions for high performance and large scale training.

Quick Overview

Akita is an open-source library developed by Salesforce for building reactive Angular applications using RxJS. It provides a state management solution that simplifies the process of managing application state, reducing boilerplate code, and improving overall application performance and maintainability.

Pros

  • Simplifies state management in Angular applications
  • Integrates seamlessly with RxJS for reactive programming
  • Reduces boilerplate code compared to other state management solutions
  • Provides powerful debugging tools and developer experience

Cons

  • Learning curve for developers new to reactive programming concepts
  • Limited ecosystem compared to more established state management libraries
  • May be overkill for small or simple applications
  • Requires a good understanding of RxJS to fully leverage its capabilities

Code Examples

  1. Creating a store:
import { createStore } from '@datorama/akita';

interface TodoState {
  todos: Todo[];
  loading: boolean;
}

export function createTodoStore() {
  return createStore<TodoState>({ todos: [], loading: false }, { name: 'todos' });
}
  1. Updating store state:
import { TodoStore } from './todo.store';

export class TodoService {
  constructor(private todoStore: TodoStore) {}

  addTodo(todo: Todo) {
    this.todoStore.update(state => ({
      todos: [...state.todos, todo]
    }));
  }
}
  1. Querying store state:
import { TodoQuery } from './todo.query';

export class TodoComponent {
  todos$ = this.todoQuery.selectAll();

  constructor(private todoQuery: TodoQuery) {}
}

Getting Started

  1. Install Akita:
npm install @datorama/akita
  1. Create a store:
import { createStore } from '@datorama/akita';

interface AppState {
  count: number;
}

export const appStore = createStore<AppState>({ count: 0 }, { name: 'app' });
  1. Use the store in a component:
import { Component } from '@angular/core';
import { appStore } from './app.store';

@Component({
  selector: 'app-root',
  template: `
    <h1>Count: {{ count$ | async }}</h1>
    <button (click)="increment()">Increment</button>
  `
})
export class AppComponent {
  count$ = appStore.select(state => state.count);

  increment() {
    appStore.update(state => ({ count: state.count + 1 }));
  }
}

Competitor Comparisons

34,658

DeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.

Pros of DeepSpeed

  • Offers more comprehensive optimization techniques for large-scale model training
  • Provides better support for distributed training across multiple GPUs and nodes
  • Has a larger community and more frequent updates

Cons of DeepSpeed

  • Steeper learning curve and more complex setup process
  • May be overkill for smaller projects or simpler model architectures

Code Comparison

DeepSpeed:

import deepspeed
model_engine, optimizer, _, _ = deepspeed.initialize(args=args,
                                                     model=model,
                                                     model_parameters=params)

Akita:

from akita import Trainer
trainer = Trainer(model=model, args=training_args)
trainer.train()

DeepSpeed offers more fine-grained control over the training process, while Akita provides a simpler, more abstracted interface for training. DeepSpeed's initialization process allows for more customization, but Akita's approach is more straightforward for users who don't need advanced optimizations.

14,221

Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet.

Pros of Horovod

  • Designed for distributed deep learning, supporting multiple frameworks (TensorFlow, PyTorch, MXNet)
  • Highly scalable, with efficient performance on large clusters
  • Active community and ongoing development from Uber

Cons of Horovod

  • Steeper learning curve, especially for those new to distributed training
  • Requires more setup and configuration compared to simpler solutions
  • May be overkill for smaller-scale projects or single-machine training

Code Comparison

Horovod (distributed training):

import horovod.tensorflow as hvd
hvd.init()
optimizer = tf.optimizers.Adam(0.001 * hvd.size())
optimizer = hvd.DistributedOptimizer(optimizer)

Akita (simplified ML workflow):

from akita import DataLoader, Model
data = DataLoader("data.csv")
model = Model(data)
model.train()

Summary

Horovod excels in distributed deep learning scenarios, offering high scalability and multi-framework support. It's ideal for large-scale projects but may be complex for simpler use cases. Akita, on the other hand, focuses on simplifying ML workflows, making it more accessible for smaller projects or those new to machine learning. The choice between the two depends on the scale of your project and your team's expertise in distributed systems.

82,049

Tensors and Dynamic neural networks in Python with strong GPU acceleration

Pros of PyTorch

  • Larger community and ecosystem, with more resources and third-party libraries
  • More comprehensive documentation and tutorials
  • Wider industry adoption and support

Cons of PyTorch

  • Steeper learning curve for beginners
  • Larger codebase and installation size
  • More complex API for some tasks

Code Comparison

Akita example:

from akita import Model, Field

class User(Model):
    name = Field(str)
    age = Field(int)

user = User(name="John", age=30)

PyTorch example:

import torch

class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc = torch.nn.Linear(10, 2)

    def forward(self, x):
        return self.fc(x)

net = Net()

While Akita focuses on data modeling and validation, PyTorch is primarily used for deep learning and neural network operations. Akita provides a simpler API for defining data structures, while PyTorch offers more flexibility and power for building complex neural network architectures.

185,446

An Open Source Machine Learning Framework for Everyone

Pros of TensorFlow

  • Extensive ecosystem with robust tools and libraries
  • Highly scalable for large-scale machine learning projects
  • Strong support for production deployment and mobile/edge devices

Cons of TensorFlow

  • Steeper learning curve, especially for beginners
  • Can be more complex and verbose for simple tasks
  • Slower development cycle compared to more lightweight frameworks

Code Comparison

Akita (Python-like pseudocode):

model = ak.Model()
model.fit(x_train, y_train)
predictions = model.predict(x_test)

TensorFlow:

model = tf.keras.Sequential([
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy')
model.fit(x_train, y_train, epochs=5)
predictions = model.predict(x_test)

Akita aims for simplicity and automation in model creation, while TensorFlow provides more granular control over model architecture and training process. TensorFlow's code is more explicit but requires more domain knowledge, whereas Akita abstracts many details for faster prototyping.

8,290

A PyTorch Extension: Tools for easy mixed precision and distributed training in Pytorch

Pros of Apex

  • Offers mixed precision training, potentially providing significant speedups on NVIDIA GPUs
  • Includes advanced features like distributed training and automatic loss scaling
  • More mature project with wider adoption in the deep learning community

Cons of Apex

  • Limited to NVIDIA GPUs, reducing portability across different hardware
  • Requires more setup and configuration compared to Akita's simpler approach
  • May have a steeper learning curve for beginners due to its advanced features

Code Comparison

Apex (mixed precision training):

model, optimizer = amp.initialize(model, optimizer, opt_level="O1")
with amp.scale_loss(loss, optimizer) as scaled_loss:
    scaled_loss.backward()

Akita (simplified training loop):

trainer = Trainer(model, optimizer, loss_fn)
trainer.fit(train_loader, val_loader, epochs=10)

Summary

Apex offers more advanced features and potential performance benefits, particularly for NVIDIA GPU users, but comes with increased complexity and reduced portability. Akita provides a simpler, more accessible approach to training deep learning models, albeit with fewer advanced optimizations. The choice between the two depends on specific project requirements, hardware availability, and user expertise.

PyTorch extensions for high performance and large scale training.

Pros of FairScale

  • More comprehensive and feature-rich library for large-scale distributed training
  • Actively maintained with frequent updates and contributions
  • Extensive documentation and examples for various use cases

Cons of FairScale

  • Steeper learning curve due to more complex API and features
  • Primarily focused on PyTorch, limiting its use with other frameworks
  • May be overkill for smaller-scale projects or simpler training needs

Code Comparison

FairScale example (Sharded DataParallel):

from fairscale.nn.data_parallel import ShardedDataParallel

model = ShardedDataParallel(model, optimizer)
output = model(input)
loss = criterion(output, target)
loss.backward()
optimizer.step()

Akita example (not available as the repository doesn't exist or is private)

Summary

FairScale is a more comprehensive and actively maintained library for distributed training, offering a wide range of features and optimizations. However, it may have a steeper learning curve and is primarily focused on PyTorch. Akita, on the other hand, cannot be properly evaluated or compared as the repository is not publicly accessible or doesn't exist.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

THE LIBRARY IS NOT MAINTAINED ANYMORE - DON'T USE IT

Elf, a newer state management solution, has been published. We recommend checking it out 🚀

Akita

A Reactive State Management Tailored-Made for JS Applications

Whether it be Angular, React, Vue, Web Components or plain old vanilla JS, Akita can do the heavy lifting and serve as a useful tool for maintaining clean, boilerplate-free, and scalable applications.


Downloads Build Status Tests commitizen PRs coc-badge semantic-release styled with prettier

Akita is a state management pattern, built on top of RxJS, which takes the idea of multiple data stores from Flux and the immutable updates from Redux, along with the concept of streaming data, to create the Observable Data Stores model.

Akita encourages simplicity. It saves you the hassle of creating boilerplate code and gives powerful tools with a moderate learning curve, suitable for both experienced and inexperienced developers alike.

👉 10 Reasons Why You Should Start Using Akita as Your State Management Solution