npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

chrono-forge

v1.9.8

Published

A comprehensive framework for building resilient Temporal workflows, advanced state management, and real-time streaming activities in TypeScript. Designed for a seamless developer experience with powerful abstractions, dynamic orchestration, and full cont

Readme

Temporal-Forge

(A Next-Gen Temporal Workflow Orchestration Framework for TypeScript)

Sponsor on GitHub Test Suite Quality Gate Status Reliability Rating Security Rating Maintainability Rating

Temporal-Forge supercharges Temporal.io workflows by eliminating boilerplate, automating state management, and enabling seamless hierarchical orchestration.

  • Decorator-Based API → Write workflows in a declarative, intuitive way
  • Event-Driven UpdatesNo polling—Workflows automatically synchronize state
  • State Normalization & Hierarchical Management → Built-in entity normalization & child workflow orchestration
  • ContinueAsNew & Long-Running Workflow SupportEfficiently persists state and prevents history bloat
  • API Integration → Load & sync external data in real-time
  • Built-in Observability → OpenTelemetry support for tracing and debugging

💡 Why Use Temporal-Forge?

  • 🚀 Faster Workflow Development → No need to manually manage signals, queries, or updates.
  • 🧠 Intelligent State Management → Normalized entities with automatic denormalization and caching.
  • 🎯 Precision Updates → Changes only propagate where needed, eliminating redundant state syncing.
  • 🤖 Automatic Child Workflow Handling → Start, stop, and update workflows without writing extra logic.

📌 Key Features

1️⃣ Step-Based Workflow Execution

Temporal-Forge simplifies workflow design using decorators like @Step(), @Query(), and @Signal() to define workflow logic.

  • Step-based execution with dependencies
  • Conditional branching & dynamic workflow control
  • Lifecycle hooks (@Before(), @After(), @Hook())

2️⃣ Advanced Stateful Workflow Management

Stateful workflows handle complex entity relationships with automatic state tracking.
Automatic child workflow execution & cancellation
Parent workflows automatically sync child state changes
Limitless nesting of parent-child workflows


3️⃣ Event-Driven, Subscription-Based Updates (No Polling)

  • Entities update automatically across workflows
  • Only relevant workflows receive updates via event-driven signals
  • Ancestor tracking prevents infinite loops & redundant updates

💡 How it Works? → Each workflow subscribes to only the data it cares about.
If an entity updates, only dependent workflows receive updates, ensuring low-latency state propagation.


4️⃣ Normalized State & Cached Denormalization

State is structured using normalizr, ensuring efficient, normalized entity management.
Automatically flattens nested relationships
StateManager & limitRecursion cache queries to optimize lookups
Denormalization is fully cached & optimized


5️⃣ Auto-Managed Child Workflow Lifecycle

  • Starts child workflows when needed
  • Cancels workflows when dependencies change
  • Passes subscription objects so child workflows notify parents of updates

No more manual child workflow management—it just works.


📦 Installation

npm install temporal-forge

or

yarn add temporal-forge

🔧 Requirements:

  • Node.js 20+
  • Temporal.io’s TypeScript SDK 1.11.7+

🚀 Quick Start

Basic Workflow

import { Temporal, Workflow } from 'temporal-forge';

@Temporal()
class SimpleWorkflow extends Workflow {
  async execute() {
    this.log.info('Executing workflow...');
  }
}

export default SimpleWorkflow;

Stateful Workflow Example

// Your types
type User = {
  id: string;
  likes: Like[];
};

type Like = {
  id: string;
  user: User;
};
import { Temporal, StatefulWorkflow, SchemaManagerStatefulWorkflowParams, StatefulWorkflowOptions } from 'temporal-forge';

@Temporal({
  schemaName: "User",
  schemas: SchemaManager.schemas
})
class UserWorkflow extends StatefulWorkflow<
  StatefulWorkflowParams<User>,
  StatefulWorkflowOptions
> {
  @Property({ path: 'likes' })
  protected likes!: Like[];

  async execute() {
    this.log.info('Executing workflow, all children in this.likes will have been auto started...');
  }
}

export default UserWorkflow;
// Set your schemas (usually done in src/schemas.ts)
SchemaManager.parseYAML(`
  User:
    idAttribute: id
    likes: [Like]
  Like:
    idAttribute: id
    user: User
`);

💡 This workflow automatically normalizes state and updates subscribers whenever data is changed!


📖 Documentation

📚 Read the full docs:


🛠️ Core Concepts

Step-Based Execution → Define steps using @Step()
Workflow Lifecycle Management → Manage workflow execution state
Query & Signal Handling → Real-time data retrieval and updates
Automatic Retry & Error Handling → Decorators like @OnError() simplify failure recovery


📌 Advanced Topics

  • Handling Circular Workflow Relationships → Prevents redundant updates
  • Security & API Token Management → Securely handle external API access
  • ContinueAsNew Optimization → Ensures long-running workflows stay within Temporal’s execution limits

🔍 Full API reference available in docs/API.md


🧪 Testing & Validation

Temporal-Forge includes a comprehensive test suite:

  • ✅ Unit tests for decorators, subscriptions, and state management
  • Integration tests covering real-world workflow scenarios
  • ✅ SonarCloud reports for maintainability, security, and reliability

💡 Run tests locally:

npm run test

🤝 Contributing

🚀 We welcome contributions! Whether it's bug fixes, feature requests, or documentation improvements—join the project and help make Temporal-Forge even better.

📌 See CONTRIBUTING.md for details.


📜 License

MIT License – See the LICENSE file for more details.


💡 "Those who say it cannot be done should stop interrupting the people doing it."