Подробный разбор Ant — нового JavaScript runtime с собственноручно написанным движком на C. Никаких V8, JSC или SpiderMonkey — только C, NaN-boxed-значения и MIR JIT-бэкенд.
12 июля 2026 года пост на Show HN о Ant набрал 252 очка и 107 комментариев за 12 часов. Суть: JavaScript runtime с собственным движком — не обёртка над V8, JavaScriptCore или SpiderMonkey — который поставляется как единственный бинарник 8.6MB и холодно стартует за 5 миллисекунд. Для контекста: Node 26 весит 120MB. Bun — 60MB. Deno — 90MB.
Ant создан соло-разработчиком Mack (theMackabu). Проект начинался в январе 2026 года как эксперимент «построить JavaScript runtime за месяц» и вырос до 1759 коммитов на GitHub с 861 звездой. Движок, получивший название Ant Silver, написан преимущественно на C (74% кодовой базы). Он включает кастомный байткод-компилятор, JIT-бэкенд на базе MIR, представление значений через NaN-boxing и поколенческий сборщик мусора.
Ant интересен не только цифрами бенчмарков — это архитектурная ставка на то, что специализированный движок может конкурировать с десятилетиями оптимизаций V8 за счёт того, что он меньше, проще и нацелен на серверные сценарии. Это важно для serverless-вычислений, edge-развёртываний, встраиваемых систем и любых контекстов, где размер бинарника и скорость холодного старта являются жёсткими ограничениями.
Ant Silver — не обёртка. Это полноценный JavaScript-движок, реализованный на C с нуля. Вот чем он отличается от устоявшихся движков:
Согласно архитектурной документации проекта, Ant Silver спроектирован для «предсказуемой производительности на небольших масштабах» — в приоритете быстрый запуск и скромное потребление памяти, а не пиковая пропускная способность на многочасовых серверных процессах. Это осознанный компромисс, который имеет смысл для serverless и edge-сценариев.
Ant проходит 100% тестов compat-table — 1511 из 1511 тестов, охватывающих ES1–ESNext. Он также соответствует WinterTC (спецификация Ecma TC55 Minimum Common API для серверного JavaScript). Полное прохождение test262 составляет примерно 64%, что покрывает повседневный JavaScript, но может пропускать граничные случаи в продвинутых возможностях языка.
Опубликованные проектом цифры сравнивают импорт Hono, регистрацию двух роутов и выход — без запуска HTTP-сервера, чтобы изолировать время загрузки модулей и инициализации:
| Runtime | Размер бинарника | Холодный старт | Движок |
|---|---|---|---|
| Ant | ~8.6 MB | 5.4 ms | Ant Silver (C, кастомный) |
| Bun 1.3 | ~60 MB | 12.8 ms | JavaScriptCore (Apple) |
| Deno 2.8 | ~90 MB | 24.8 ms | V8 (Google) |
| Node 26 | ~120 MB | 31.1 ms | V8 (Google) |
Преимущество в холодном старте ощущается сразу при запуске скриптов. Ant холодно стартует в 6 раз быстрее Node для этой нагрузки. Разница в размере бинарника тоже драматична — Ant в 8.6MB помещается куда угодно, в то время как Node в 120MB в 14 раз больше. Для Docker-образов, CI-пайплайнов и serverless-развёртываний эта разница напрямую означает более быстрые пулы и меньшую стоимость хранения.
Однако бенчмарк намеренно не измеряет производительность долгоживущих процессов. На продолжительных нагрузках с горячим JIT глубоко оптимизированный конвейер V8 будет превосходить лёгкий JIT Ant. Цифры наиболее релевантны для короткоживущих процессов, таких как вызовы serverless-функций.
Установка Ant — одна команда. Никаких пакетных менеджеров, Homebrew tap или npm install:
curl -fsSL https://antjs.org/install | bash
Скрипт определяет вашу ОС (macOS или Linux на arm64/x86_64) и помещает единственный бинарник в систему. Проверьте установку:
$ ant --version
Ant 12.1.15dd25d.1
Нативной поддержки Windows пока нет (работает через WSL), но macOS и Linux поддерживаются полностью.
Ant запускает обычный JavaScript и TypeScript без какой-либо конфигурации. Вот простой HTTP-сервер через стандартную fetch-модель:
// server.js
const handler = (req) => {
const url = new URL(req.url);
const name = url.searchParams.get('name') || 'Мир';
return new Response(`Привет, ${name}! — от Ant`);
};
export default {
port: 3000,
fetch: handler
};
$ ant server.js
Listening on http://localhost:3000
$ curl http://localhost:3000/?name=Олег
Привет, Олег! — от Ant
TypeScript работает нативно — никаких tsconfig.json, бандлеров или папок dist:
// server.ts
import { Hono } from 'hono';
const app = new Hono();
app.get('/', (c) => c.text('Привет от Ant с TypeScript!'));
export default app;
$ ant server.ts
Listening on http://localhost:3000
Ant обрабатывает разрешение модулей, удаление типов и компиляцию прозрачно. Удаление типов использует кастомный быстрый путь, который экономит примерно 900KB размера бинарника по сравнению с использованием полного компилятора TypeScript.
Ant устанавливает пакеты через собственный реестр ants.land, который поддерживает протокол npm. Любой опубликованный там пакет также работает с npm, yarn, pnpm и bun.
$ ant i hono
installed hono@latest
1 package installed [155ms]
155 миллисекунд от нуля до рабочей установки Hono. Та же операция в npm занимает около 6 секунд на той же машине. Ant обещает ускорение до 40 раз, и для небольших и средних деревьев зависимостей разница действительно заметна.
Публикация пакетов работает аналогично:
$ ant land login
$ ant land publish
published @you/[email protected]
Hono работает с Ant без каких-либо адаптеров. Вот REST-подобное API с CORS, параметрами маршрутов и парсингом POST-тел:
import { Hono } from 'hono';
import { cors } from 'hono/cors';
const app = new Hono();
app.use('*', cors());
const todos = [
{ id: 1, title: 'Попробовать Ant', done: true },
{ id: 2, title: 'Написать туториал', done: true },
{ id: 3, title: 'Задеплоить что-нибудь', done: false },
];
app.get('/api/todos', (c) => c.json(todos));
app.get('/api/todos/:id', (c) => {
const todo = todos.find(t => t.id === Number(c.req.param('id')));
return todo
? c.json(todo)
: c.json({ error: 'Не найдено' }, 404);
});
app.post('/api/todos', async (c) => {
const body = await c.req.json();
const newTodo = { id: todos.length + 1, ...body };
todos.push(newTodo);
return c.json(newTodo, 201);
});
export default app;
$ ant todos.ts
Listening on http://localhost:3000
Никакого слоя адаптации, никаких конфигурационных файлов — просто пишите код на Hono и запускайте. Модель экспорта fetch по умолчанию означает, что любой фреймворк, использующий стандартный серверный паттерн на fetch, работает без модификаций.
Ни Node.js, ни Bun не поставляют встроенную песочницу для запуска недоверенного кода. Ant — да, и она аппаратно изолирована с использованием KVM (Linux) или Hypervisor.framework (macOS):
import { Sandbox } from 'ant:sandbox';
const box = new Sandbox({
mount: '.:/workspace', // монтирование только для чтения по умолчанию
});
await box.run('untrusted.js');
await box.close();
Свойства безопасности песочницы:
Это важно для serverless-платформ, инструментов оценки кода, плагинных систем и любых сценариев, где сторонний код выполняется рядом с вашим. Обеспечивает защиту на несколько уровней глубже, чем npm audit или диалоги разрешений.
Ландшафт JavaScript runtime в 2026 году разнообразнее, чем когда-либо. Вот как четыре runtime сравниваются по параметрам, важным для production-решений:
| Характеристика | Ant | Node 26 | Bun 1.3 | Deno 2.8 |
|---|---|---|---|---|
| Движок | Ant Silver (кастомный C) | V8 | JavaScriptCore | V8 |
| Размер бинарника | ~8.6 MB | ~120 MB | ~60 MB | ~90 MB |
| Холодный старт (Hono) | ~5 ms | ~31 ms | ~13 ms | ~25 ms |
| Совместимость с npm | Да (частично N-API) | Да | Да | Через npm specifier |
| Нативный TypeScript | Да | Экспериментально | Да | Да |
| Встроенная песочница | VM-изолированная | Нет | Нет | Модель разрешений |
| test262 совместимость | ~64% | ~99% | ~98% | ~99% |
| Отладчик/Профилировщик | Нет | Да | Частично | Да |
| Поддержка Windows | Только WSL | Нативная | Нативная (бета) | Нативная |
| Лицензия | MIT | MIT | MIT | MIT |
Ant — впечатляющее техническое достижение, но это раннее программное обеспечение. Вот ограничения, о которых стоит знать:
Ограничения характерны для runtime, разрабатываемого одним человеком в течение 6 месяцев. Они не отменяют ценность проекта, но должны влиять на то, где и как вы его оцениваете.
Исходя из архитектуры и текущего состояния, Ant лучше всего подходит для:
Для контекста о том, как развивается ландшафт runtime, см. мой анализ порта Bun на Rust — там рассматривается другой подход к оптимизации runtime: портирование существующего движка с Zig на Rust для лучшей безопасности памяти, а не создание нового движка с нуля.
Если хотите попробовать Ant сегодня:
curl -fsSL https://antjs.org/install | bashecho 'console.log("hello from ant")' > test.jsant test.jsant i honoОфициальный сайт antjs.org содержит документацию, а GitHub-репозиторий — исходный код, примеры и скрипты для бенчмарков. Блог автора на themackabu.dev документирует развитие проекта от первоначального месячного спринта до текущей экосистемной концепции.
Ландшафт JavaScript runtime расширяется быстрее, чем когда-либо — от собственного движка Ant до порта Bun на Rust с помощью AI. Выбор правильного runtime для вашего проекта требует понимания компромиссов между производительностью, зрелостью экосистемы и эксплуатационными ограничениями.
Я — full-stack веб-разработчик с 20+ годами опыта создания production-приложений. Оцениваете ли вы Ant для serverless-проекта, мигрируете существующую кодовую базу или нуждаетесь в консультации по современной JavaScript-экосистеме — я готов помочь. Свяжитесь со мной для бесплатной первичной консультации.
Я также пишу технические статьи об инструментах и фреймворках, которые действительно важны — следите за моими статьями, чтобы быть в курсе последних событий в веб-разработке.
Нужен веб-разработчик, который разбирается в современной экосистеме? Расскажите о вашем проекте — я дам честную оценку и предварительную смету. Бесплатно.