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

mdxt

v1.1.4

Published

Markdown Extended

Readme

MDXT Syntax Cheatsheet

Markdown Extended

Add new components and logic to markdown allowing you to create interactive docs all in a 1.53kb package.

Layout

symbol[id]{state/condition}

| Symbol | Type | | --- | --- | | @ | Variable input/output | | ? | Display if | | > | Execute | | # | Component | | % | Loop | | ```> | Execute code |

Variable input/output

@[id:type]{default}(parameters)

id

The id parameter will be the selector used when referencing the output in the future

type

  • text
  • number
  • select
  • textarea
  • checkbox
  • radio

The type parameter is set by appending a : after the id, by default, it is set to text

@[id:number]{10}

default

Default is the default value the input will be rendered with

parameters

these will be injected into the tag itself

@[id:checkbox]{true}(role=“switch”)

Displaying the Output

To use the output of an input using the format below

@{id}

If this is called outside an expression it will be inserted into the document as text. If it is called in inside an expression it will be parsed into either a Boolean, float/int or string.

Grouping Inputs

Use the # like below to group inputs together

@[#id:type]{default}

@[#id:type]{default}

To use the outputs of these elements add an index at the end of the variable reference

@{id}[0]

Special Cases

If you want to use the type select here is the basic format

@[id:select]{0}
    [Label](value)

    [Label 2](0)

In this case, because the default value is 0, “Label 2” would be selected as the default and the output of the @{id} would be 0

Additional Parameters

To add html parameters like an inline style add parentheses to the end of the line like below

@[id:type]{default}(style=“color: black;”)

Labels

If you want to add a label to an input, anything after the tag declaration and a space character will be inserted as a label tag

@[id:type]{default} This is a label

Execute

To execute code that is reactive to variables use the > operator as follows

>{@{number} + 2}

This acts the same as the variable, outputting to the document if not used in an if statement. if you only want to make one declaration, you can append an id to the executable statement and reference it the same as a variable.

>[id]{@{number} + 2}

@{id} would output the result of the executed code and it will update as the variables within the statement update

Display If

To use a display if condition, first define the condition statement with a question mark and a set of curly brackets with the condition inside it. The display if will only render the content inside if the condition is true. Display if statements cannot contain an execute statement as the content is executed the same way. The content intended to be displayed goes underneath the initiator indented with a single tab character.

?{condition}
    Content to be displayed if true

Component

MDXT contains a set of components that are missing from markdown that can be used for document layout and are not reactive by default but can be made reactive using MDXT.

To initialize a component use the pound sign followed by curly brackets with the target components’ name inside and the content of the component indented underneath.

#{component}
    Content

Columns

Columns are an flexbox container that adjusts with the content inside of the box, evenly spacing the containers inside the box. To define the columns, use a row of equals sign of any length. This will divide the content into separate containers within the flexbox element.

#{column}
    Container 1

    =======================

    Container 2

Accordion

Accordions can be used to display content in a compact format. To use the accordion component define an accordion component and underneath place the labels in square brackets and the content to be displayed inside under the label.

#{accordion}
    [Label 1]

    This is shown open by default

    [Label 2]

    This is hidden until opened

Code

MDXT comes out of the box with code highlighting, if no language is specified it will attempt to auto-detect the language. The syntax highlighting is done via highlight.js and supports all of the languages highlight.js supports. If you prefer no syntax highlighting add none in place of the language name.

Optionally if you are using JavaScript, you are about to render and display the output of your code, including errors by appending a greater than sign before the language definition.

’’’python

python code

‘’’

Executing code with console output

’’’>javascript

let x = “Hello world”;

console.log(x);

‘’’
  • These are not copy and pastable, but only for example.

All code executed on the server side is done in the Node.JS vm module. This is not secure, however, it does provide a fairly safe space to run trusted code without exposing your server to most attacks. You should not allow just anyone to render documents on the server as running any untrusted code on a server is always dangerous. However, because the document is rendered server-side no one on the client side is able to run the code inside.

Loops

The loop operator is defined by the % symbol and allows for generating variable length content. The syntax is as below, in the first group define the varibles you want to use inside of the loop. The first one is the current index of the loop and the second is the total amount of times to be looped over. The next group is the amount of times to loop over, this can be a integer or a input that returns a integer. The content intended to be repeated goes underneath tabbed over, this will repeat in the final document.

%[index, length]{amount}
    @{index} of @{length}