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

@jtl-software/cloud-app-template-frontend-react

v0.3.1

Published

React + Vite + Tailwind frontend template for JTL Platform cloud apps

Downloads

1,536

Readme

React Frontend Template

React 19 + Vite + Tailwind CSS + JTL Platform UI

App modes

| Route | Manifest field | Context | |-------|---------------|---------| | / | — | Welcome page (behind login) | | /setup | lifecycle.setupUrl | App installation (embedded) | | /erp | capabilities.erp.menuItems[].url | Main ERP view (embedded) | | /pane | capabilities.erp.pane[].url | Sidebar panel (embedded) | | /hub | capabilities.hub.appLauncher.redirectUrl | Hub launcher (behind login) | | /user-example | authentication.publicClient | Read the signed-in user from the token (claims, access token, userinfo) | | /callback | authentication.publicClient.redirectUris | OAuth redirect target |

Browser login (PKCE)

There are two ways the app runs, and they authenticate differently:

  • Embedded (inside the ERP/Hub iframe): identity comes from the AppBridge. /setup, /erp, /pane, /graphql-demo run here. No browser login.
  • Standalone (opened directly in a browser tab): every page is behind the JTL login. A visitor without a session is sent straight to the identity provider, with no intermediate "sign in" screen. After signing in they land back where they started, with a sign-out bar on top. /user-example shows how to read the signed-in user from the token (id-token claims, access token, and the userinfo response).

It uses the authorization code flow with PKCE against your app's public client — no secret in the browser — via @jtl-software/cloud-apps-auth, which wraps react-oidc-context with the JTL defaults. main.tsx wraps the app in its JtlAuthProvider (passing the env vars below), and App.tsx gates standalone pages with RequireJtlAuth (which also renders the signed-in top bar). Read the session with useJtlAuth().

It reads two env vars, which npm run register writes into .env after provisioning the public client:

  • VITE_JTL_CLIENT_ID — the public client's id
  • VITE_JTL_ISSUER — the identity provider, e.g. https://id.dev.jtl-cloud.com

Until they are set, the standalone pages explain what is missing. The redirect URI is http://localhost:{{FRONTEND_PORT}}/callback and must be one the manifest registered.

Scripts

  • npm run dev — Vite dev server on port {{FRONTEND_PORT}}
  • npm run build — production build
  • npm run test — Vitest