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 🙏

© 2024 – Pkg Stats / Ryan Hefner

low

v1.1.92

Published

a templating driven low-code framework for rapid systems development

Downloads

173

Readme

low logo

:point_down: low

a templating driven low-code framework for rapid application developmnet

:construction: Proper readme coming soon... All of this is a work in progress

:information_source: About

low is a framework for building systems without having to do too much programming. It's aim isn't to be an App Builder™ that require zero development experience, often systems that claim to be that have to make compromises and suffer as a result. Here are the goals:

| | Goal | Description | | --- | --- | --- | | :wrench: | Configuration driven | everything is stored as a big JSON blob (don't worry, it comes with tools to manage this and some day a UI!) | | :ballot_box_with_check: | Task driven | all functions and bits of work are broken down into simple tasks that are executed by single purpose modules called Doers | | :triangular_ruler: | Templateable | any bit of a task's configuration can be represented by a template which is compiled given an execution context | | :symbols: | Modular | everything is modules! We will provide a number of common modules that can be dropped into an system and you can very easily write your own using Typescript | | :repeat: | Cachable | outputs for each task and templated bits of task configurations can be cached given whatever parameters from the current context you want | | :recycle: | Reusable | there might be certain common tasks that are interacted with in a number of ways (web applications, task queue processors, system messages) and you might want to re-use them no matter the source of execution | | :package: | Scalable and portable | have as many nodes running your system as you like | | :fast_forward: | Rapid development | most of the above points lead to much quicker development times | | :baby_bottle: | Easy to use | once you get your head around the basic concepts, developing complex systems gets really quite simple |

:bulb: Key concepts

There are a few concepts to help you get your head around how all of this works. The Environment, TaskConfiguration, ObjectCompiler, and the 5 types of Module. Each are explained below.

:sunrise_over_mountains: The Environment

This is the base of the entire low system. An instance of this is created and loaded with all of your task configurations and modules. It does little other than initialise everything and act as your programs reference to the low system.

:memo: The TaskConfiguration

Every program, job, website route, or whatever can be broken down into a simple task. Think of it as a function call. Take a web request for a not so simple search results page for instance, the entire arc can be broken down as follows:

  1. [Auth provider] Check if the user is authenticated
  2. [Database query] If they are authenticated get their user profile
  3. [Search index query] Construct and execute a search query based on querystring parameters and user preferences (if they exist)
  4. [Database query] Store constructed query in a users profile
  5. [Renderer] Use a templating language to render the results to send back to the user

In low each of these steps can be represented as a simple configuration and grouped together using a special task type that executes tasks serially. Each of these tasks requires a bit of dynamic input based on the incoming HTTP request and results from previous tasks in the chain. That is where the ObjectCompiler comes in.

:hammer: The ObjectCompiler

There are certain bits of JSON - such as your task configurations - which may need to change depending on what is being run.

TODO: Finish writing key concepts!

:construction: Development roadmap

None of this is ready for use yet! Here is a high level list of things that need to be done.

  • :white_medium_square: Finish writing core package
    • :ballot_box_with_check: Add "run next" pointer to task output (need to work out how this will work)
    • :white_medium_square: Implement template/renderer caching
    • :white_medium_square: Implement optional type checking of inputs and outputs to Doers
    • :ballot_box_with_check: Finish writing unit tests and make sure core package is fit for purpose
  • :white_medium_square: Write some basic modules to make the system usable
    • :white_medium_square: HTTP Connector
    • :white_medium_square: Cron Connector
    • :white_medium_square: RabbitMQ Connector
    • :white_medium_square: Redis Cache Manager
    • :white_medium_square: Memcached Cache Manager
    • :white_medium_square: Branching Doer
    • :white_medium_square: HTTP Request Doer
    • :white_medium_square: SQL Query Doer
    • :white_medium_square: Mustache Renderer
    • :white_medium_square: Handlebars Renderer
    • :white_medium_square: JSON-e Renderer
  • :white_medium_square: Improve development and deployment process
    • :white_medium_square: Setup proper branching
    • :white_medium_square: Setup proper versioning with Git tags
    • :white_medium_square: Setup Travis-CI to test and deploy master to NPM
  • :white_medium_square: Write a configuration builder (a command line tool that pieces together one big JSON file from lots of JSON files)
  • :white_medium_square: Comment all code and implement Typedoc
  • :white_medium_square: Write basic implementation examples and recipies
  • :white_medium_square: Finish README.md
  • :white_medium_square: Build a website explaining everything in a less rambly-technical way
  • :white_medium_square: Create a browser based playground

Not all of this is completely necessary to start using the system. I will be working through the tasks loosely from top to bottom. Hopefully I'll soon start to use Github Issues and Projects to manage all this. I'm a lone developer with a full time job and a wife and toddler so finding the time to get through all this isn't super easy.