open-index/open-npm huggingface dataset:
npm package: @mel.skywalker/tiny
Description: Removes all spaces from a string
Latest version: 2.0.0

# @mel.skywalker/tiny

[![npm (scoped)](https://img.shields.io/npm/v/@mel.skywalker/tiny.svg)](https://github.com/MelSkywalker/tiny)
[![npm bundle size (minified)](https://img.shields.io/bundlephobia/min/tiny.svg)](https://github.com/MelSkywalker/tiny)

Removes all spaces from a string

##Install
```
$npm install @mel.skywalker/tiny
```

##Usage
```js
const tiny = require("@mel.skywalker/tiny");
tiny("So much space!");
//=> "Somuchspace!"

tiny(1337);
tiny(1337);
//=> Uncaught TypeError: Tiny wants a string!
//    at tiny (<anonymous>:2:41)
//    at <anonymous>:1:1
```
npm package: @melacod/react-modal
Description: Basic React Modal
Author: melacod
Latest version: 1.0.2

# react-modal

> Basic React Modal

[![NPM](https://img.shields.io/npm/v/react-modal.svg)](https://www.npmjs.com/package/react-modal) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

## Install

```bash
npm install --save @melacod/react-modal
```

## Usage

```jsx
import React, { useState } from 'react'
import Modal from '@melacod/react-modal'

const BasicExample = () => {

  const [showModal, setShowModal] = useState(false)
  const hideModal = () => showModal && setShowModal(false)

  return (
    <button onClick={() => setShowModal(true)}>
      Basic modal
    </button>

    <Modal show={showModal} onClickCloseBtn={hideModal} title='Basic modal'>
      <p>I am a basic modal</p>
    </Modal>
  )
}
```

## Advanced usage

```jsx
import React, { useState } from 'react'
import Modal from '@melacod/react-modal'

const CustomizeFooter = () => {
  return <p>My custom footer</p>
}

const CustomizeHeader = () => {
  return <p>My custom header</p>
}

const AdvancedExample = () => {

  const [showModal, setShowModal] = useState(false)
  const hideModal = () => showModal && setShowModal(false)

  return (
    <button onClick={() => setShowModal(true)}>
      Advanced modal
    </button>

    <Modal
      show={showModal}
      onClickCloseBtn={hideModal  }
      footer={<CustomizeFooter />}
      header={<CustomizeHeader />}
      backgroundColor='lightyellow'
      backdropBackgroundColor='rgba(255,165,0, 0.5)'
    >
      <p>I am an advanced modal</p>
    </Modal>
  )
}
```

## License

MIT © [melacod](https://github.com/melacod)
npm package: @melaka/ai
Description: AI provider adapters for Melaka
Latest version: 0.1.0

# @melaka/ai

AI provider adapters for Melaka - AI-powered Firestore localization.

## Installation

```bash
pnpm add @melaka/ai
```

## Usage

```typescript
import { createTranslationFacade } from '@melaka/ai';
import { z } from 'zod';

const facade = createTranslationFacade({
  provider: 'gemini',
  model: 'gemini-2.5-flash',
  apiKey: process.env.GEMINI_API_KEY,
});

const result = await facade.translate(
  { title: 'Hello World', body: 'Welcome to our app' },
  z.object({ title: z.string(), body: z.string() }),
  { targetLanguage: 'ms-MY' }
);

if (result.success) {
  console.log(result.output);
  // { title: 'Hello Dunia', body: 'Selamat datang ke aplikasi kami' }
}
```

## Supported Providers

- **Gemini** (Google) - `gemini-2.5-flash`, `gemini-2.5-pro`
- **OpenAI** - `gpt-4o`, `gpt-4o-mini` (Phase 2)
- **Claude** (Anthropic) - `claude-sonnet-4-20250514` (Phase 2)

## Documentation

See the [main Melaka documentation](https://github.com/rizahassan/melaka).
npm package: @melaka/cli
Description: CLI for Melaka - AI-powered Firestore localization
Latest version: 0.1.0

# @melaka/cli

Command-line interface for Melaka - AI-powered Firestore localization.

## Installation

```bash
npm install -g @melaka/cli
# or
pnpm add -g @melaka/cli
```

## Commands

### `melaka init`

Initialize Melaka in your Firebase project.

```bash
cd your-firebase-project
melaka init
```

Creates `melaka.config.ts` with a starter configuration.

### `melaka deploy`

Generate and deploy Melaka Cloud Functions.

```bash
melaka deploy
```

Options:
- `-o, --output <dir>` — Output directory (default: `functions/src/melaka`)
- `--no-firebase` — Generate only, skip deployment
- `--dry-run` — Show what would be generated

### `melaka translate`

Manually trigger translation for collections.

```bash
melaka translate
melaka translate --collection products
melaka translate --collection products --language ms-MY
melaka translate --force
```

### `melaka status`

Check translation status and configuration.

```bash
melaka status
melaka status --collection products
melaka status --json
```

### `melaka validate`

Validate your `melaka.config.ts`.

```bash
melaka validate
```

## Documentation

See the [main Melaka documentation](https://github.com/rizahassan/melaka).
npm package: @melaka/core
Description: Core types and utilities for Melaka
Latest version: 0.1.0

# @melaka/core

Core types, utilities, and configuration for Melaka.

## Installation

```bash
npm install @melaka/core
```

## Usage

### Define Configuration

```typescript
import { defineConfig } from '@melaka/core';

export default defineConfig({
  languages: ['ms-MY', 'zh-CN'],
  ai: {
    provider: 'gemini',
    model: 'gemini-2.5-flash',
  },
  collections: [
    {
      path: 'articles',
      fields: ['title', 'content'],
    },
  ],
});
```

### Types

```typescript
import type {
  MelakaConfig,
  CollectionConfig,
  FieldMapping,
  TranslationResult,
} from '@melaka/core';
```

## API Reference

See [types.ts](./src/types.ts) for full type definitions.
npm package: @melaka/firestore
Description: Firestore adapter and triggers for Melaka
Latest version: 0.1.0

# @melaka/firestore

Firestore adapter and triggers for Melaka - AI-powered Firestore localization.

## Installation

```bash
pnpm add @melaka/firestore
```

## Usage

### i18n Operations

```typescript
import { readTranslation, writeTranslation, getI18nRef } from '@melaka/firestore';

// Read a translation
const translation = await readTranslation(docRef, 'ms-MY');

// Write a translation
await writeTranslation(docRef, 'ms-MY', translatedContent, nonTranslatable, metadata);

// Check if translation is current
const isCurrent = await isTranslationCurrent(docRef, 'ms-MY', sourceHash);
```

### Translation Processing

```typescript
import { processTranslation } from '@melaka/firestore';

const result = await processTranslation(
  docRef,
  docData,
  'ms-MY',
  config,
  collectionConfig
);

if (result.success) {
  console.log('Translation completed!');
}
```

### Code Generation

```typescript
import { generateTriggers } from '@melaka/firestore';

const files = generateTriggers(config, {
  outputDir: 'functions/src/melaka',
});

// files contains triggers.ts, task-handler.ts, index.ts
```

## Documentation

See the [main Melaka documentation](https://github.com/rizahassan/melaka).
npm package: @melaodoidao/datagov-mcp-server
Description: An MCP server for accessing data from Data.gov, providing tools and resources for interacting with government datasets.
Author: Joao Bondan
Latest version: 0.1.1

# Data.gov MCP Server

An MCP server for accessing data from Data.gov, providing tools and resources for interacting with government datasets.

## Installation

1.  **Install the package globally:**

    ```bash
    npm install -g @melaodoidao/datagov-mcp-server
    ```

2. **Configure the MCP Server:**

   - Add the following entry to your `cline_mcp_settings.json` file (usually located in `~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/` on macOS):

     ```json
      {
        "mcpServers": {
          "datagov": {
            "command": "datagov-mcp-server",
            "args": [],
            "env": {}
          }
        }
      }
     ```
    - If you are using the Claude Desktop app, add the entry to `~/Library/Application Support/Claude/claude_desktop_config.json` instead.

## Usage

This server provides the following tools:

*   `package_search`: Search for packages (datasets) on Data.gov.
*   `package_show`: Get details for a specific package (dataset).
*   `group_list`: List groups on Data.gov.
*   `tag_list`: List tags on Data.gov.

It also provides the following resource template:

*   `datagov://resource/{url}`: Access a Data.gov resource by its URL.

You can use these tools and resources with Cline by specifying the server name (`datagov-mcp-server`) and the tool/resource name.

## Contributing

Contributions are welcome! Please feel free to submit issues or pull requests.

## License

MIT License
npm package: @melb2991/electron-railbridge
Description: A thin wrapper around ipcMain and ipcRenderer that's a little more ergonomic and type safe.
Latest version: 2.0.0

# Readme

A thin wrapper around ipcMain and ipcRenderer that's a little more ergonomic and type safe.

## Usage

install:

`yarn install @melb2991/electron-railbridge`

preload.ts

```ts
import "@melb2991/electron-railbridge/preload";
```

api.ts

```ts
export const api = {
  hello: (name: string) => `Hello ${name}`,
  goodbye: async (name: string) => `Goodbye ${name}`,
};

export type Api = typeof api;
```

main.ts

```ts
import { app, BrowserWindow } from "electron";
import * as path from "path";
import { api } from "./api";
import { BridgeServer } from "@melb2991/electron-railbridge/server";

function createWindow() {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, "preload.js"),
    },
    width: 800,
  });

  // and load the index.html of the app.
  mainWindow.loadFile(path.join(__dirname, "../index.html"));

  // Open the DevTools.
  mainWindow.webContents.openDevTools();
}

app.on("ready", () => {
  BridgeServer({
    api,
  });

  createWindow();

  app.on("activate", function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

// ... other stuff
```

renderer/index.ts

```ts
import { BridgeClient } from "@melb2991/electron-railbridge/client";
import { Api } from "../api";

type BridgeType = {
  api: Api;
};

const bridgeClient = BridgeClient<BridgeType>();

async function callClient() {
  console.log(await bridgeClient.api.hello("Jim")); // Hello Jim
  console.log(await bridgeClient.api.goodbye("Bob")); // Goodbye Bob
}

callClient();
```
npm package: @melb2991/jquery-puppeteer
Description: Provides a proxy for a puppeteer `page` object, that will add jQuery on each call to `goto` and expose `page.evalJquery` method which gives you $. Also ensures that there is no conflict with any other jQuery on the page by calling noConflict and assigning
Latest version: 1.2.0

# Jquery Puppeteer
Provides a proxy for a puppeteer `page` object, that will add jQuery on each call to `goto` and expose `page.evalJquery` method which gives you $.
Also ensures that there is no conflict with any other jQuery on the page by calling noConflict and assigning to `window[<random hash>]` so as not to interfere with any other functionality in the page. 

## Usage
Install with `yarn add @melb2991/jquery-puppeteer` or `npm install @melb2991/jquery-puppeteer --save`

```javascript
    const puppeteer = require('puppeteer');
    const JQueryPuppeteer = require('@melb2991/jquery-puppeteer');

    const jqueryPuppeteer = new JQueryPuppeteer({
      noConflict: false, // defaults to true
      jQueryPath: '/my/special/path/jquery.js' // defaults to looking up jquery in node_modules with require.resolve
    });

    browser = await puppeteer.launch({
        headless: false
    });

    // Returns a proxy to page object, so all methods are 
    // the same as the original page object except for the addition of "evalJQuery()"
    const page = jqueryPuppeteer.getPageProxy(await browser.newPage());

    await page.goto('http://localhost:3030/demo.html');

    const selector = 'h1';
  
    const handle = await page.evalJQuery(($, selector) => {
      const h = $(selector).text();
      return h;
    }, selector); // pass in arguments

    const result = await handle.jsonValue();
```

## Caveats
- jQuery is added to the page on each call to goto(). If you are connecting to chrome remotely the script will be sent over the wire each time which is a significant overhead - in this case you would be better off using jquery hosted on a CDN, unfortunately jquery puppeteer doesn't support a remote script path - it should be easy to implement so would welcome a PR for it ;) - I just haven't had time yet.

- If using babel or typescript and targetting ES5 anonymous functions will end up being stringified to `function() {}`. Chrome does not allow unnamed
anonymous functions that are not assigned to a variable so it will fall over.
npm package: @melb2991/puggen
Description: Simple helper for generating static files with pug
Latest version: 0.0.5

# Puggen

## Usage
```ecmascript 6
const generator = Generator({
  templatesDir: path.join(__dirname, 'templates'),
  outputDir: path.join(__dirname, 'static'),
  clean: true
});

generator((templates, generate) => {
  const link = generate({
    template: templates['index'],
    path: `index`,
    params: {
      title: 'Hello!'
    }
  });
});

```
npm package: @melborp/three-viewer-wc
Description: Web Component 3D universal basado en Three.js
Author: Tu Nombre
Latest version: 1.0.0

# `<three-viewer>` Web Component

Un visor 3D avanzado basado en Three.js, listo para usar en cualquier framework moderno (React, Vue, Svelte, Angular, HTML puro) como un Web Component universal.

---

## 🚀 Instalación y uso

### 1. Copia los archivos necesarios
- `three-viewer.js`
- `ThreeJSApp.js`
- `load_objects.js`
- Modelos y texturas en `public/models/`

O instala desde npm si lo publicaste:
```bash
npm install three-viewer-wc
```

### 2. Importa el Web Component

#### **En React, Vue, Svelte, Angular, HTML**
```js
import './three-viewer.js'; // O el path/nombre de tu paquete
```

---

## 🧩 Uso en cada framework

### **React**
```jsx
import React, { useRef, useEffect } from 'react';
import './three-viewer.js';

function App() {
  const viewerRef = useRef(null);
  useEffect(() => {
    const api = viewerRef.current?.getAPI?.();
    if (api) api.toggleAnimation(true);
  }, []);
  return (
    <three-viewer ref={viewerRef} object="Reloj" style={{ width: 600, height: 400 }}></three-viewer>
  );
}
```

### **Vue**
```vue
<template>
  <three-viewer ref="viewer" object="Reloj" style="width:600px;height:400px" />
</template>
<script setup>
import './three-viewer.js';
import { onMounted, ref } from 'vue';
const viewer = ref(null);
onMounted(() => {
  const api = viewer.value?.getAPI?.();
  if (api) api.toggleAnimation(true);
});
</script>
```

### **Svelte**
```svelte
<script>
  import './three-viewer.js';
  let viewer;
  onMount(() => {
    const api = viewer?.getAPI?.();
    if (api) api.toggleAnimation(true);
  });
</script>
<three-viewer bind:this={viewer} object="Reloj" style="width:600px;height:400px"></three-viewer>
```

### **Angular**
```typescript
// En tu componente
import './three-viewer.js';
// ...
```
```html
<three-viewer #viewer object="Reloj" style="width:600px;height:400px"></three-viewer>
<button (click)="viewer.getAPI().toggleAnimation(true)">Animación ON</button>
```

### **HTML puro**
```html
<script type="module" src="./three-viewer.js"></script>
<three-viewer object="Reloj" style="width:600px;height:400px"></three-viewer>
```

---

## 🛠️ API pública
Accede a la API desde JS/TS:
```js
const el = document.querySelector('three-viewer');
const api = el.getAPI();
api.toggleAnimation(true);
api.toggleBloom(true);
el.setObject('Calendario');
```

---

## 📦 Requisitos de assets
- Los modelos `.glb` y texturas deben estar en `/public/models/` o la ruta configurada en `load_objects.js`.
- Si usas Vite, Next.js, etc., ponlos en la carpeta `public/models/`.

---

## 📝 Notas
- Los atributos del custom element deben ir en minúsculas (`object="Reloj"`).
- Puedes usar la API pública para controlar animación, efectos, luces, fondo, etc.
- Compatible con cualquier framework moderno.

---

¿Dudas? ¿Quieres exponer más métodos o eventos personalizados? ¡Abre un issue o pregunta!
npm package: @melbourneandrew/agent-memory-cli
Description: Agent Memory: CLI, shared runtime, and local web UI for Backboard.
Latest version: 0.1.1

# Agent Memory

**Remember things for your AI assistant** — save notes, search them later, and keep context across sessions. Works from the terminal or in your browser, backed by [Backboard](https://backboard.io).

```bash
npm install -g @melbourneandrew/agent-memory-cli
```

[![npm](https://img.shields.io/npm/v/@melbourneandrew%2Fagent-memory-cli?style=flat-square&logo=npm)](https://www.npmjs.com/package/@melbourneandrew/agent-memory-cli)
[![License](https://img.shields.io/badge/license-MIT-555?style=flat-square)](https://opensource.org/licenses/MIT)
[![Node](https://img.shields.io/node/v/@melbourneandrew%2Fagent-memory-cli?style=flat-square&logo=nodedotjs&label=Node)](https://nodejs.org/)
[![Docs](https://img.shields.io/badge/docs-GitHub%20Pages-222?style=flat-square&logo=github)](https://melbourneandrew.github.io/agent-memory/)
[![CI](https://img.shields.io/github/actions/workflow/status/Melbourneandrew/agent-memory/pr-validation.yml?branch=main&style=flat-square&logo=github&label=CI)](https://github.com/Melbourneandrew/agent-memory/actions)

---

### A few things you can do

After you [install the CLI](https://melbourneandrew.github.io/agent-memory/installation/) and connect your account:

```bash
agent-memory add "User likes bullet lists and morning standups."
agent-memory search "standups"
agent-memory list
```

Open the local browser UI anytime:

```bash
agent-memory web
```

### Learn more

- [**Documentation**](https://melbourneandrew.github.io/agent-memory/) — install, configure, and command reference
- [**Contributing**](CONTRIBUTING.md) — run the project locally and submit changes

MIT License · Questions welcome in [GitHub issues](https://github.com/Melbourneandrew/agent-memory/issues).
npm package: @melbyiia/lowcoder-comp-my-plugin
Description: ## Start
Latest version: 0.0.2

# lowcoder comp lib

## Start

Start dev server to develop your comp lib.

```bash
yarn start

# or

npm start
```

## Build

Build current comp lib into a .tgz file that you can upload it to the Lowcoder Comp Market.

Before build you should change the version in package.json file.

```bash
yarn build

# or

npm run build
```

## Publish
To publish your plugin on NPM, use following command.
```bash
yarn build_publish

# or

npm run build_publish
```
npm package: @melchor629/eslint-config
Description: Personal eslint configuration for own projects.
Author: melchor629
Latest version: 0.3.3

# @melchor629/eslint-config

My personal [ESLint](https://eslint.org/) config, which includes [neostandard](https://github.com/neostandard/neostandard) base config, recommended [ESLint](https://eslint.org/docs/latest/rules/) rules, personal rules for [import](https://github.com/import-js/eslint-plugin-import?tab=readme-ov-file#rules) rules, recommended [typescript](https://typescript-eslint.io/users/configs#recommended-configurations) rules and react rules.

The goal of this project is to be used across all my projects, but anyone could potentially use it if desired. The rule selection are my own preference.

## Install

Just install:

```sh
npm install -D eslint@^9 @melchor629/eslint-config
```

## Usage

Add an `eslint.config.js` in your project and configure:

```js
import melchor629 from '@melchor629/eslint-config'

export default melchor629()
```

If your project has TypeScript, it is recommended to enable the rules:

```js
import melchor629 from '@melchor629/eslint-config'

export default melchor629({
  // enables ts support
  ts: true,
  // enables special rules that uses ts
  dirname: import.meta.dirname,
})
```

It is also recommended to select the `moduleResolution` setting according to your needs if encounter issues with certain rules.

You can also provide your own rules or custom extensions:

```js
import melchor629 from '@melchor629/eslint-config'

export default [
  ...melchor629(),
  {
    // Custom ESLint config...
  },
]
```
npm package: @melchyore/adonisjs-api-query
Description: Easily build Lucid queries from API requests
Author: Benhamed Oussama
Latest version: 1.2.1

# @melchyore/adonisjs-api-query

This project is a fork of EienJS, modified and maintained by Melchyore.

[![Source Code][badge-source]][source]
[![Npm Node Version Support][badge-node-version]][node-version]
[![Latest Version][badge-release]][release]
[![Software License][badge-license]][license]
[![Build Status][badge-build]][build]
[![Total Downloads][badge-downloads]][downloads]

> Easily build Lucid queries from API requests

## Introduction

This package provides a set of macros on `ModelQueryBuilder` to build [Lucid](https://adonisjs.com/docs/lucid) queries from API requests. Inspired by [Spatie's Laravel Query Builder](https://github.com/spatie/laravel-query-builder).

## Contributing

Contributions are welcome. Please read [CONTRIBUTING][] for more details and remember to check the [CHANGELOG][] file.

## Copyright and License

The `@melchyore/adonisjs-api-query` library is licensed for use under the MIT License (MIT). Please see [LICENSE][] for more information.

[contributing]: https://github.com/melchyore/.github/blob/main/docs/CONTRIBUTING.md
[changelog]: https://github.com/melchyore/adonisjs-api-query/blob/main/CHANGELOG.md
[source]: https://github.com/melchyore/adonisjs-api-query
[node-version]: https://www.npmjs.com/package/@melchyore/adonisjs-api-query
[release]: https://www.npmjs.com/package/@melchyore/adonisjs-api-query
[license]: https://github.com/melchyore/adonisjs-api-query/blob/main/LICENSE.md
[build]: https://github.com/melchyore/adonisjs-api-query/actions/workflows/build.yml?query=branch:main
[downloads]: https://www.npmjs.com/package/@melchyore/adonisjs-api-query
[badge-source]: https://img.shields.io/badge/source-melchyore/adonisjs--api--query-blue.svg?logo=github
[badge-node-version]: https://img.shields.io/node/v/@melchyore/adonisjs-api-query.svg?logo=nodedotjs
[badge-release]: https://img.shields.io/npm/v/@melchyore/adonisjs-api-query.svg?logo=npm
[badge-license]: https://img.shields.io/github/license/melchyore/adonisjs-api-query?logo=open-source-initiative
[badge-build]: https://img.shields.io/github/actions/workflow/status/melchyore/adonisjs-api-query/build.yml?branch=main
[badge-downloads]: https://img.shields.io/npm/dm/@melchyore/adonisjs-api-query.svg?logo=npm
npm package: @meld-labs/cardano-serialization-lib-browser
Description: (De)serialization functions for the Cardano blockchain along with related utility functions
Author: EMURGO
Latest version: 10.2.1-beta.1

# Cardano Serialization Lib

This is a library, written in Rust, for serialization & deserialization of data structures used in Cardano's Haskell implementation of Alonzo along with useful utility functions.

##### NPM packages

- [NodeJS WASM package](https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs)
- [Browser (chrome/firefox) WASM package](https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser)
- [Browser (pure JS - no WASM) ASM.js package](https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-asmjs)

##### Rust crates

- [cardano-serialization-lib](https://crates.io/crates/cardano-serialization-lib)

##### Mobile bindings

- [React-Native mobile bindings](https://github.com/Emurgo/react-native-haskell-shelley)

## Documentation

You can find documentation [here](https://docs.cardano.org/cardano-components/cardano-serialization-lib)
npm package: @meldcx/glow-icons
Description: Icons for Glow framework
Author: Tristan Matthias
Latest version: 1.2.0

# meldCX Glow Icons

Icon sets for meldCX applications.

## Getting Started

All of the icons are located in one of the top-level `icons*` directories.
Adding, removing or changing an icon in a sheet is as simple as adding,
removing or changing the corresponding file in the relevant icon set directory.

Once a change has been made, the icon will need to be normalised, and the
corresponding icon sheet will need to be regenerated. Read below for more info.

### Setup

Before you can normalise icons or regenerate icon sheeets, you will need to
install dependencies in the standard fashion. This also requires a specific version of node.

```sh
nvm use
yarn
```

### Run

Once dependencies have been installed, the simplest way to normalise and regenerate is to simply run:

```sh
yarn build
```

Alternatively, you can just normalise or build as independent processes too:

```sh
# to normalise all icons
node scripts/normalise.js

# to rebuild icon sheets
yarn webpack
```
npm package: @meldron/jwt-helper
Description: JWT helper function for demoing purposes only
Latest version: 0.1.0

<div align="center">

  <h1><code>wasm-pack-template</code></h1>

  <strong>A template for kick starting a Rust and WebAssembly project using <a href="https://github.com/rustwasm/wasm-pack">wasm-pack</a>.</strong>

  <p>
    <a href="https://travis-ci.org/rustwasm/wasm-pack-template"><img src="https://img.shields.io/travis/rustwasm/wasm-pack-template.svg?style=flat-square" alt="Build Status" /></a>
  </p>

  <h3>
    <a href="https://rustwasm.github.io/docs/wasm-pack/tutorials/npm-browser-packages/index.html">Tutorial</a>
    <span> | </span>
    <a href="https://discordapp.com/channels/442252698964721669/443151097398296587">Chat</a>
  </h3>

  <sub>Built with 🦀🕸 by <a href="https://rustwasm.github.io/">The Rust and WebAssembly Working Group</a></sub>
</div>

## About

[**📚 Read this template tutorial! 📚**][template-docs]

This template is designed for compiling Rust libraries into WebAssembly and
publishing the resulting package to NPM.

Be sure to check out [other `wasm-pack` tutorials online][tutorials] for other
templates and usages of `wasm-pack`.

[tutorials]: https://rustwasm.github.io/docs/wasm-pack/tutorials/index.html
[template-docs]: https://rustwasm.github.io/docs/wasm-pack/tutorials/npm-browser-packages/index.html

## 🚴 Usage

### 🐑 Use `cargo generate` to Clone this Template

[Learn more about `cargo generate` here.](https://github.com/ashleygwilliams/cargo-generate)

```
cargo generate --git https://github.com/rustwasm/wasm-pack-template.git --name my-project
cd my-project
```

### 🛠️ Build with `wasm-pack build`

```
wasm-pack build
```

### 🔬 Test in Headless Browsers with `wasm-pack test`

```
wasm-pack test --headless --firefox
```

### 🎁 Publish to NPM with `wasm-pack publish`

```
wasm-pack publish
```

## 🔋 Batteries Included

* [`wasm-bindgen`](https://github.com/rustwasm/wasm-bindgen) for communicating
  between WebAssembly and JavaScript.
* [`console_error_panic_hook`](https://github.com/rustwasm/console_error_panic_hook)
  for logging panic messages to the developer console.
* [`wee_alloc`](https://github.com/rustwasm/wee_alloc), an allocator optimized
  for small code size.
* `LICENSE-APACHE` and `LICENSE-MIT`: most Rust projects are licensed this way, so these are included for you

## License

Licensed under either of

* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)

at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally
submitted for inclusion in the work by you, as defined in the Apache-2.0
license, shall be dual licensed as above, without any additional terms or
conditions.