Skip to content
Projets

sxzz/ast-explorer has 577 GitHub stars and 74 forks. Star changes are not measured yet. Last checked 2026-11-10 04:24 UTC. Last push 2026-11-09.

Comment ces chiffres sont mesurés

A web tool to explore the ASTs generated by parsers.

What you can do

  • 🦾 Enable code highlighting, suggestions, and formatting with Monaco Editor.
  • 🤩 Support most popular front-end languages and parsers.
  • 🗒️ Save your code via URL. No database, no server downtime.
  • 🐙 Customize parser version via CDN, e.g., @babel/parser alpha.

Progression mesurée des étoiles

in 24h
Mise à jour retardée
in 7 days
Mise à jour retardée
in 15 days
Mise à jour retardée
in 1 month
Mise à jour retardée

Variations nettes sur des périodes qui se chevauchent, pas des totaux quotidiens. Les mesures absentes restent vides. Les étoiles indiquent l’intérêt, pas la qualité.

README.md

Original

AST Explorer

AST Explorer - A web tool to explore the ASTs generated by parsers.

Feel free to add more languages and parsers via PR!

Screenshot

Features

  • 🦾 Enable code highlighting, suggestions, and formatting with Monaco Editor.
  • 🤩 Support most popular front-end languages and parsers.
  • 🗒️ Save your code via URL. No database, no server downtime.
  • 🐙 Customize parser version via CDN, e.g., @babel/parser alpha.
  • 🌈 Set custom parser options with a GUI.
  • 🌚 Good-looking dark mode theme.
  • 📱 Even compatible with mobile devices.

Languages and Parsers

More parsers via web-tree-sitter, see tree-sitter parsers.

URL Encode Algorithm

The input code and options are stored in the URL as a hash fragment, which is the string following the # symbol and is not transmitted to the server.

Implementation

const code = 'code'
const parserId = 'acorn'
const optionsString = JSON.stringify({
  ecmaVersion: 'latest',
  sourceType: 'module',
})
const serialized = utoa(
  // utoa, or compress() if want to compress the data
  JSON.stringify({
    c: code,
    p: parserId,
    o: optionsString,
  }),
)
const url = `https://ast-explorer.dev/#${serialized}`

// no compress
function utoa(data: string): string {
  return btoa(unescape(encodeURIComponent(data)))
}

// compress is optional
import { strFromU8, strToU8, unzlibSync, zlibSync } from 'fflate'
function compress(data: string) {
  const buffer = strToU8(data)
  const zipped = zlibSync(buffer, { level: 9 })
  const binary = strFromU8(zipped, true)
  return btoa(binary)
}

Contributing

To contribute to the project, see Contribution Guide.

Credits

This project references and is inspired by fkling/astexplorer, an open-source web tool for exploring the ASTs generated by various parsers.

Also, thanks to the following projects for their contributions:

Sponsors



Vercel OSS Program

License

AGPL-3.0 License © 2023-PRESENT 三咲智子

Explorer des projets similaires