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

@onzag/itemize

v0.0.335

Published

Itemize

Downloads

1,271

Readme

:warning: WARNING: Project in Alpha

ItemizeJS

Itemize is a fully featured end to end library powered by react, postgresql, elasticsearch, docker and redis to create fully featured internationalized scalable realtime offline first websites; Fast, very fast.

The aim of itemize is to be a library that can produce and deliver results fast, reliably and cheaply; and that these results can also be the final product and not just a prototype; scale is key.

WARNING Alpha

This library is in alpha, it is an experimental library that defies some of the most common development patterns and currently documentation isn't complete and further testing is required.

When to use Itemize

Itemize was made to create web software in a large range of needs, for the most part almost any new web software can be created using itemize, as such it is an excellent tool for startups that need a fully featured complex app.

Features

Ease of Development

Itemize was made for fast and efficient development, the code that is generated is meant to work and do it well and simply; as such very little knowledge of databases, rest endpoints, etc... is necessary, you just write json schema files, build the app and write react code, itemize figures what to do based on that information.

As such, even the most junior programmer should be able to write feature rich complex apps with itemize; itemize is also technical debt tolerant, and spagetthi code tolerant, it was designed that way.

Testing

Testing and test cases are automatically generated based on the application design and structure, rather than manually written tests; this allows for the application to test itself as it's written based on assumptions, these assumptions can be set by the developer, but the analyzer does most of the heavy lifting so you might not even need to write any custom tests.

Internationalized

Itemize app are made so that it doesn't assume any primary language, as it has a global approach; it can easily be translated into any language.

It is also able to track the user IP in order to be able to predict a first's user language and region.

Currency and Currency Exchanges

Itemize currency type, provides values for currencies and these currencies can be displayed in any other currency that itemize supports; the factors are automatically updated, this means that currency values are displayed and converted to the current market value of what the user wants to see

Secure

Security is automatically generated based on schemas and user roles, this security can be fairly strict; for specific security rules, triggers can be made for fine tuning.

Fast

Itemize provides several layers of caching, global level, cluster level, HTTP level, service worker, cache worker, and memory.

This ensures that the application is extremely efficient on data requests, and that it can even work offline using the client side caches.

Most of this is handled automatically by itemize, such as cache invalidation, so there's no need to worry; only the memory cache is handled by the developer, but it comes in a rather intuitive way.

Scalable

Itemize uses docker in order to generate clusters, where the main source of truth, postgresql, remains centralized and managed by a global manager, clusters will copy information locally on the cluster level caching using redis, and will keep this information up to date as the global redis informs updates.

Clusters are deployed in different regions and can have their own unique IP which you might route via GeoDNS, this means that you have a CDN out of the box, not only that but uploads are also localized to regions using OpenStack containers.

By default itemize works with one single cluster and bundles the global manager and cluster manager within itself, which is enough for simple services, but you might scale later on without any friction.

PWA Enabled

Offline first websites, with service workers and locally copying responses into an IndexedDB database (if avaliable) allows the application to work as if it was a native application.

PWA logic comes out of the box with every itemize installation.

SSR Enabled

Server Side Rendering is generated by self analysis of the UI tree, resources are prefetched asynchronously, no configuration is needed, no resources need to be manually prefetched, no suspense API, it just works.

SEO Enabled

Ability to automatically generate sitemaps and update these, this with SSR should make it so that the website ranks high in search engines.

Realtime

Every item in itemize is realtime, and as such changes populate over all the network when it detects so.

Search Engine

Items can be indexed using elasticsearch then searched, and it will work seamlessly with no extra effort.

Mail Integration

With little configuration itemize automatically handles email sending and management, as well as subscriptions.

Fast Prototyping

Itemize comes with a fast prototyping out of the box, which uses Material UI; this allows to create itemize applications fast; note that the Itemize core doesn't have any UI features, hence the fast prototyping module exists for that.

Geographical Support

Itemize supports geography and geographical search out of the box, using openstreetmap for display on its fast prototyping mode, and an Here Maps API key allows for address autocompletition.

Rich Text and Content Management

Itemize supports rich text and rich text based search out of the box with file support

The rich text specification is powerful enough it can be used to build templates and make content for your application, even fully functional event driven DOM bits can be made via rich text without programming knowledge via the CMS and integrate with react. This means separation of design and programming logic can be achieved via these fragments.

The fragments can also exist in many languages.

Documentation

Documentation is available here

How Itemize differs from

WordPress

Wordpress is a tool to create simple websites to give a web precense, while it is possible to modify and add a lot of functionality on top of it, such as ecommerce, itemize offers much more functionality and it's much more complex; for a simple web presence, wordpress will be the tool to use, itemize is to make much more complex apps with more needs.

Plain ReactJS + PostgreSQL + ElasticSearch + NodeJS stack

A plain stack is very powerful and can morph into anything and make anything, after all, Itemize is this same stack with a lot of features on top of it, the issue is that you would have to create a custom infraestructure and spend a lot of time developing it, when itemize comes with these out of the box and hides all this configuration so that the developer can focus on making what is important for the user

MeteorJS

Meteor is what comes closest to what itemize is, but while Meteor works best with MongoDB but can be integrated with SQL database but losing the realtime support, Itemize works only with PostgreSQL (which is more performant than mongo) and keeps its realtime functionality, meteor is much more flexible than itemize as a framework, but itemize offers a streamlined strict process; both have their place; advantages of itemize over meteor include.

  • PostgreSQL with realtime support.
  • Offline First out of the box without configuration.
  • SSR is enabled with no configuration.
  • SEO is enabled with very little configuration.
  • Internationalization is Enforced
  • Automatic currency support and exchange rates
  • Automatic geographical support
  • Automatic mail support
  • Several layers of caching.

Meteor and Itemize are different as a concept of what they want to achieve, Meteor is a framework to build apps as flexibly as possibly to integrate with the favorite developer technology, with itemize there are no options, it provides a single stack, but as such, it can be more streamlined and effective; Itemize wants to reduce costs, reduce technical debt, accept that in startups spagetthi code is a fact of life, Itemize wants to soak common problems, so code doesn't need to be perfect, amazingly tested, or perfectly documented, it just needs to work, Itemize philosophy is about the end product, to provide a process, it includes a business mindset in it.