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

loren-framework

v1.5.0

Published

[![npm version](https://img.shields.io/npm/v/loren-framework.svg?color=blue)](https://www.npmjs.com/package/loren-framework) > "Burning like a beating heart."

Readme

LOREN-FRAMEWORK

npm version

"Burning like a beating heart."

Loren is a CLI-driven, lightweight Roblox framework designed to eliminate pathing headaches, automate VS Code environments, and provide a clean, predictable lifecycle for your game logic.


Instalation

To install Loren globally, in your terminal, run:

npm install -g loren-framework

(Note: Depending on your system permissions, Windows users might need to run their terminal as Administrator, and Mac/Linux users might need to prefix the command with sudo).

CLI Commands

| Command | Description | | :--- | :--- | | loren init <name> | Scaffolds a new project with auto-configured VS Code settings and sourcemaps. | | loren add <user/repo> [custom name] | Clones a GitHub module into loren_packages and updates autocomplete instantly. | | loren make <type> <name> | Forges a new service or controller with full npm version boilerplate. | | loren inject <type> <name> | Injects a pre-built module from your loren_premade folder into your active source code. | | loren refresh | Manually refresh the Rojo / Argon sourcemap to update VS Code IntelliSense (in case you added stuff outside of loren) | | loren ignite | Calls rojo serve / argon serve automatically | | loren migrate | Migrate the current project between Rojo and Argon |


Core Architecture

Loren is built on a Dependency Injection (DI) system. You never have to manually require() your internal modules; simply list their names in the Dependencies table, and Loren resolves them automatically during the boot sequence.

Module Structure

A simple structure example:

-- a Simple service
local Service = { 
    Dependencies = {"AnotherService"}; -- any service you want
    Client = { };
    Signals = {"SendData"};
    Middleware = { 
        GetDataMultiplied = function(_, multiplier : number) -- check if multiplier is postiive before sending data back to the player
            return multiplier > 0
        end
    };
}

-- Init
function Service:LorenIgnite()
    self.someData = "I am data"
end

function Service.Client:GetDataMultiplied(player : Player, multiplier : number) -- Returns a promise
    return self.Server.someData
end

function Service:LorenBurn()
    -- Fire a signal to everyone
    self.Signals.SendData:FireAll(self.someData)
end

-- a Simple Controller
local Controller = {
    Dependencies = {"AnotherController", "Service"}; -- any controller/service you want. We require the previous service
}

function Controller:LorenIgnite()
    print("I am ignited!")
end

function Controller:LorenBurn()
    -- Pull the Proxy from our resolved dependencies
    local PointsService = self.Dependencies.Service

    -- Calling a Method (Returns a Promise)
    PointsService:GetDataMultiplied(10):andThen(function(result)
        print("Server says:", result)
    end):catch(warn)

    -- Connecting to a Signal
    PointsService.Signals.SendData:Connect(function(data)
        print("Received Signal Data:", data)
    end)
end

-- Bootstrapping
-- Getting the framework running is incredibly simple:
local Loren = require("path to loren")

Loren.AddServices("path to services") / Loren.AddControllers("path to controllers")
Loren:SetOnFire()

-> Note on v1.0.0: In this current version, Controllers cannot yet access Services directly. This cross-boundary communication is slated for a future update.

-> Note on v1.1.0: Cross-boundary communication is now fully operational. Controllers can include Services in their dependencies to access the binary bridge and call server-side logic via Promises.

-> Note on v1.2.0: The CLI has been completely overhauled for a zero-friction developer experience. Toolchain initialization (Aftman, Rojo, and VS Code settings) is now fully automated during loren init, and you can now use loren inject to instantly drop your own reusable templates from loren_premade directly into your active game logic.

-> Note on v1.2.1: Bug fixes and security changes

-> Note on v1.2.2: Added loren refresh and remove .import from Loren

-> Note on v1.2.3: All signals are now nested inside the "Signals" Table for services and controllers

-> Note on v1.2.4: Fixed fatal bug where signals could only transfer 1 argument a time.

-> Note on v1.3.0: Added :Once to signals, improved the buffer pool q (removed old caching), added client call timeout warn and improved security. *fixed bugs : promises could only transfer 1 argument at a time.

->Note on v1.4.0: Fixed old premade PlayersService, added support for argon and a command to migrate from argon to rojo and viceversa. update the init command.

->Note on v1.4.2: Published the framework to npm and updated the structure.

->Note on v1.5.0: Added Documentation

Documentation

Full API references, including the binary protocol specifications and middleware implementation guides, are available in the project's documentation folder. Keep your logic tight, your network clean, and keep the heart burning.