<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[В Cloudflare переписали Next.js за неделю с помощью ИИ. результаты эксперимента - проект vinext]]></title><description><![CDATA[<p dir="auto">В феврале 2026 года техническое сообщество стало свидетелем события, которое может изменить представление о разработке программного обеспечения. Инженер Cloudflare Стив Фаулкер вместе с искусственным интеллектом Claude создал с нуля альтернативную реализацию самого популярного React-фреймворка Next.js всего за семь дней.</p>
<p dir="auto">Проект получил название <strong>vinext</strong> (произносится “ви-некст”) - это полная переработка Next.js на базе сборщика Vite, которая обеспечивает совместимость с 94% API Next.js 16. Результат превзошел все ожидания: скорость сборки приложений увеличилась до 4 раз, а размер клиентских пакетов сократился на 57%.</p>
<p dir="auto"><strong>Финансовые затраты составили всего $1100</strong> - именно столько было потрачено на API-токены Claude для более чем 800 сессий взаимодействия с ИИ. Для сравнения: традиционная разработка подобного проекта потребовала бы команду из нескольких инженеров и несколько месяцев или даже лет работы.</p>
<h2>Почему это важно для бизнеса и индустрии разработки</h2>
<h3>Проблема развертывания Next.js в serverless-среде</h3>
<p dir="auto">Next.js остается самым популярным фреймворком для React - миллионы разработчиков используют его для создания веб-приложений. Однако при развертывании вне платформы Vercel возникают серьезные проблемы. Next.js использует собственный инструмент Turbopack для сборки, и для запуска на Cloudflare, Netlify или AWS Lambda необходимо преобразовывать результат сборки в формат, совместимый с целевой платформой.</p>
<p dir="auto">Существующее решение OpenNext, созданное для решения этой проблемы, работает по принципу адаптации выходных данных Next.js. Это приводит к нестабильности: каждое обновление Next.js вызывает непредсказуемые изменения, требующие постоянной коррекции. Как отмечают в Cloudflare, это превращается в “игру в whack-a-mole” - постоянную борьбу с возникающими проблемами.</p>
<h3>Экономическая эффективность AI-разработки</h3>
<p dir="auto">Эксперимент vinext демонстрирует фундаментальное изменение экономики разработки программного обеспечения. Затраты в $1100 на создание полноценной альтернативы фреймворку, над которым годами работала команда Vercel, показывают, что <strong>стоимость создания ПО кардинально изменилась</strong> .</p>
<p dir="auto">Для бизнеса это означает:</p>
<ul>
<li><strong>Сокращение времени выхода на рынок</strong> - проекты, которые раньше требовали месяцев разработки, теперь могут быть реализованы за недели</li>
<li><strong>Снижение затрат на разработку</strong> - вместо команды из 5-10 инженеров достаточно одного специалиста с AI-ассистентом</li>
<li><strong>Возможность быстрой модернизации</strong> - устаревшие системы могут быть переписаны с минимальными затратами</li>
</ul>
<h3>Влияние на индустрию веб-разработки</h3>
<p dir="auto">Эксперимент Cloudflare показывает, что <strong>искусственный интеллект способен поддерживать целостность архитектуры</strong> в рамках больших кодовых баз. Модели последнего поколения могут “удерживать в контексте” полную архитектуру проекта, анализировать взаимодействие модулей и генерировать корректный код.</p>
<p dir="auto">Это меняет парадигму разработки: если раньше требовались многоуровневые абстракции и фреймворки для управления сложностью (потому что люди не могли удержать всю систему в голове), то ИИ может работать напрямую со спецификацией и базовыми инструментами.</p>
<h2>Технические характеристики vinext: как это работает</h2>
<h3>Архитектура на базе Vite</h3>
<p dir="auto">Vinext - это не обертка над Next.js, а <strong>альтернативная реализация API</strong> на базе Vite. Vite стал стандартом де-факто для современных веб-фреймворков, powering Astro, SvelteKit, Nuxt и Remix.</p>
<p dir="auto">Ключевые компоненты архитектуры:</p>
<p dir="auto"><strong>Система маршрутизации</strong></p>
<ul>
<li>Поддержка обоих роутеров: Pages Router и App Router</li>
<li>Файловая система маршрутизации с горячей перезагрузкой</li>
<li>Динамические маршруты <code>[param]</code>, catch-all <code>[...slug]</code>, опциональные <code>&lsqb;&lsqb;...slug&rsqb;&rsqb;</code></li>
<li>Группы маршрутов <code>(group)</code>, параллельные маршруты <code>@slot</code>, перехватывающие маршруты</li>
</ul>
<p dir="auto"><strong>Server-Side Rendering (SSR)</strong></p>
<ul>
<li>Для Pages Router: потоковая передача, поддержка <code>_app</code>/<code>_document</code>, гидратация</li>
<li>Для App Router: RSC (React Server Components) пайплайн, вложенные лейауты, потоковая передача</li>
<li>Поддержка всех методов получения данных: <code>getStaticProps</code>, <code>getStaticPaths</code>, <code>getServerSideProps</code></li>
</ul>
<p dir="auto"><strong>React Server Components</strong><br />
Vinext использует плагин <code>@vitejs/plugin-rsc</code> для поддержки RSC, что позволило реализовать полноценную работу с директивами <code>"use client"</code> и <code>"use server"</code> без создания собственной реализации с нуля.</p>
<h3>Совместимость с Next.js API</h3>
<p dir="auto">Проект обеспечивает <strong>94% покрытие API Next.js 16</strong>. Рассмотрим основные категории:</p>
<p dir="auto"><strong>Модули next/*</strong><br />
Все 33 модуля Next.js переписаны как Vite-совместимые shim-модули:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Модуль</th>
<th>Статус</th>
<th>Возможности</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>next/link</code></td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Полная</td>
<td>Prefetch, onNavigate, восстановление скролла, basePath, locale</td>
</tr>
<tr>
<td><code>next/image</code></td>
<td>🟡 Частичная</td>
<td>Remote images через @unpic/react (28 CDN), без build-time оптимизации</td>
</tr>
<tr>
<td><code>next/router</code> / <code>next/navigation</code></td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Полная</td>
<td>Все хуки, клиентская навигация, SSR контекст</td>
</tr>
<tr>
<td><code>next/server</code></td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Полная</td>
<td>NextRequest, NextResponse, cookies, userAgent, after</td>
</tr>
<tr>
<td><code>next/headers</code></td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Полная</td>
<td>Асинхронные headers(), cookies(), draftMode()</td>
</tr>
<tr>
<td><code>next/dynamic</code></td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Полная</td>
<td>ssr: true/false, loading компонент</td>
</tr>
<tr>
<td><code>next/font/google</code></td>
<td>🟡 Частичная</td>
<td>Runtime CDN загрузка, без self-hosting</td>
</tr>
<tr>
<td><code>next/cache</code></td>
<td><img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/2705.png?v=a1e94250dac" class="not-responsive emoji emoji-android emoji--white_check_mark" style="height:23px;width:auto;vertical-align:middle" title="✅" alt="✅" /> Полная</td>
<td>revalidateTag, revalidatePath, cacheHandler, “use cache”</td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Серверные функции</strong></p>
<ul>
<li>ISR (Incremental Static Regeneration) - работает из коробки</li>
<li>Server Actions (<code>"use server"</code>) - полная поддержка</li>
<li>Metadata API - metadata, generateMetadata, viewport</li>
<li>Middleware - поддержка middleware.ts и proxy.ts (Next.js 16)</li>
</ul>
<p dir="auto"><strong>Конфигурация</strong></p>
<ul>
<li>Полная поддержка <code>next.config.js</code>/.ts/.mjs</li>
<li>Rewrites, redirects, headers со всеми фазами</li>
<li>Переменные окружения (.env файлы) с правильным приоритетом загрузки</li>
</ul>
<h3>Что НЕ поддерживается (осознанные исключения)</h3>
<p dir="auto">Cloudflare четко обозначил, какие функции <strong>не будут реализованы</strong>:</p>
<ol>
<li><strong>Vercel-специфичные функции</strong> - @vercel/og edge runtime, Vercel Analytics, Vercel KV/Blob/Postgres bindings</li>
<li><strong>AMP</strong> - устарел с Next.js 13</li>
<li><strong>Конфигурация Turbopack/webpack</strong> - vinext работает на Vite</li>
<li><strong>next/jest</strong> - рекомендуется использовать Vitest</li>
<li><strong>Bug-for-bug parity</strong> с недокументированным поведением</li>
</ol>
<h2>Производительность: детальное сравнение с Next.js</h2>
<h3>Методология тестирования</h3>
<p dir="auto">Cloudflare опубликовал детальную методологию бенчмарков на <strong>benchmarks.vinext.workers.dev</strong> . Тестирование проводится на каждом merge в main через GitHub CI.</p>
<p dir="auto"><strong>Тестовое приложение</strong>: 33 маршрута App Router с server components, client components, динамическими роутами, вложенными layouts и API routes.</p>
<p dir="auto"><strong>Важный нюанс</strong>: для честного сравнения в Next.js отключена статическая пре-рендеризация (используется <code>export const dynamic = "force-dynamic"</code>), чтобы измерить именно скорость компиляции и бандлинга, а не разницу в подходах к рендерингу .</p>
<h3>Результаты бенчмарков</h3>
<p dir="auto"><strong>Время production-сборки:</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Фреймворк</th>
<th>Среднее время</th>
<th>Отношение к Next.js</th>
</tr>
</thead>
<tbody>
<tr>
<td>Next.js 16.1.6 (Turbopack)</td>
<td>7.38s</td>
<td>baseline</td>
</tr>
<tr>
<td>vinext (Vite 7 / Rollup)</td>
<td>4.64s</td>
<td><strong>1.6x быстрее</strong></td>
</tr>
<tr>
<td>vinext (Vite 8 / Rolldown)</td>
<td>1.67s</td>
<td><strong>4.4x быстрее</strong></td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Актуальные данные</strong> (на 2 марта 2026):</p>
<ul>
<li>Next.js 16 (Turbopack): 5.04s</li>
<li>vinext (Rolldown): 1.59s - <strong>в 3.2 раза быстрее</strong></li>
</ul>
<p dir="auto"><strong>Размер клиентских бандлов (gzip):</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Фреймворк</th>
<th>Размер</th>
<th>Отношение к Next.js</th>
</tr>
</thead>
<tbody>
<tr>
<td>Next.js 16.1.6</td>
<td>168.9 KB</td>
<td>baseline</td>
</tr>
<tr>
<td>vinext (Rollup)</td>
<td>74.0 KB</td>
<td><strong>56% меньше</strong></td>
</tr>
<tr>
<td>vinext (Rolldown)</td>
<td>72.9 KB</td>
<td><strong>57% меньше</strong></td>
</tr>
</tbody>
</table>
<p dir="auto"><strong>Холодный старт dev-сервера:</strong></p>
<ul>
<li>Next.js 16: 2.71s</li>
<li>vinext (Rollup): 1.85s - <strong>1.5x быстрее</strong></li>
<li>vinext (Rolldown): 1.89s - <strong>1.4x быстрее</strong></li>
</ul>
<p dir="auto"><strong>Потребление памяти (Peak RSS):</strong></p>
<ul>
<li>Next.js 16: 673 MB</li>
<li>vinext (Rollup): 444 MB</li>
<li>vinext (Rolldown): 548 MB</li>
</ul>
<h3>Почему vinext быстрее и легче</h3>
<p dir="auto">Анализ build output показывает два основных фактора различия в размере бандлов :</p>
<p dir="auto"><strong>1. Tree-shaking (удаление мертвого кода)</strong><br />
Vite/Rollup производит более агрессивную элиминацию мертвого кода. Bundle React+ReactDOM в vinext значительно меньше благодаря лучшему tree-shaking Rollup по сравнению с Turbopack. Это составляет примерно половину общей разницы в размере .</p>
<p dir="auto"><strong>2. Overhead фреймворка</strong><br />
Next.js включает больше клиентской инфраструктуры: роутер, runtime loader Turbopack, prefetching, обработка ошибок. Vinext имеет более легкий client runtime .</p>
<p dir="auto">Оба фреймворка поставляют одинаковый код приложения и одинаковый RSC client runtime (<code>react-server-dom-webpack</code>). Разница заключается в том, сколько внутренних компонентов React переживает tree-shaking и сколько framework plumbing добавляет каждый инструмент .</p>
<h3>Структурные преимущества архитектуры Vite</h3>
<p dir="auto">Vite 8 с Rolldown (Rust-based bundler) имеет <strong>структурные преимущества для производительности сборки</strong>, которые четко проявляются в бенчмарках :</p>
<ul>
<li><strong>Параллелизация</strong>: и Turbopack, и Rolldown распараллеливают работу по всем ядрам, но Rolldown на Rust показывает лучшую эффективность</li>
<li><strong>Кэширование</strong>: Vite’s dependency optimizer cache ускоряет повторные сборки</li>
<li><strong>Нативный ESM</strong>: Vite использует нативные ES модули браузера для dev-сервера, что обеспечивает мгновенный старт</li>
</ul>
<h2>Процесс разработки: как один инженер с ИИ создал фреймворк за неделю</h2>
<h3>Хронология проекта</h3>
<p dir="auto"><strong>13 февраля 2026</strong> - первый коммит в репозиторий &lsqb;&lsqb;9&rsqb;&rsqb;.</p>
<p dir="auto"><strong>День 1 (вечер)</strong>:</p>
<ul>
<li>Базовый SSR работает для обоих роутеров (Pages и App)</li>
<li>Реализованы middleware, server actions, streaming</li>
</ul>
<p dir="auto"><strong>День 2 (к вечеру)</strong>:</p>
<ul>
<li>App Router Playground рендерит 10 из 11 роутов</li>
</ul>
<p dir="auto"><strong>День 3</strong>:</p>
<ul>
<li>Команда <code>vinext deploy</code> развертывает приложения на Cloudflare Workers с полной клиентской гидратацией &lsqb;&lsqb;9&rsqb;&rsqb;</li>
</ul>
<p dir="auto"><strong>Дни 4-7</strong>:</p>
<ul>
<li>Укрепление кода (hardening)</li>
<li>Исправление edge cases</li>
<li>Расширение тестового покрытия до 94% API</li>
</ul>
<h3>Методология работы с ИИ</h3>
<p dir="auto">Процесс разработки включал несколько этапов:</p>
<p dir="auto"><strong>1. Архитектурное планирование (2 часа)</strong><br />
Инженер провел несколько часов в диалоге с Claude в OpenCode для определения архитектуры:</p>
<ul>
<li>Что строить</li>
<li>В каком порядке</li>
<li>Какие абстракции использовать</li>
</ul>
<p dir="auto">Этот план стал “северной звездой” - ориентиром для всей дальнейшей работы .</p>
<p dir="auto"><strong>2. Итеративная разработка</strong><br />
Рабочий процесс выглядел так:</p>
<pre><code>1. Определить задачу ("реализовать next/navigation shim 
   с usePathname, useSearchParams, useRouter")
2. ИИ пишет реализацию и тесты
3. Запуск тестового набора
4. Если тесты проходят → merge
   Если тесты не проходят → дать ИИ вывод ошибок 
   → позволить ИИ итерировать
5. Повторить
</code></pre>
<p dir="auto"><strong>3. Автоматизированный code review</strong></p>
<ul>
<li>При открытии PR ИИ-агент проводил ревью</li>
<li>При получении комментариев другой агент их обрабатывал</li>
<li>Обратная связь была в основном автоматизированной</li>
</ul>
<p dir="auto"><strong>4. Инструменты</strong></p>
<ul>
<li><strong>OpenCode</strong>: более 800 сессий</li>
<li><strong>agent-browser</strong>: для browser-level тестирования (рендеринг, клиентская навигация, гидратация)</li>
<li><strong>Claude Code</strong>: основная модель для генерации кода</li>
</ul>
<h3>Роль человека в AI-разработке</h3>
<p dir="auto">Важно понимать: <strong>почти каждая строка кода написана ИИ, но человек контролировал процесс</strong>.</p>
<p dir="auto"><strong>Что делал инженер:</strong></p>
<ul>
<li>Архитектурные решения</li>
<li>Приоритизация задач</li>
<li>Корректировка курса, когда ИИ шел в неверном направлении</li>
<li>Понимание, когда ИИ уверенно реализовывал что-то неверное</li>
</ul>
<p dir="auto"><strong>Что делал ИИ:</strong></p>
<ul>
<li>Генерация кода</li>
<li>Написание тестов</li>
<li>Исправление ошибок по результатам тестов</li>
<li>Первичный code review</li>
</ul>
<p dir="auto">Как отмечают в Cloudflare: “Когда вы даете ИИ хорошее направление, хороший контекст и хорошие guardrails, он может быть очень продуктивным. Но человек все еще должен рулить”.</p>
<h3>Почему этот проект стал возможен именно сейчас</h3>
<p dir="auto">Cloudflare выделил четыре критических фактора, которые совпали во времени :</p>
<p dir="auto"><strong>1. Next.js хорошо специфицирован</strong></p>
<ul>
<li>Обширная документация</li>
<li>Массивная пользовательская база<br />
-Years Stack Overflow ответов и туториалов</li>
<li>API surface присутствует в тренировочных данных</li>
</ul>
<p dir="auto">Когда вы просите Claude реализовать <code>getServerSideProps</code> или объяснить как работает <code>useRouter</code>, он не галлюцинирует - он знает, как работает Next.js .</p>
<p dir="auto"><strong>2. У Next.js есть комплексный тестовый набор</strong><br />
Репозиторий Next.js содержит тысячи E2E тестов, покрывающих каждую фичу и edge case. Cloudflare портировал тесты напрямую из их набора (с атрибуцией в коде). Это дало <strong>механическую спецификацию</strong> для верификации .</p>
<p dir="auto"><strong>3. Vite - отличная основа</strong><br />
Vite обрабатывает сложные части фронтенд-тулинга:</p>
<ul>
<li>Быстрый HMR (Hot Module Replacement)</li>
<li>Нативный ESM</li>
<li>Чистый plugin API</li>
<li>Production bundling</li>
</ul>
<p dir="auto">Не пришлось писать bundler с нуля - нужно было только “научить его говорить на Next.js”.</p>
<p dir="auto"><strong>4. Модели догнали сложность</strong><br />
“Мы не думаем, что это было бы возможно даже несколько месяцев назад. Более ранние модели не могли поддерживать целостность в кодовой базе такого размера. Новые модели могут удерживать полную архитектуру в контексте, рассуждать о взаимодействии модулей и достаточно часто производить корректный код для поддержания темпа”.</p>
<h2>Развертывание и интеграция: от разработки до production</h2>
<h3>Cloudflare Workers как первый класс развертывания</h3>
<p dir="auto">Vinext создан с <strong>Cloudflare Workers в качестве первого deployment target</strong>. Одна команда превращает исходный код в работающий Worker:</p>
<pre><code class="language-bash">vinext deploy
</code></pre>
<p dir="auto">Это автоматически:</p>
<ul>
<li>Собирает приложение</li>
<li>Авто-генерирует конфигурацию Worker</li>
<li>Развертывает на Workers</li>
</ul>
<h3>Поддержка Cloudflare Bindings</h3>
<p dir="auto">Vinext предоставляет нативный доступ ко всем Cloudflare bindings через специальный импорт:</p>
<pre><code class="language-javascript">import { env } from "cloudflare:workers";

export default async function Page() {
  const result = await env.DB.prepare("SELECT * FROM posts").all();
  return &lt;div&gt;{JSON.stringify(result)}&lt;/div&gt;;
}
</code></pre>
<p dir="auto">Это работает потому, что <code>@cloudflare/vite-plugin</code> запускает RSC environment в workerd, где <code>cloudflare:workers</code> - нативный модуль &lsqb;&lsqb;9&rsqb;&rsqb;.</p>
<p dir="auto"><strong>Поддерживаемые типы bindings:</strong></p>
<ul>
<li>D1 (базы данных)</li>
<li>R2 (объектное хранилище)</li>
<li>KV (key-value хранилище)</li>
<li>Durable Objects</li>
<li>AI bindings</li>
<li>Queues</li>
<li>Vectorize</li>
<li>Browser Rendering</li>
</ul>
<p dir="auto"><strong>Не нужны обходные пути</strong>: не требуется <code>getPlatformProxy()</code>, кастомный worker entry с <code>fetch(request, env)</code> или другие workaround’ы .</p>
<h3>Traffic-aware Pre-Rendering (TPR) - инновационный подход</h3>
<p dir="auto">Cloudflare представил экспериментальную функцию <strong>Traffic-aware Pre-Rendering</strong>, которая решает проблему долгих сборок в Next.js .</p>
<p dir="auto"><strong>Проблема Next.js:</strong><br />
Next.js пре-рендерит каждую страницу, указанную в <code>generateStaticParams()</code>, во время сборки. Сайт с 10,000 продуктовых страниц = 10,000 рендеров при сборке, даже если 99% страниц никогда не получат запрос. Сборка масштабируется линейно с количеством страниц - поэтому большие Next.js сайты имеют 30-минутные сборки .</p>
<p dir="auto"><strong>Решение TPR:</strong><br />
Cloudflare уже является reverse proxy для вашего сайта. У них есть данные о трафике. Они знают, какие страницы реально посещают. Vinext запрашивает Cloudflare zone analytics при деплое и пре-рендерит только страницы, которые имеют значение .</p>
<pre><code class="language-bash">vinext deploy --experimental-tpr

Building...
Build complete (4.2s)

TPR (experimental): Analyzing traffic for my-store.com (last 24h)
TPR: 12,847 unique paths — 184 pages cover 90% of traffic
TPR: Pre-rendering 184 pages...
TPR: Pre-rendered 184 pages in 8.3s → KV cache

Deploying to Cloudflare Workers...
</code></pre>
<p dir="auto">Для сайта со 100,000 продуктовых страниц power law означает, что 90% трафика обычно приходится на 50-200 страниц. Они пре-рендерятся за секунды. Все остальное fallback’ится на on-demand SSR и кэшируется через ISR после первого запроса.</p>
<h3>Мульти-платформенность через Nitro</h3>
<p dir="auto">Хотя Cloudflare Workers - основной target, vinext может развертываться на любой платформе через Nitro Vite plugin.</p>
<p dir="auto"><strong>Поддерживаемые платформы:</strong></p>
<ul>
<li>Vercel (auto-detection в CI, или <code>NITRO_PRESET=vercel</code>)</li>
<li>Netlify (auto-detection, или <code>NITRO_PRESET=netlify</code>)</li>
<li>AWS Amplify (<code>NITRO_PRESET=aws_amplify</code>)</li>
<li>Deno Deploy (<code>NITRO_PRESET=deno_deploy</code>)</li>
<li>Node.js server (<code>NITRO_PRESET=node</code>)</li>
</ul>
<p dir="auto">Cloudflare отмечает, что proof-of-concept для Vercel был поднят менее чем за 30 минут .</p>
<h2>Тестирование и качество: как обеспечивается надежность</h2>
<h3>Комплексный тестовый набор</h3>
<p dir="auto">Несмотря на то, что код написан ИИ, проект имеет <strong>те же gate’ы качества</strong>, что и human-written code:</p>
<p dir="auto"><strong>Unit и интеграционные тесты:</strong></p>
<ul>
<li><strong>1,700+ Vitest тестов</strong></li>
<li>Тесты портированы из Next.js test suite</li>
<li>Тесты из OpenNext Cloudflare conformance suite</li>
</ul>
<p dir="auto"><strong>E2E тесты:</strong></p>
<ul>
<li><strong>380 Playwright E2E тестов</strong></li>
<li>5 проектов для разных сценариев</li>
<li>Pages Router (dev + production)</li>
<li>App Router (dev)</li>
<li>Оба роутера на Cloudflare Workers через <code>wrangler dev</code></li>
</ul>
<p dir="auto"><strong>Статический анализ:</strong></p>
<ul>
<li>TypeScript type checking через tsgo</li>
<li>Linting через oxlint</li>
<li>CI запускает все тесты на каждом pull request</li>
</ul>
<h3>Верификация через реальные приложения</h3>
<p dir="auto">Cloudflare использует <strong>Vercel’s App Router Playground</strong> как integration test - он работает на vinext и доступен по адресу app-router-playground.vinext.workers.dev.</p>
<p dir="auto">Также развернуты живые примеры:</p>
<ul>
<li><strong>Hacker News clone</strong> - HN клон с App Router и RSC</li>
<li><strong>Nextra Docs</strong> - документация с MDX</li>
<li><strong>RealWorld API</strong> - REST API routes</li>
<li><strong>Benchmarks Dashboard</strong> - дашборд производительности</li>
</ul>
<h3>Production использование</h3>
<p dir="auto">Несмотря на experimental статус, vinext уже используется в production:</p>
<p dir="auto"><strong>National Design Studio</strong> работает над модернизацией правительственных интерфейсов и использует vinext на одном из своих beta-сайтов - <strong><a href="http://CIO.gov" target="_blank" rel="noopener noreferrer">CIO.gov</a></strong>. Они отмечают значительное улучшение времени сборки и размера бандлов .</p>
<h3>Known limitations - честность о недостатках</h3>
<p dir="auto">Cloudflare четко документирует известные ограничения:</p>
<p dir="auto"><strong>Оптимизация изображений:</strong></p>
<ul>
<li>Remote images работают через @unpic/react (авто-детект 28 CDN)</li>
<li>Local images маршрутизируются через <code>/_vinext/image</code> endpoint</li>
<li>В production на Cloudflare Workers можно resize/transcode через Images binding</li>
<li><strong>Нет build-time оптимизации</strong> или статического ресайзинга</li>
</ul>
<p dir="auto"><strong>Google Fonts:</strong></p>
<ul>
<li>Загружаются из CDN, не self-hosted</li>
<li>Нет <code>size-adjust</code> fallback font metrics</li>
<li>Local fonts работают, но <code>@font-face</code> CSS инжектится runtime, не извлекается при сборке</li>
</ul>
<p dir="auto"><strong><code>useSelectedLayoutSegment(s)</code>:</strong></p>
<ul>
<li>Derives segments из pathname, не truly layout-aware</li>
<li>Может отличаться от Next.js в edge cases с parallel routes</li>
</ul>
<p dir="auto"><strong>Node.js production server:</strong></p>
<ul>
<li><code>vinext start</code> работает для тестирования</li>
<li>Менее полный, чем Workers deployment</li>
<li>Cloudflare Workers - primary target</li>
</ul>
<p dir="auto"><strong>Native Node modules:</strong></p>
<ul>
<li>sharp, resvg, satori, lightningcss, @napi-rs/canvas крашат Vite’s RSC dev environment</li>
<li>В production builds работают</li>
<li>При <code>vinext deploy</code> auto-stubbed</li>
</ul>
<h2>Влияние на будущее разработки программного обеспечения</h2>
<h3>Переосмысление абстракций в ПО</h3>
<p dir="auto">Стив Фаулкер из Cloudflare поднял фундаментальный вопрос: <strong>“Почему у нас так много слоев в стеке?”</strong> .</p>
<p dir="auto">Традиционный ответ: большинство абстракций существуют, потому что людям нужна помощь. Мы не могли удержать всю систему в голове, поэтому строили слои для управления сложностью. Каждый слой облегчал задачу следующему человеку. Так появляются фреймворки поверх фреймворков, wrapper библиотеки, тысячи строк glue code .</p>
<p dir="auto"><strong>ИИ не имеет того же ограничения.</strong> Он может удержать всю систему в контексте и просто написать код. Ему не нужен промежуточный фреймворк для организации. Ему нужна только спецификация и основа для строительства .</p>
<p dir="auto">“Пока не ясно, какие абстракции действительно фундаментальны, а какие были просто костылями для человеческой когниции. Эта граница будет сильно смещаться в ближайшие годы. Но vinext - это data point. Мы взяли API contract, build tool и AI model, и ИИ написал все между ними. Никакого промежуточного фреймворка не потребовалось” .</p>
<h3>AI перепишет коммерческий open source</h3>
<p dir="auto">Newsletter Pragmatic Engineer отмечает, что эксперимент Cloudflare - это <strong>признак того, как ИИ нарушит существующие коммерческие open source проекты</strong> .</p>
<p dir="auto">Next.js от Vercel - коммерческий продукт с облачной платформой. Vinext показывает, что API surface можно переписать за неделю с минимальными затратами. Это создает прецедент для “освобождения” других популярных фреймворков от vendor lock-in .</p>
<h3>Изменение роли разработчика</h3>
<p dir="auto">Эксперимент демонстрирует сдвиг в роли разработчика:</p>
<p dir="auto"><strong>Традиционная разработка:</strong></p>
<ul>
<li>Разработчик пишет код</li>
<li>Тратит время на boilerplate</li>
<li>Борется с сложностью больших кодовых баз</li>
</ul>
<p dir="auto"><strong>AI-ассистированная разработка:</strong></p>
<ul>
<li>Разработчик определяет архитектуру</li>
<li>ИИ генерирует код</li>
<li>Разработчик валидирует через тесты</li>
<li>Фокус на high-level решениях, не implementation details</li>
</ul>
<p dir="auto">Как отмечают в Cloudflare: “Если один инженер может потратить $1100 в токенах и переписать Next.js, вы можете потратить $10 и мигрировать на Vite-based фреймворк” .</p>
<h2>Практическое применение: как начать использовать vinext</h2>
<h3>Быстрый старт</h3>
<p dir="auto">Vinext включает <strong>Agent Skill</strong> для автоматической миграции. Работает с Claude Code, OpenCode, Cursor, Codex и десятками других AI coding tools:</p>
<pre><code class="language-bash"># Установить skill
npx skills add cloudflare/vinext

# В вашем Next.js проекте
migrate this project to vinext
</code></pre>
<p dir="auto">Skill обрабатывает:</p>
<ul>
<li>Проверку совместимости</li>
<li>Установку зависимостей</li>
<li>Генерацию конфига</li>
<li>Запуск dev сервера</li>
<li>Флаги о том, что требует ручного внимания</li>
</ul>
<h3>Ручная миграция</h3>
<pre><code class="language-bash">npm install vinext

# В package.json заменить next на vinext:
{
  "scripts": {
    "dev": "vinext dev",
    "build": "vinext build",
    "start": "vinext start"
  }
}

# Использовать
vinext dev          # Dev server с HMR
vinext build        # Production сборка
vinext deploy       # Сборка и деплой на Cloudflare Workers
</code></pre>
<p dir="auto">Vinext auto-detects ваш <code>app/</code> или <code>pages/</code> directory, загружает <code>next.config.js</code>, и автоматически конфигурирует Vite. Ваши существующие директории <code>pages/</code>, <code>app/</code>, <code>next.config.js</code>, и <code>public/</code> работают как есть .</p>
<h3>Команды CLI</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Команда</th>
<th>Описание</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>vinext dev</code></td>
<td>Запустить dev server с HMR</td>
</tr>
<tr>
<td><code>vinext build</code></td>
<td>Production сборка (multi-environment для App Router: RSC + SSR + client)</td>
</tr>
<tr>
<td><code>vinext start</code></td>
<td>Запустить локальный production server для тестирования</td>
</tr>
<tr>
<td><code>vinext deploy</code></td>
<td>Собрать и развернуть на Cloudflare Workers</td>
</tr>
<tr>
<td><code>vinext init</code></td>
<td>Мигрировать Next.js проект на vinext</td>
</tr>
<tr>
<td><code>vinext check</code></td>
<td>Сканировать Next.js app на проблемы совместимости перед миграцией</td>
</tr>
<tr>
<td><code>vinext lint</code></td>
<td>Делегировать eslint или oxlint</td>
</tr>
</tbody>
</table>
<p dir="auto">Опции для <code>vinext deploy</code>:</p>
<ul>
<li><code>--preview</code> - деплой в preview environment</li>
<li><code>--env &lt;name&gt;</code> - target specific environment</li>
<li><code>--experimental-tpr</code> - включить Traffic-aware Pre-Rendering</li>
</ul>
<h3>Проверка совместимости</h3>
<p dir="auto">Перед миграцией рекомендуется запустить:</p>
<pre><code class="language-bash">vinext check
</code></pre>
<p dir="auto">Это просканирует проект на известные проблемы совместимости и покажет, что потребует изменений .</p>
<h2>Текущий статус и дорожная карта</h2>
<h3>Experimental статус - что это значит</h3>
<p dir="auto">Cloudflare четко обозначил: <strong>vinext экспериментальный</strong>. Ему даже нет одной недели на момент анонса, и он не был battle-tested со значительным трафиком в масштабе.</p>
<p dir="auto"><strong>README честен</strong> о том, что не поддерживается и не будет поддерживаться, о известных ограничениях. Cloudflare хочет быть upfront, а не overpromise .</p>
<h3>Что в разработке</h3>
<p dir="auto"><strong>Приоритетные задачи:</strong></p>
<ol>
<li>Статический pre-rendering на build time (пока не поддерживается)</li>
<li>Улучшение поддержки Images binding для оптимизации изображений</li>
<li>Расширение покрытия API до 95%+</li>
<li>Native adapters для дополнительных платформ (помимо Cloudflare и Nitro)</li>
</ol>
<p dir="auto"><strong>Traffic-aware Pre-Rendering</strong> планируется сделать дефолтом после получения большего количества real-world тестирования .</p>
<h3>Как сообщество может помочь</h3>
<p dir="auto">Vinext - <strong>open-source проект</strong> (MIT license) на GitHub: <a href="http://github.com/cloudflare/vinext" target="_blank" rel="noopener noreferrer">github.com/cloudflare/vinext</a> .</p>
<p dir="auto"><strong>Contributing:</strong></p>
<ul>
<li>Issues и PRs приветствуются</li>
<li>CI (lint, typecheck, Vitest, Playwright E2E) запускается автоматически</li>
<li>First-time contributors требуют manual approval, последующие PRs идут без вмешательства</li>
<li>Cloudflare employees могут push ветки в main repo для авто-деплоя preview</li>
</ul>
<p dir="auto"><strong>Reporting bugs:</strong><br />
Cloudflare рекомендует перед созданием issues попробовать направить AI agent на проблему:</p>
<p dir="auto">“Откройте ваш проект с Claude Code, Cursor, OpenCode или чем вы пользуетесь, и попросите разобраться, почему ваше приложение не работает с vinext. В нашем опыте, агенты очень хороши в трассировке через vinext source, идентификации gaps или багов, и часто производят fix или хотя бы ясную диагностику. Issue, которое включает ‘вот что нашел агент’, значительно более actionably, чем ‘оно не работает’” .</p>
<h2>Заключение: начало новой эры разработки</h2>
<p dir="auto">Эксперимент Cloudflare vinext демонстрирует <strong>фундаментальный сдвиг в парадигме разработки программного обеспечения</strong>. То, что раньше требовало команды инженеров и месяцев работы, теперь может быть выполнено одним специалистом за неделю с помощью ИИ.</p>
<p dir="auto"><strong>Ключевые выводы:</strong></p>
<ol>
<li><strong>Экономическая эффективность</strong>: $1100 затрат против сотен тысяч долларов традиционной разработки</li>
<li><strong>Производительность</strong>: 4x быстрее сборка, 57% меньше бандлы</li>
<li><strong>Качество</strong>: 1,700+ тестов, 380 E2E тестов, 94% покрытие API</li>
<li><strong>Практическая применимость</strong>: уже используется в production на <a href="http://CIO.gov" target="_blank" rel="noopener noreferrer">CIO.gov</a></li>
</ol>
<p dir="auto"><strong>Более широкое значение:</strong></p>
<p dir="auto">Vinext - это data point в эволюции разработки ПО. Он показывает, что многие слои абстракции, которые мы построили за годы, возможно, были костылями для человеческой когниции, а не фундаментальной необходимостью .</p>
<p dir="auto">ИИ может удерживать сложные системы в контексте и генерировать код напрямую из спецификации. Это не означает конец фреймворков, но переопределяет их роль: от необходимых абстракций к опциональным удобствам.</p>
<p dir="auto"><strong>Что дальше:</strong></p>
<p dir="auto">Cloudflare ищет партнеров среди других хостинг-провайдеров для адаптации toolchain для их клиентов (lift минимален - proof-of-concept на Vercel поднят за 30 минут) &lsqb;&lsqb;9&rsqb;&rsqb;. Это open-source проект, и для долгосрочного успеха важно работать с партнерами across the ecosystem.</p>
<p dir="auto">Эксперимент vinext - это не просто техническая демонстрация. Это сигнал индустрии: <strong>стоимость создания ПО кардинально изменилась</strong>, и нам нужно переосмыслить, как мы строим программное обеспечение в эпоху ИИ.</p>
<hr />
<p dir="auto"><strong>Источники данных:</strong></p>
<ul>
<li>Официальный блог Cloudflare: “How we rebuilt Next.js with AI in one week”</li>
<li>GitHub репозиторий: <a href="http://github.com/cloudflare/vinext" target="_blank" rel="noopener noreferrer">github.com/cloudflare/vinext</a></li>
<li>Benchmarks dashboard: benchmarks.vinext.workers.dev</li>
<li>Анализ технического сообщества</li>
</ul>
<p dir="auto"><strong>Статус информации:</strong> Актуально на март 2026 года. Проект находится в активной разработке, характеристики могут меняться.</p>
<hr />
<p dir="auto"><em>Примечание: Статья носит информационный характер. Vinext является экспериментальным проектом и требует осторожности при использовании в production.</em></p>
]]></description><link>https://forum.exlends.ru/topic/965/v-cloudflare-perepisali-next.js-za-nedelyu-s-pomoshyu-ii.-rezultaty-eksperimenta-proekt-vinext</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:07:13 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/965.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Mar 2026 09:30:13 GMT</pubDate><ttl>60</ttl></channel></rss>