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

mommyscript

v1.0.1

Published

A meme programming language with mommy/ASMR-flavored syntax πŸ’•

Readme

MommyScript πŸ’•

A meme programming language for good boys and good girls everywhere~

npm version license made with love

"Shhh... mommy will handle the compilation, darling~"


What is MommyScript?

MommyScript is a transpiled meme programming language that takes your cozy .mommy files and turns them into JavaScript. Every keyword is replaced with mommy/ASMR-inspired terms, type errors are whispered softly, and the entire Node.js ecosystem is available because mommy loves you too much to start from scratch.

Installation

npm install -g mommyscript

Or clone + link for development:

git clone https://github.com/radjashiqnals/mommyscript
cd mommyscript
npm link

πŸŽ€ VS Code Extension

For the best experience, install the official MommyScript VS Code Extension. It includes:

  • Syntax highlighting
  • Cute snippets (tgb -> task for my good boy)
  • Auto-closing brackets and strings
  • The shhh... comment toggle

Quick Start

Create a file called hello.mommy:

shhh... my first MommyScript program πŸ’•

remember darling name = "World";

task for my good boy greet() {
    whisper("Hello, " + name + "~ πŸ’•");
}

greet();

Run it:

mommy run hello.mommy
# Hello, World~ πŸ’•

CLI Commands

| Command | What it does | |---|---| | mommy run <file.mommy> | Transpile and execute | | mommy check <file.mommy> | Soft type-check only | | mommy peek <file.mommy> | Show generated JavaScript | | mommy version | Version + ASCII art | | mommy help | Usage info |


Language Reference

Variables

let mommy hold x = 42;
remember darling PI = 3.14159;

Type Annotations (optional, soft)

let mommy hold name: sweetheart = "Alice";
remember darling count: number = 10;
let mommy hold flag: goodbool = yes mommy;
let mommy hold anything: anything = "whatever~";

Types: sweetheart (string) Β· number Β· goodbool (boolean) Β· anything (escape hatch)

Type mismatches are whispered as warnings, not hard errors β€” mommy is gentle πŸ’•

Functions

task for my good boy greet(name) {
    whisper("Hello, " + name + "~");
}

task for my good girl add(a, b) {
    come here a + b;
}

Both task for my good boy and task for my good girl compile to function. Use whichever feels right! πŸ’•

Booleans & Null

let mommy hold isHappy = yes mommy;
let mommy hold isSad   = no mommy;
let mommy hold mystery = no darling;

Conditionals

if mommy says (score > 90) {
    whisper("Amazing, darling~ ✨");
} or maybe (score > 60) {
    whisper("Good job! Keep going~ πŸ’ͺ");
} otherwise {
    whisper("It's okay sweetheart, we'll study together πŸ₯Ί");
}

Loops

shhh... while loop
let mommy hold i = 0;
cuddle (i < 5) {
    whisper("cuddle #" + i);
    i = i + 1;
}

shhh... for loop
for every good boy (let j = 0; j < 3; j++) {
    whisper("step", j);
}

Arrays (toybox)

let mommy hold treats = toybox["cookie", "milk", "hug"];
whisper(count(treats));          // 3
cuddleUp(treats, "bedtime story");
whisper(treats[0]);              // cookie

Classes (OOP)

snuggle Animal {
    task for my good boy constructor(name) {
        this.name = name;
    }
    task for my good boy speak() {
        whisper(this.name + " says hello~");
    }
}

snuggle Dog raised by Animal {
    task for my good boy constructor(name) {
        super(name);
    }
    task for my good boy speak() {
        whisper(this.name + " says: woof! 🐢");
    }
}

let mommy hold d = adopt new Dog("Biscuit");
d.speak();

Async / Await

task for my good girl fetchData() {
    promise mommy task for my good boy load() {
        let mommy hold data = wait for mommy someAsyncThing();
        come here data;
    }
    come here load();
}

Comments

shhh... this is a single-line comment

/* sweet dreams
   this is a
   multi-line comment
wake up */

Error Handling

task for my good boy riskyBusiness() {
    try {
        oopsie adopt new Error("oops!");
    } mommy catches (err) {
        whisper("mommy caught it:", err.message);
    }
}

