# wasm-emscripten

Скилл ведёт агента через сборку C и C++ в WebAssembly: подбор флагов emcc, экспорт функций, модель памяти, Asyncify и отладка .wasm.

- скилл · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 513 установок · ★ 267
- Автор: mohitmishra786
- Лицензия: MIT · policy=mirror · начало файла — в конце страницы
- Исходник: https://github.com/mohitmishra786/low-level-dev-skills/tree/HEAD/skills/runtimes/wasm-emscripten/SKILL.md
- Обновлён: 2026-06-27
- HTML: https://affpapa.org/nevibecode/skills/wasm-emscripten

## Что делает

Скилл описывает рабочий процесс от установки Emscripten SDK до отладки готового бинарника. Внутри — семь шагов: первая сборка, экспорт функций в JavaScript, модель линейной памяти, Asyncify для асинхронного C, оптимизация через wasm-opt, отладка в браузерных devtools и выбор между WASI и браузерной целью. Агент получает конкретные команды emcc с флагами, а не общие рассуждения.

Экспорт функций разобран подробно: `EMSCRIPTEN_KEEPALIVE` защищает функцию от удаления как мёртвого кода, а в `EXPORTED_FUNCTIONS` имя C-функции пишется с ведущим подчёркиванием. Для вызова из JS есть три пути — прямой `Module._add`, `ccall` с проверкой типов и `cwrap`, создающий обычную JS-функцию. Память настраивается через `INITIAL_MEMORY`, `MAXIMUM_MEMORY` и `ALLOW_MEMORY_GROWTH`.

Сборка требует HTTP, а не `file://` — локально файл открывается через `python3 -m http.server`. Asyncify работает лучше с оптимизацией, поэтому в примере стоит `-O2`. Для WASI-цели в скилле отмечено, что wasi-sdk даёт более полную поддержку, чем Emscripten.

## Установка

### Claude Code (родная платформа)

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill wasm-emscripten -a claude-code
```

2. **Вручную: положить файлы**
- Файл: `~/.claude/skills/wasm-emscripten/SKILL.md` — Папка скилла целиком; для одного проекта — .claude/skills/wasm-emscripten/

### Codex

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill wasm-emscripten -a codex
```

2. **Вручную: положить файлы**
- Файл: `.agents/skills/wasm-emscripten/SKILL.md` — Для всех проектов — ~/.agents/skills/

### Cursor

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill wasm-emscripten -a cursor
```

2. **Вручную: положить файлы**
- Файл: `.cursor/skills/wasm-emscripten/SKILL.md` — Cursor читает и .agents/skills/, и .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install mohitmishra786/low-level-dev-skills wasm-emscripten
```

2. **Вручную: положить файлы**
- Файл: `.github/skills/wasm-emscripten/SKILL.md`

### Gemini CLI

1. **Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill wasm-emscripten -a gemini-cli
```

2. **Командой платформы**
```bash
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/runtimes/wasm-emscripten
```

### Windsurf (Devin Desktop)

**Вручную: положить файлы**
- Файл: `.devin/skills/wasm-emscripten/SKILL.md` — Старый путь .windsurf/skills/ тоже читается

### OpenCode

**Через Skills CLI (Vercel)**
```bash
npx skills add mohitmishra786/low-level-dev-skills --skill wasm-emscripten -a opencode
```

### Claude.ai

**Claude.ai**
- Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills

Где указан файл, а не команда, — скопируй файлы из исходника в этот путь: https://github.com/mohitmishra786/low-level-dev-skills/tree/HEAD/skills/runtimes/wasm-emscripten/SKILL.md

## Когда брать
- собрать C-функцию в .wasm и вызвать её из JavaScript
- настроить экспорт функций без удаления их линкером
- разобраться, как читать и писать линейную память из JS
- сделать синхронный C-код асинхронным через Asyncify
- уменьшить размер .wasm постобработкой в wasm-opt

## Примеры запросов агенту
- Собери math.c в WebAssembly и экспортируй add и sqrt_approx
- Почему моя C-функция не видна из JavaScript после сборки emcc?
- Настрой Asyncify, чтобы fetch вызывался из синхронного C-кода

## Похожие
- [wasm-agent](https://affpapa.org/nevibecode/skills/wasm-agent.md) — скилл · 739 установок
- [wasm-compatibility](https://affpapa.org/nevibecode/skills/wasm-compatibility.md) — скилл · 3000 установок
- [wasm-gallery](https://affpapa.org/nevibecode/skills/wasm-gallery.md) — скилл · 741 установка
- [blazor](https://affpapa.org/nevibecode/skills/blazor.md) — скилл · 798 установок
- [troubleshooting-motoko-migrations](https://affpapa.org/nevibecode/skills/troubleshooting-motoko-migrations.md) — скилл · 4500 установок
- [m11-ecosystem](https://affpapa.org/nevibecode/skills/m11-ecosystem.md) — скилл · 3300 установок

Из того же набора: [mohitmishra786/low-level-dev-skills](https://affpapa.org/nevibecode/by/mohitmishra786/low-level-dev-skills.md) — 62 карточки

_Часть страницы не вошла по размеру — она есть в HTML-версии._

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
