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

philtrejs

v0.12.1

Published

Block-style editor for phoenix_live_view, the frontend part

Readme

Readme

Description

A block-based content editor, with support for static html generation, in phoenix live view.

Disclaimer {: .warning}

This library is still heavily in development.

Things will break and at least initially, they will not maintain backwards compatibility. In fact, the final, release-worthy version may never see the light of day.

Use it at your own risk!

Currently supports the following blocks:

  • a generic content-editable wrapped which can output any of: <p>, <h1>, <h2>, <h3>, <ul>, <pre>, <blockquote>
  • a very badly styled table
  • a code block with synthax highlighting for elixir only

Installation and Usage

Add it to your dependencies in mix.exs:

deps: [
  # ...
  {:philtre, "~> 0.12.1"}
  # ...
]

Include the styles somewhere in your application, for example, from app.js:

import 'philtre/dist/index.css';

Or from app.css:

@import 'philtre/dist/index.css';

Import and add the necessary hooks to your live view application

import * as philtreHooks from 'philtre/src/hooks';

const liveSocket = new LiveSocket('/live', Socket, {
  hooks: { ...philtreHooks, ...yourHooks },
});

Render the page component inside one of your live views

def mount(%{}, _session, socket) do
  {:ok, assign(socket, %{editor: Philtre.Editor.new()})}
end

def render(assigns) do
  ~H"""
  <button phx-click="save">Save</button>
  <.live_component
    module={Philtre.UI.Page}
    id={@editor.id}
    editor={@editor}
  />
  """
end

def handle_event("save", %{}, socket) do
  json = Philtre.Editor.serialize(socket.assigns.json)
  # Save the json however you please
  # Load into editor using Philtre.Editor.normalize/1
  inspect(json)
  {:noreply, socket}
end

def handle_info({:update, %Philtre.Editor{} = editor}, socket) do
  {:noreply, assign(socket, :editor, editor)}
end

Developing using Playground

Playground is a locally setup, minimal phoenix application which loads the editor files using local paths, so they are always kept up to date and are even being watched by esbuild.

THis means it allows for live-reload development of hte library.

To start it, run mix playground

Note that editor pages are saved as files under playground\priv\documents so you should probably periodically clean them.