Standard Library

| Function | Equivalent | Description | |---|---|---| | whisper(...args) | console.log | Soft output~ | | scream(...args) | console.error | Mommy is upset 😀 | | smooch(n) | Math.abs(n) | A kiss makes negatives better | | count(arr) | arr.length | Count your blessings | | cuddleUp(arr, item) | arr.push(item) | Add to your toybox | | nap(fn, ms) | setTimeout(fn, ms) | Mommy puts you to sleep | | snuggleSort(arr, fn) | [...arr].sort(fn) | Sort with love | | peek(arr, i) | arr[i] (supports negative) | Peek at an item | | isEmpty(val) | checks empty | Is it empty, darling? |


Error Messages

MommyScript catches all Node.js runtime errors and rewraps them in soft mommy messaging:

πŸ’• Oh darling, I think you mixed up your types~
   [dim: TypeError message]

πŸ₯Ί Sweetie, I can't find "foo" anywhere... did you forget to tell mommy?
   [dim: ReferenceError message]

✨ Hmm, mommy doesn't understand what you wrote here, let's fix it together~
   [dim: SyntaxError message]

😳 Baby, that number is way too big for mommy to handle...
   [dim: RangeError message]

The String Trap (technical note)

MommyScript uses a segment-based transpiler rather than naive regex replacement. Source is first split into code segments and non-code segments (string literals + comments). Keyword substitution only runs on code segments, so this works perfectly:

whisper("I promise mommy I will behave!");
// β†’ console.log("I promise mommy I will behave!");
// NOT: console.log("I async I will behave!");  ← string trap avoided!

Examples

See the examples/ directory:


Contributing

Mommy welcomes all contributions, darling~ πŸ’•

  1. Fork the repo
  2. Create your branch: git checkout -b feat/my-little-feature
  3. Write your changes with love
  4. Make sure mommy run examples/hello.mommy still works
  5. Open a PR and mommy will review it gently~

Please keep the meme energy high and the tone soft. No hard errors, only whispered warnings πŸ₯Ί


Known Issues & Limitations

This is a meme project. Some things are broken on purpose. Some things are broken by accident. Mommy is sorry either way πŸ₯Ί

| Issue | Status | Notes | |---|---|---| | Nested class bodies | ⚠️ Partial | snuggle inside snuggle (nested classes) may incorrectly strip function from the wrong context. Mommy's depth tracker is simple. | | Template literal substitution | βœ… Fixed | In version >= 1.0.1, keywords inside <backtick>${expr}</backtick> template literals are correctly processed. | | mommy catches without try | ❌ Will error | mommy catches must always follow a native try {. Mommy doesn't add the try for you. | | bring friends / share with world | ⚠️ Partial | ES module import/export syntax works in the transpiled output, but node --eval runs in CommonJS mode, so browser/ESM imports may not resolve. Use require() style interop for now. | | Arrow functions | ℹ️ Not sugared | Arrow functions (=>) have no MommyScript keyword. Just use raw => β€” mommy approves of concise syntax darling~ | | Line numbers in errors | ⚠️ Approximate | Error line numbers are estimated by subtracting the stdlib prelude line count (~55 lines). Off-by-a-few is expected. | | No module system | ℹ️ Pending | You can't bring friends from another .mommy file yet. Cross-file imports targeting .mommy sources are not supported. | | Type checking is shallow | ℹ️ By design | The type checker only catches literal mismatches at declaration time. Dynamic type errors are caught at runtime with mommy error messages. |


Vibe Coded With Love πŸ’•

This project was 100% vibe coded β€” meaning the architecture, syntax design, implementation, and debugging were all done through AI pair programming sessions. No rubber duck was harmed.

Built using:

  • πŸ€– Claude Sonnet 4.6 (Thinking) β€” initial design, syntax bikeshedding, transpiler architecture
  • 🧠 Gemini Pro 3.1 (Thinking) β€” implementation, bug fixes (including the class method function keyword bug), and deployment

"The best programming languages are the ones that make you feel something. MommyScript makes you feel loved."

β€” probably someone on the internet


License

MIT β€” because mommy shares everything with her darlings πŸ’—