Dev News от Максима Соснова
Kanalga Telegram’da o‘tish
Привет! Меня зовут Максим Соснов и по утрам я читаю всякие разные дайджесты про фронтенд, разработку и управление разработкой. Самые интересные, по моему мнению, ссылки из этих дайджестов я кидаю в этот канал с небольшим описанием. Контакт: @msosnov
Ko'proq ko'rsatish2 825
Obunachilar
-124 soatlar
+47 kunlar
+2330 kunlar
Ma'lumot yuklanmoqda...
O'xshash kanallar
Taglar buluti
Kirish va chiqish esdaliklari
---
---
---
---
---
---
Obunachilarni jalb qilish
Iyul '26
Iyul '26
+16
0 kanalda
Iyun '26
+46
0 kanalda
Get PRO
May '26
+46
1 kanalda
Get PRO
Aprel '26
+41
0 kanalda
Get PRO
Mart '26
+39
0 kanalda
Get PRO
Fevral '26
+41
0 kanalda
Get PRO
Yanvar '26
+31
0 kanalda
Get PRO
Dekabr '25
+27
1 kanalda
Get PRO
Noyabr '25
+33
1 kanalda
Get PRO
Oktabr '25
+65
2 kanalda
Get PRO
Sentabr '25
+54
1 kanalda
Get PRO
Avgust '25
+52
0 kanalda
Get PRO
Iyul '25
+86
7 kanalda
Get PRO
Iyun '25
+50
0 kanalda
Get PRO
May '25
+57
0 kanalda
Get PRO
Aprel '25
+68
4 kanalda
Get PRO
Mart '25
+79
2 kanalda
Get PRO
Fevral '25
+72
2 kanalda
Get PRO
Yanvar '25
+75
1 kanalda
Get PRO
Dekabr '24
+88
2 kanalda
Get PRO
Noyabr '24
+156
1 kanalda
Get PRO
Oktabr '24
+96
1 kanalda
Get PRO
Sentabr '24
+87
0 kanalda
Get PRO
Avgust '24
+134
3 kanalda
Get PRO
Iyul '24
+87
1 kanalda
Get PRO
Iyun '24
+111
0 kanalda
Get PRO
May '24
+795
2 kanalda
Get PRO
Aprel '24
+41
0 kanalda
Get PRO
Mart '24
+55
1 kanalda
Get PRO
Fevral '24
+63
1 kanalda
Get PRO
Yanvar '24
+98
1 kanalda
Get PRO
Dekabr '23
+94
2 kanalda
Get PRO
Noyabr '23
+31
1 kanalda
Get PRO
Oktabr '23
+88
1 kanalda
Get PRO
Sentabr '23
+58
0 kanalda
Get PRO
Avgust '23
+47
0 kanalda
Get PRO
Iyul '23
+36
0 kanalda
Get PRO
Iyun '23
+44
0 kanalda
Get PRO
May '23
+27
0 kanalda
Get PRO
Aprel '23
+54
0 kanalda
Get PRO
Mart '23
+61
0 kanalda
Get PRO
Fevral '23
+33
0 kanalda
Get PRO
Yanvar '23
+42
0 kanalda
Get PRO
Dekabr '22
+35
0 kanalda
Get PRO
Noyabr '22
+138
0 kanalda
Get PRO
Oktabr '22
+65
0 kanalda
Get PRO
Sentabr '22
+114
0 kanalda
Get PRO
Avgust '22
+18
0 kanalda
Get PRO
Iyul '22
+48
0 kanalda
Get PRO
Iyun '22
+32
0 kanalda
Get PRO
May '22
+15
0 kanalda
Get PRO
Aprel '22
+4
0 kanalda
Get PRO
Mart '22
+4
0 kanalda
Get PRO
Fevral '22
+21
0 kanalda
Get PRO
Yanvar '22
+64
0 kanalda
Get PRO
Dekabr '21
+6
0 kanalda
Get PRO
Noyabr '21
+8
0 kanalda
Get PRO
Oktabr '21
+333
0 kanalda
| Sana | Obunachilarni jalb qilish | Esdaliklar | Kanallar | |
| 13 Iyul | +2 | |||
| 12 Iyul | 0 | |||
| 11 Iyul | 0 | |||
| 10 Iyul | 0 | |||
| 09 Iyul | +8 | |||
| 08 Iyul | +1 | |||
| 07 Iyul | +1 | |||
| 06 Iyul | +2 | |||
| 05 Iyul | 0 | |||
| 04 Iyul | +1 | |||
| 03 Iyul | 0 | |||
| 02 Iyul | 0 | |||
| 01 Iyul | +1 |
Kanal postlari
Deno 2.9
Вышел Deno 2.9. Пропустил бы релиз, т. к. в целом всё как обычно — улучшают перформанс, улучшают DX, делают лучше интероп с другими пакетными менеджерами. Но в этом релизе добавили сборку desktop-приложений — можно получить GUI без Electron и других обвязок, Deno уже имеет всю инфраструктуру для этого.
Как это работает: вы, как обычно, пишете веб-приложение:
Deno.serve(() =>
new Response(
"<!DOCTYPE html><h1>Hello from Deno desktop 👋</h1>",
{ headers: { "content-type": "text/html" } },
)
);
Собираете его:
deno desktop main.ts
Получаете бинарь. Кликаете на него и видите Hello World в GUI.
Что умеет из коробки:
- Сборка для Windows, macOS, Linux
- Системное webview по умолчанию, но можно забандлить CEF (Chromium Embedded Framework)
- Управление иконкой в Tray и Dock
- Управление окном
Звучит прикольно.
https://deno.com/blog/v2.9
#development #javascript #typescript #deno #releaseNotes| 2 | Дайджест за 2026-07-06 - 2026-07-10
eslint-plugin-unicorn
Как-то я упустил момент, когда eslint-plugin-unicorn начал активно развиваться. А тем временем там уже больше 300 правил! Правила всякие разные — от специализированных до тех, которые можно использовать в любом проекте.
Skills for coding agents
Набор скиллов для coding-агентов от BuilderIO. Наборов скиллов много, но здесь мне понравились /visual-plan и /visual-recap, с помощью которых агент может создать план и отчёт, которые удобно читать и в которых используется канвас с диаграммами, мокапами и всем таким. Выглядит круто.
The Goldilocks customizable select height
Относительно недавно браузеры разрешили полностью кастомизировать <select>. Но, как обычно, чтобы получить идеальное решение, нужно добавить щепотку своего CSS. Jake Archibald в статье показывает, как добавить эту щепотку CSS и получить хороший select. В статье есть интерактивное демо каждого улучшения и видео для тех, у кого браузер не поддерживает все требуемые фичи.
——————————————
Спасибо что читаете, ставите реакции, отмечаетесь в комментариях и рассказываете о канале друзьям и коллегам.
——————————————
Я работаю в Т-Банке и у нас идет активный найм. Если вам интересна работа в Т-Банке - переходите по ссылке и пишите в личку - отвечу на любые вопросы | 501 |
| 3 | The Goldilocks customizable select height
Относительно недавно браузеры разрешили полностью кастомизировать <select>. Но, как обычно, чтобы получить идеальное решение, нужно добавить щепотку своего CSS. Jake Archibald в статье показывает, как добавить эту щепотку CSS и получить хороший select. В статье есть интерактивное демо каждого улучшения и видео для тех, у кого браузер не поддерживает все требуемые фичи.
Проблема 1: picker упирается в край viewport
По умолчанию список опций упирается в край экрана, и непонятно — это конец списка или есть что-то ещё. Решение банальное — добавить отступ от края:
.custom-select::picker(select) {
margin-block-end: 1em;
}
Но:
- в Firefox это просто не работает
- в Chrome/Safari margin снизу выглядит плохо, когда picker переворачивается и список выпадает вверх
Для Firefox: считаем вручную через calc(100% - var(--viewport-margin)).
Chrome & Safari: используем position-try-fallbacks: flip-block, flip-inline, … — при перевороте picker'а margin тоже «переворачивается». margin-block-end сверху становится margin-block-start.
Проблема 2: picker становится слишком маленьким
У Chrome дефолт min-block-size: 1lh. Если упереть select в край экрана, список сжимается и становится неюзабельным. Решение банальное — поднимаем минимальный размер:
.custom-select::picker(select) {
min-block-size: 12em;
}
Но тогда короткий список из пары опций начинает выглядеть странно — появляется пустое пространство.
Тут Jake использует расчёт размера на основе контента:
.custom-select::picker(select) {
min-block-size: calc-size(fit-content, min(size, 12em));
}
В Firefox и Safari нет calc-size(), там используется :has() для определения количества элементов.
Проблема 3: picker становится слишком большим
Picker всегда растягивается на всю возможную высоту.
Решение: второй max через calc-size(stretch, …):
.custom-select::picker(select) {
--max-size: 30em;
max-block-size: calc-size(stretch, min(size, var(--max-size)));
}
Итоговый CSS
Итого 5 простых строчек (и около 30, если считать фолбек для браузеров, не поддерживающих эти 5 строчек) для улучшения кастомизированного select:
.custom-select::picker(select) {
min-block-size: calc-size(fit-content, min(size, 12em));
max-block-size: calc-size(stretch, min(size, 30em));
margin-block-end: 1em;
}
https://jakearchibald.com/2026/goldilocks-select-height/
#development #css #html #select #web #jakeArchibald | 647 |
| 4 | Skills for coding agents
Набор скиллов для coding-агентов от BuilderIO. Наборов скиллов много, но здесь мне понравились /visual-plan и /visual-recap, с помощью которых агент может создать план и отчёт, которые удобно читать и в которых используется канвас с диаграммами, мокапами и всем таким. Выглядит круто.
Также есть скиллы для организации группы агентов, но они уже менее интересны.
https://github.com/BuilderIO/skills
#development #ai #agents #cursor #skills | 834 |
| 5 | eslint-plugin-unicorn
Как-то я упустил момент, когда eslint-plugin-unicorn начал активно развиваться. А тем временем там уже больше 300 правил! Правила всякие разные — от специализированных до тех, которые можно использовать в любом проекте.
https://github.com/sindresorhus/eslint-plugin-unicorn
#development #eslint #javascript #typescript #lint | 942 |
| 6 | Why does tsgo use so much memory?
Вот и подъехали разборы работы tsgo, на который все мы скоро переедем. На больших проектах он жрёт гигабайты памяти. Автор разбора погонял его на проекте с Next.js и Zod и сделал анализ, куда же уходит память.
Короткий ответ: при мультипоточности tsgo создаёт отдельный type checker на каждый поток. У каждого свой state, который не шарится. Также вычисленные типы никогда не освобождаются.
При запуске tsgo на 4 потоках 45% памяти уходит на AST, 30% на Checker (400 МБ). При запуске в один поток потребление Checker падает до 50 МБ. У каждого Checker свой state и данные. При запуске tsgo в несколько потоков создаётся несколько Checker, каждый из которых несёт свои данные.
Также конструкции Zod вида const emailSchema = z.string().email().min(5).max(120).toLowerCase(); генерируют очень много типов, хотя по итогу нужен только последний.
Из хороших новостей: это всё можно оптимизировать и можно ожидать снижение потребления памяти в будущих релизах.
https://zackoverflow.dev/writing/why-does-tsgo-use-so-much-memory
#development #typescript #tsgo #performance #compiler | 1 524 |
| 7 | Дайджест за 2026-06-15 - 2026-06-19
Deprecating a React component using TypeScript Overload
Статья про хитрый способ ввести breaking change в компонент, не создавая ComponentNameV2. Автор использует трюк с TypeScript overloads и @deprecated.
ESLint – React – You Might Not Need An Effect
ESLint-плагин, который ловит лишние useEffect. Создан по мотивам официальной статьи React You Might Not Need An Effect. Целый набор антипаттернов с конкретными подсказками и ссылками на доку.
The Orchestration Tax
Addy Osmani рассказывает про «orchestration tax» — налог, который приходится выплачивать, работая с кучей агентов.
——————————————
Спасибо что читаете, ставите реакции, отмечаетесь в комментариях и рассказываете о канале друзьям и коллегам.
——————————————
Я работаю в Т-Банке и у нас идет активный найм. Если вам интересна работа в Т-Банке - переходите по ссылке и пишите в личку - отвечу на любые вопросы | 1 182 |
| 8 | The Orchestration Tax
Addy Osmani рассказывает про «orchestration tax» — налог, который приходится выплачивать, работая с кучей агентов.
Переключение контекста не бесплатное — мозг тратит своё мыслетопливо на это переключение. Запускать 20 агентов параллельно — легко. Но переключаться между ними — сложно. Очень быстро устаёшь. Это и есть «orchestration tax».
Те, кто занимается архитектурой систем, знают, что 100% утилизация CPU ведёт к задержкам в обработке задач, что в итоге приводит к долгому времени выполнения всех задач. Также работает и наш мозг.
Но при этом, запуская 20 агентов и нагружая свою голову на 100%, кажется, что ты очень продуктивен. Но по факту мы путаем перегруженность с продуктивностью.
А когда устаёшь, то вместо качественной проверки результата работы агента принимаешь его работу не глядя, что ведёт к низкому качеству итогового решения.
Что надо делать, чтобы не попасть в эту ловушку:
- Самое важное — не запускать агентов на задачи, требующие вашего внимания, больше, чем вы можете заменеджить
- Проверять работу агентов батчами — сразу по нескольку. Проще, чем много раз возвращаться к одной задаче.
- Если можно убрать фазу проверки в агента — стоит это сделать. Агенты сами могут запустить тесты, проверить работу приложения и анализировать логи. На этапе старта задачи сразу укажите Definition of Done для задачи, которую агент сможет проверить сам
Но главное - развить отдельный навык. Проектировать систему работы с агентами вокруг мысли, что вы - узкое горлышко всей системы.
https://addyosmani.com/blog/orchestration-tax/
#development #ai #agents #productivity #engineering | 1 156 |
| 9 | ESLint – React – You Might Not Need An Effect
ESLint-плагин, который ловит лишние useEffect. Создан по мотивам официальной статьи React You Might Not Need An Effect. Целый набор антипаттернов с конкретными подсказками и ссылками на доку.
Плагин анализирует state, props, refs и их источники, учитывает зависимости effect и пытается держать высокое соотношение полезных срабатываний к шуму. Есть 9 правил:
- no-derived-state — derived state в effect вместо вычисления при рендере
- no-chain-state-updates — цепочки setState в effect
- no-event-handler — effect как event handler через state/props
- no-adjust-state-on-prop-change / no-reset-all-state-on-prop-change — сброс state при смене props (вместо key)
- no-pass-live-state-to-parent / no-pass-data-to-parent — прокидывание данных наверх через effect
- no-external-store-subscription — подписка на внешний store вместо useSyncExternalStore
- no-initialize-state — инициализация state в effect
Выглядит интересно, надо попробовать.
https://github.com/nickjvandyke/eslint-plugin-react-you-might-not-need-an-effect
#development #react #eslint #hooks #useeffect #lint | 1 272 |
| 10 | Deprecating a React component using TypeScript Overload
Статья про хитрый способ ввести breaking change в компонент, не создавая ComponentNameV2. Автор использует трюк с TypeScript overloads и @deprecated.
Что он делает.
Есть у вас компонент Card
export interface CardProps {
title: string;
content: string;
style?: React.CSSProperties;
}
const Card = ({title, content, style}: CardProps) => {}
Вам нужно сделать новый компонент с тем же интерфейсом.
const NewCard = ({title, content, style}: CardProps) => {}
При этом вы хотите, чтобы пользователи не автоматически обновляли компонент, а осознанно (ну, допустим, изменение значительное).
В этом случае вы делаете враппер
export interface NewCardProps extends CardProps {
new: true;
}
function Card(props: CardProps | NewCardProps): React.JSX.Element {
if ('new' in props) {
return NewCard(props);
}
return LegacyCard(props);
}
Все пользователи так и импортируют Card и используют старую реализацию, но надо как-то подсказать пользователям что им надо прокинуть проп new для перехода на новую версию.
/* eslint-disable no-redeclare */
/** @deprecated Use Card with "new" prop on it instead */
function Card(props: CardProps): React.JSX.Element;
function Card(props: NewCardProps): React.JSX.Element;
При таком определении IDE будет отображать использование компонента без пропа new как депрекейтнутное (зачеркивать его).
Трюк немного сомнительный, но, вместе с тем, и очень интересный.
https://dev.to/mbarzeev/deprecating-a-react-component-using-typescript-overload-2ka
#development #react #typescript #components #deprecation #monorepo | 1 021 |
| 11 | Дайджест за 2026-06-08 - 2026-06-12
Bun's unreleased Rust port has 13,365 unsafe blocks. Most can be removed.
Сначала Anthropic купили Bun, а затем переписали его с Zig на Rust с помощью Claude Code, но пока не влили. Большое переписывание - большой шитшторм. Быстро вскрылось, что код переписан "плохо" - не rust-way и много unsafe в кодовой базе. Команда Bun опубликовала большой интерактивный аудит всех unsafe-блоков в ещё не выпущенном Rust-порте рантайма. После AI-перевода с Zig на Rust там насчитали 13 365 unsafe — и разобрали каждый: откуда он взялся, можно ли убрать и что для этого нужно.
Mitos
Oxide Computer выложили в опенсорс Mitos — веб-инструмент для генерации ASCII-арта на основе изображений или gif. Выглядит реально круто. Вставляете картинку или гиф, а экспортируете текст, png или mp4.
TypeScript Tips Everyone Should Know
Никогда не было и вот опять - читшит с бест практисами по Typescript. 15 простых бест-практисов, которые можно брать в любой проект (или отдать агенту в виде скилла). Т.к. читшит ультра короткий, то приведу примеры из него прямо в посте
——————————————
Спасибо что читаете, ставите реакции, отмечаетесь в комментариях и рассказываете о канале друзьям и коллегам.
——————————————
Я работаю в Т-Банке и у нас идет активный найм. Если вам интересна работа в Т-Банке - переходите по ссылке и пишите в личку - отвечу на любые вопросы | 896 |
| 12 | TypeScript Tips Everyone Should Know
Никогда не было и вот опять - читшит с бест практисами по Typescript. 15 простых бест-практисов, которые можно брать в любой проект (или отдать агенту в виде скилла). Т.к. читшит ультра короткий, то приведу примеры из него прямо в посте
Prefer unknown Over any - тут всем всё понятно, unknown безопаснее any
Let Type Inference Do the Work - если TS может вывести тип сам, то и не надо его описывать
const name = "Ada";
// вместо
const name: string = "Ada";
Prefer satisfies Over as - satisfies позволяет проверить на соответствие типу без приведения типов, в отличие от as
const routes = {
home: "/",
about: "/about",
} satisfies Record<string, string>;
Derive Types From Values Instead of Duplicating Them - получайте типы из значений, а не делайте копию в типах.
const roles = ["admin", "user", "guest"] as const;
type Role = (typeof roles)[number];
Model Impossible States With Discriminated Unions - делайте некорректные состояния невозможными с помощью Discriminated Unions
type State =
| { status: "loading" }
| { status: "success"; data: User }
| { status: "error"; error: Error };
Use Exhaustive Checks With never - при проверках switch/case (да и в других вариантах), в default следует возвращать never. Если вдруг TypeScript поймет, что не все ветвления проверены и можно войти в ветку с never, то TS кинет ошибку
function render(state: State) {
switch (state.status) {
case "loading": return <Spinner />;
case "success": return <UserCard data={state.data} />;
case "error": return <ErrorMessage error={state.error} />;
default: {
const exhaustive: never = state;
return exhaustive;
}
}
}
Use as const for Configuration and Constants - фиксируйте типы конфигов и констант через as const, они будут точнее выведены
const theme = { mode: "dark" } as const;
Use Type Predicates for Reusable Narrowing
function isUser(value: unknown): value is User {
return typeof value === "object" && value !== null && "id" in value;
}
Build New Types From Existing Types - используйте Pick, Omit, Partial, Required и другие type utils для построения производных типов
type UserPreview = Pick<User, "id" | "name">;
Validate External Data at Runtime - TypeScript не проверяет данные из внешнего мира. Валидируйте их на границе с API
const UserSchema = z.object({
id: z.string(),
name: z.string(),
});
Avoid enum in Most Cases - union проще рефакторить, сериализовать и приносит меньше сюрпризов в рантайме, чем Enum.
const roles = ["admin", "user"] as const;
// вместо enum Role { Admin, User }
Prefer Generics That Infer Automatically - если generic может сам вывести тип — так и делайте. Хороший API не заставляет писать тип вручную
getData(userSchema);
// вместо
getData<User>(userSchema)
Enable Strict Compiler Options - удивительно, что в конце списка :). Включите строгий режим проверок.
Learn Template Literal Types - используйте строковые шаблоны в типах.
type Route = `/api/${string}`;
"Type-Safe" Does Not Mean "Runtime Safe" - даже если вы используете строгий TS, у вас нет any, ts-expect-error и всё чётко, это не гарантирует, что в рантайме у вас не будет ошибок.
https://github.com/AllThingsSmitty/typescript-tips-everyone-should-know
#development #typescript #javascript #best-practices #cheatsheet | 1 170 |
| 13 | Mitos
Oxide Computer выложили в опенсорс Mitos — веб-инструмент для генерации ASCII-арта на основе изображений или gif. Выглядит реально круто. Вставляете картинку или гиф, а экспортируете текст, png или mp4.
Поиграться можно здесь https://mitos.shared.oxide.computer/
https://github.com/oxidecomputer/mitos
#development #oxide #ascii #tools #open-source | 1 041 |
| 14 | Bun's unreleased Rust port has 13,365 unsafe blocks. Most can be removed.
Сначала Anthropic купили Bun, а затем переписали его с Zig на Rust с помощью Claude Code, но пока не влили. Большое переписывание - большой шитшторм. Быстро вскрылось, что код переписан "плохо" - не rust-way и много unsafe в кодовой базе. Команда Bun опубликовала большой интерактивный аудит всех unsafe-блоков в ещё не выпущенном Rust-порте рантайма. После AI-перевода с Zig на Rust там насчитали 13 365 unsafe — и разобрали каждый: откуда он взялся, можно ли убрать и что для этого нужно.
Важно: версию на Rust ещё не влили.
Главный вывод из отчёта: 13 365 unsafe — это очень много, но большинство из них (~9 300) можно перевести в safe. Остальные unsafe останутся, в основном это FFI и работа с C/C++.
Сам отчёт просто бомбический: удобно смотреть, классно выглядит, полностью основан на данных и показывает, откуда берутся эти unsafe. Но самый кайф — хороший пример инженерной работы: всё подсчитано, сделан анализ, выводы, показаны детали, которые повлияли на выводы.
https://bun.com/bun-unsafe-audit
#development #bun #rust #unsafe #audit | 1 213 |
| 15 | ужин? | 1 |
| 16 | Дайджест за 2026-05-18 - 2026-05-22
spawn-agent
Библиотека, использующая Vercel AI SDK для запуска локальных AI-агентов на компьютере через Agent Client Protocol. Поддерживает Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode, Factory Droid, Pi.
portless
Утилита от Vercel Labs, которая открывает урлы вида http://localhost:3000 на именованных доменах .localhost. Например, вместо http://localhost:3000 можно открывать https://myapp.localhost. Из коробки поддерживает HTTPS и HTTP/2.
Warp — открыли исходный код
Warp, терминал с Rust, который, как и Zed, прошел большой путь от "мы просто очень быстрый терминал" через "Мы терминал++ - следующее поколение терминалов с крутыми фичами" до "мы теперь AI IDE". Warp выложили исходники в опенсорс.
——————————————
Спасибо что читаете, ставите реакции, отмечаетесь в комментариях и рассказываете о канале друзьям и коллегам.
——————————————
Я работаю в Т-Банке и у нас идет активный найм. Если вам интересна работа в Т-Банке - переходите по ссылке и пишите в личку - отвечу на любые вопросы | 1 467 |
| 17 | Warp — открыли исходный код
Warp, терминал с Rust, который, как и Zed, прошел большой путь от "мы просто очень быстрый терминал" через "Мы терминал++ - следующее поколение терминалов с крутыми фичами" до "мы теперь AI IDE". Warp выложили исходники в опенсорс.
Это круто, т.к. лично я считаю, что warp - самый удобный терминал для работы. Банальный textarea, который ведет себя также как редактирование кода в IDE, выводит опыт работы с терминалом на следующий уровень.
https://github.com/warpdotdev/warp
#development #warp #terminal #open-source #rust #ai | 1 477 |
| 18 | portless
Утилита от Vercel Labs, которая открывает урлы вида http://localhost:3000 на именованных доменах .localhost. Например, вместо http://localhost:3000 можно открывать https://myapp.localhost. Из коробки поддерживает HTTPS и HTTP/2.
Работает просто:
portless myapp dev # https://myapp.localhost
portless сам выпустит сертификат и даст доступ к https. Поддерживаются разные фреймворки, порты, под-домены, монорепозитории.
Из интересного - подхват git worktree. Если portless видит, что приложение запущено из worktree, то название worktree становится именем домена
https://github.com/vercel-labs/portless
#development #tools #localhost #vercel #devtools #github | 3 191 |
| 19 | spawn-agent
Библиотека, использующая Vercel AI SDK для запуска локальных AI-агентов на компьютере через Agent Client Protocol. Поддерживает Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode, Factory Droid, Pi.
Пример запуска с кастомными cwd, разрешениями и mcp
import { generateText } from "ai";
import { spawnAgent } from "spawn-agent";
const { text } = await generateText({
model: spawnAgent("codex", {
cwd: "/Users/me/project",
permission: "auto-allow",
mcpServers: [
{
type: "stdio",
name: "filesystem",
command: "npx",
args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
},
],
}),
prompt: "Summarize README.md in three bullets",
});
https://github.com/millionco/spawn-agent
#development #ai #agents #acp #vercel #github | 1 217 |
| 20 | Дайджест за 2026-05-11 - 2026-05-15
How we made the Angular Compiler faster using AI
VoidZero сделали эксперимент — с помощью ИИ сделали компилятор Angular на Rust (на базе Oxc). Итоговые цифры: в 6 раз быстрее чем Angular CLI и в 20 раз быстрее Webpack + @ngtools/webpack на Bitwarden.
The Prompt API
Команда Chrome встроила API для работы с локальным Gemini
Zed is 1.0
Редактор Zed прошел огромный путь и наконец-то получил версию 1.0. Пять лет разработки, собственный UI-фреймворк GPUI на Rust, своя архитектура без Electron.
——————————————
Спасибо что читаете, ставите реакции, отмечаетесь в комментариях и рассказываете о канале друзьям и коллегам.
——————————————
Я работаю в Т-Банке и у нас идет активный найм. Если вам интересна работа в Т-Банке - переходите по ссылке и пишите в личку - отвечу на любые вопросы | 954 |
