Post Syndicated from Oglaf! -- Comics. Often dirty. original https://www.oglaf.com/show-business/
VMware ESXi 8.0U3e Now Has a Free Version How to Get It
Post Syndicated from Eric Smith original https://www.servethehome.com/broadcom-vmware-esxi-8-0u3e-now-has-a-free-version/
Broadcom brought back a VMware ESXi 8 free version now that you can download VMware ESXi 8.0U3 without subscribing
The post VMware ESXi 8.0U3e Now Has a Free Version How to Get It appeared first on ServeTheHome.
Comic for 2025.04.12 – Neil Armstrong
Post Syndicated from Explosm.net original https://explosm.net/comics/neil-armstrong
New Cyanide and Happiness Comic
Седмицата (7–12 април)
Post Syndicated from Светла Енчева original https://www.toest.bg/siedmitsata-7-12-april/

Докато разсъждавам върху въпроса, който Боряна Телбис задава в предишния бюлетин – дали сме живи, или не, – 16-годишно момче падна от петия етаж на столична професионална гимназия. Лекарите се борят за живота му. Засега основната хипотеза е, че тийнейджърът е скочил сам. Новината мина някак между другото. Лесно е да сочим с пръст виновници за деца жертви и да искаме по-строги наказания. Лесно е да се опитваме да „поправяме“ учениците със сила – като ги накараме да зубрят православни догми и им слагаме оценки за дисциплина. Или по соломоновски да „разрязваме“ децата на две – с необмислени закони за т.нар. споделено родителство. По-трудно е да разберем какво се случва в умовете и душите им.
Това е въпросът, който поставя британският минисериал Adolescence („Юношество“). Четирите му епизода станаха повод за сериозни разговори и в Европа, и в САЩ – за това как възрастните не разбират поколението Z, за токсичната мъжественост, за емпатията… В България обаче тези разговори така и не стигат до ушите на вземащите решения за бъдещето на децата. Така че, ако искате да поставите интереса на учениците в центъра на образованието, имате по-голям шанс за успех в някое шведско училище, отколкото тук.
И все пак в България има хора с ясна идея каква би трябвало да бъде образователната система. Донка Дойчева-Попова разговаря с три специалистки по преподаването на чужди езици, които са в час със съвременните методи в областта си – Мария Караиванова, Смиляна Ангелова и Ирина Мартинова.
Като стана дума за образование, се замислих и за американските университети от т.нар. Бръшлянова лига. Ореолът им рязко започна да потъмнява, когато администрацията на Тръмп взе да им реже държавното финансиране – било заради студентски протести в подкрепа на Палестина, било защото подкрепят разнообразието и социалното включване. Това е и темата на статията на Яна Хашъмова „Политика, просвета и провал. Кой се страхува от американските университети?“. В нея авторката развива тезата, че президентът Тръмп е емоционално незрял и се държи като тийнейджър.
Притеснявам се, че ако споделя чуденията си в коя ли фаза от психосексуалното развитие по Фройд се намира Доналд Тръмп, този бюлетин може да стане неприличен. В същото време самият американски президент се хвали колко държави му „целуват задника“ (не, няма да цензурирам думите на един държавен глава със звездички) заради митата, с които ги заплашва. Представете си как някой комплексар взема заложници и непрекъснато променя условията за освобождаването им, за да му звънят по телефона, а той да се кефи колко е важен и как всички му се молят. Е, в случая целият свят е взет за заложник.
От драмата с митата (тя вече заприлича на сапунена опера) се замислих дали протекционизмът е патриотичен. Всяка година преди Великден новинарските емисии изобилстват от репортажи за „лошите“ вносни яйца и агнешко. Но по-добре ли ще живеем, ако в България нищо не се внася, а се произвеждат и потребяват само български продукти? Представете си живот без кафе и шоколад, но с български смартфони, компютри и операционни системи. Ако изобщо е възможно да се направят тук.
Ала всякакви популистки идеи могат да намерят почва, когато хората не вярват в институциите. За плаващите пясъци на институционалното недоверие е и статията на Валентин Вълканов. Колкото повече ни се обяснява, че така стоят нещата, толкова по-силно се убеждаваме, че те изобщо не са наред, казва авторът. Поводът за този безрадостен извод е решението на Конституционния съд след проверката на изборната документация в 2204 секции. От нея българските граждани разбраха, че не трябва да вярват на очите си и изобщо – че всичко е относително.
Изобщо – държавата ни е престъпник, смята Емилия Милчева. Когато бащата на поредното дете, загинало на пътя – Сияна, казва, че българската държава е опасна за гражданите си, това е истина. Най-лесно е да се хвърли цялата вина върху един шофьор. Но проблемът с некачествените ремонти на пътищата е огромен, а политици и институции си прехвърлят топката. Колко от милиардите, отпуснати за пътища в последните 15 години, действително са вложени в пътища, а не в чували, пита Емилия.
И все пак в България има хора, които са решили да се борят и да не се предават, колкото и да е трудно. Ина Иванова ни среща с една от тях – Диана Димова от „Мисия Криле“, за която пролетта започва от една птичка. Тя е посветила живота си на най-уязвимите – жени и деца в риск, бежанци. Заедно с колегите си се опитва да усилва гласа на онези, които нямат такъв, или пък той е много тих. Колкото и трудно и рисковано да е това.
Едни защитават членове на уязвими групи, други – едри бизнес интереси. Анахит Хачикян обяснява мръсна дума ли е лобизмът и кога играта загрубява. Всяка организация, която работи за дадена кауза и цели да повлияе в процеса на вземане на политически решения, е вид лобистка организация и в това само по себе си няма нищо лошо, казва Анахит. Лобирането обаче трябва да се извършва по определени правила. Когато политици биват подкупвани със скъпи подаръци и луксозни пътувания, за да вземат някакво решение, вече имаме проблем.
Но да си отпуснем душата с десетия епизод на Т.Е. от Е.Т. Любимата ни Елена Телбис няма да ни излъже, че всичко е наред, но поне ще се посмеем.
Не знам за смях ли е, или за сълзи, но Националният исторически музей има проблем със съвременното изкуство. Поне в степента, в която то е провокативно. Затова инсталацията „Гранични цветя“ на Иван Мудов е премахната от двора на НИМ още преди официалното ѝ откриване, без дори художникът да бъде уведомен за това. От музея очаквали хубавки найлонови цветя, а дворът им се оказал осеян с „отпадъци“. Тази история ми припомни как преди десетина години парчето от Берлинската стена пред НДК беше „почистено“ от графитите си и измазано със сива боя.
По традиция завършвам с препоръка.
Ако познавате млади хора, които не помнят социализма, но са убедени, че тогава хората са живели по-добре, пуснете им латвийския сериал „Съветски дънки“. Препоръчвам го и на всички, които искат да разберат тоталитарния режим отпреди 1989 г., както и на онези, които имат нужда да си го припомнят. Липсата на свобода каква музика да слушаш и какви дрехи да носиш, ченгетата, които те следят навсякъде, корупцията и неравенството, които уж ги нямаше, насилието над личността…
Сериалът, съсценаристка на който е българката Теодора Маркова, е нещо като среща на „1984“ и „Полет над кукувиче гнездо“. И докато зрителят се чуди дали всъщност гледа комедия, или драма, го халосва по главата финал, който не се вписва в стереотипите за хепиенд, и все пак е оптимистичен.
Винаги препоръчвам да ни ударите едно рамо, ако искате да ни четете и гледате. Защото благодарение на подкрепата ви съществуваме.
The LGM-30 Minuteman
Post Syndicated from The History Guy: History Deserves to Be Remembered original https://www.youtube.com/watch?v=sRh-0jB5q6w
[$] Managing multiple sources of page-hotness data
Post Syndicated from corbet original https://lwn.net/Articles/1016722/
Knowing how frequently accessed a page of memory is (its “hotness”) is a
key input to many memory-management heuristics. Jonathan Cameron, in a
memory-management track at the 2025 Linux Storage, Filesystem,
Memory-Management, and BPF Summit, pointed out that the number of sources
of that kind of data is growing over time. He wanted to explore the
questions of what commonality exists between data from those sources, and
whether it makes sense to aggregate them all somehow.
Introducing sub-issues: Enhancing issue management on GitHub
Post Syndicated from Shaun Wong original https://github.blog/engineering/architecture-optimization/introducing-sub-issues-enhancing-issue-management-on-github/
Recently we launched sub-issues, a feature designed to tackle complex issue management scenarios. This blog post delves into the journey of building sub-issues, what we learned along the way, how we implemented sub-issues, and the benefits of being able to use sub-issues to build itself.
What are sub-issues?
Sub-issues are a way to break a larger issue into smaller, more manageable tasks. With this feature, you can now create hierarchical lists within a single issue, making it easier to track progress and dependencies. By providing a clear structure, sub-issues help teams stay organized and focused on their goals.
For example, I often realize that a batch of work requires multiple steps, like implementing code in different repositories. Breaking this task into discrete sub-issues makes it easier to track progress and more clearly define the work I need to do. In practice we’ve noticed this helps keep linked PRs more concise and easier to review.

A brief history
Issues have long been at the heart of project management on GitHub. From tracking bugs to planning feature development, issues provide a flexible and collaborative way for teams to organize their work. Over time, we’ve enriched this foundation with tools like labels, milestones, and task lists, all to make project management even more intuitive and powerful.
One of the key challenges we set out to solve was how to better represent and manage hierarchical tasks within issues. As projects grow in complexity, breaking down work into smaller, actionable steps becomes essential. We want to empower users to seamlessly manage these nested relationships while maintaining the simplicity and clarity GitHub is known for.
Our journey toward sub-issues began with a fundamental goal: to create a system that integrates deeply into the GitHub Issues experience, enabling users to visually and functionally organize their work without adding unnecessary complexity. Achieving this required careful design and technical innovation.
Building sub-issues
To build sub-issues, we began by designing a new hierarchical structure for tasks rather than modifying the existing task list functionality. We introduced the ability to nest tasks within tasks, creating a hierarchical structure. This required updates to our data models and rendering logic to support nested sub-issues.
From a data modeling perspective, the sub-issues table stores the relationships between parent and child issues. For example, if Issue X is a parent of Issue Y, the sub-issues table would store this link, ensuring the hierarchical relationship is maintained.
In addition, we roll up sub-issue completion information into a sub-issue list table. This allows us to performantly get progress without having to traverse through a list of sub-issues. For instance, when Issue Y is completed, the system automatically updates the progress of Issue X, eliminating the need to manually check the status of all sub-issues.
We wanted a straightforward representation of sub-issues as relationships in MySQL. This approach provided several benefits, including easier support for sub-issues in environments like GitHub Enterprise Server and GitHub Enterprise Cloud with data residency.
We exposed sub-issues through GraphQL endpoints, which let us build upon the new Issues experience and leverage newly crafted list-view components. This approach provided some benefits, including more efficient data fetching and enhanced flexibility in how issue data is queried and displayed. Overall, we could move faster because we reused existing components and leveraged new components that would be used in multiple features. This was all made possible by building sub-issues in the React ecosystem.
We also focused on providing intuitive controls for creating, editing, and managing sub-issues. To this end, we worked closely with accessibility designers and GitHub’s shared components team that built the list view that powers sub-issues.
Our goal was to make it as easy as possible for users to break down their tasks without disrupting their workflow.
Using sub-issues in practice
Dogfooding is a best practice at GitHub and it’s how we build GitHub! We used sub-issues extensively within our own teams throughout the company to manage complex projects and track progress. Having a discrete area to manage our issue hierarchy resulted in a simpler, more performant experience. Through this hands-on experience, we identified areas for improvement and ensured that the feature met our high standards.
Our teams found that sub-Issues significantly improved their ability to manage large projects. By breaking down tasks into smaller, actionable items, they maintained better visibility and control over their work. The hierarchical structure also made it easier to identify dependencies and ensure nothing fell through the cracks.
Gathering early feedback
Building sub-issues was a team effort. Feedback from our beta testers was instrumental in shaping the final product and ensuring it met the needs of our community. For example, understanding how much metadata to display in the sub-issue list was crucial. We initially started with only issue titles, but eventually added the issue number and repository name, if the issue was from another repository.
Building features at GitHub makes it really easy to improve our own features as we go. It was really cool to start breaking down the sub-issues work using sub-issues. This allowed us to experience the feature firsthand and identify any pain points or areas for improvement. For example, the has:sub-issues-progress and has:parent-issue filters evolved from early discussions around filtering syntax. This hands-on approach ensured that we delivered a polished and user-friendly product.
These lessons have been invaluable in not only improving sub-issues, but also in shaping our approach to future feature development. By involving users early and actively using our own features, we can continue to build products that truly meet the needs of our community. These practices will be important to our development process going forward, ensuring that we deliver high-quality, user-centric solutions.
Call to action
Sub-issues are designed to help you break down complex tasks into manageable pieces, providing clarity and structure to your workflows. Whether you’re tracking dependencies, managing progress, or organizing cross-repository work, sub-issues offer a powerful way to stay on top of your projects.
We’d love for you to try sub-issues and see how they can improve your workflow. Your feedback is invaluable in helping us refine and enhance this feature. Join the conversation in our community discussion to share your thoughts, experiences, and suggestions.
Thank you for being an integral part of the GitHub community. Together, we’re shaping the future of collaborative development!
The post Introducing sub-issues: Enhancing issue management on GitHub appeared first on The GitHub Blog.
PTP Wireless Setup – Come Say Hello!
Post Syndicated from Crosstalk Solutions original https://www.youtube.com/watch?v=k2WzUZfenSs
MikroTik RDS2216-02XG-4S+4XS-2XQ Review A Better SwitchNASServer with a Catch
Post Syndicated from Patrick Kennedy original https://www.servethehome.com/mikrotik-rds2216-02xg-4s4xs-2xq-review-better-switchnasserver-catch-marvell-arm-annapurna-labs/
In our MikroTik RDS2216-02XG-4S+4XS-2XQ we see just how close MikroTik ROSE came to making the ultimate switch, NAS, server, and VPN box
The post MikroTik RDS2216-02XG-4S+4XS-2XQ Review A Better SwitchNASServer with a Catch appeared first on ServeTheHome.
How to Prepare for a Recession
Post Syndicated from The Atlantic original https://www.youtube.com/watch?v=j0XFgbvTyjY
Metasploit Weekly Wrap-Up 04/11/2025
Post Syndicated from Diego Ledda original https://blog.rapid7.com/2025/04/11/metasploit-weekly-wrap-up-04-11-2025/
Spring Exploits

This weekly release of Metasploit Framework includes new RCE exploit modules for several vulnerable applications: Appsmith, a low-code application platform which contains a misconfiguration on PostgreSQL (CVE-2024-55964); Pandora FMS, a monitoring solution, where, once gained access to the administrator panel is possible to inject commands (CVE-2024-12971); Oracle Access Manager, a SSO application containing an unauthenticated deserialization vulnerability (CVE-2021-35587); and pgAdmin Query Tool, a powerful database management tool that let attacker convert database accesses into shells (CVE-2025-2945).
New module content (5)
CrushFTP AWS4-HMAC Authentication Bypass
Authors: Outpost24 and remmons-r7
Type: Auxiliary
Pull request: #20000 contributed by remmons-r7
Path: gather/crushftp_authbypass_cve_2025_2825
AttackerKB reference: CVE-2025-2825
Description: Adds an auxiliary module leveraging CVE-2025-2825, an authentication bypass in CrushFTP 11 < 11.3.1 and 10 < 10.8.4, to obtain working session cookies for the target user account.
Appsmith RCE
Authors: Takahiro Yokoyama and Whit Taylor (Rhino Security Labs)
Type: Exploit
Pull request: #20007 contributed by Takahiro-Yoko
Path: linux/http/appsmith_rce_cve_2024_55964
AttackerKB reference: CVE-2024-55964
Description: This module adds an exploit for CVE-2024-55964, a misconfigured PostgreSQL instance in Appsmith, which can lead to remote code execution (RCE).
Pandora FMS authenticated command injection leading to RCE via chromium_path or phantomjs_bin
Author: h00die-gr3y(https://github.com/h00die-gr3y)
Type: Exploit
Pull request: #20008 contributed by h00die-gr3y
Path: linux/http/pandora_fms_auth_rce_cve_2024_12971
AttackerKB reference: CVE-2024-12971
Description: Module for CVE-2024-12971, command injection in directory settings for PandoraFMS. The module requires admin credentials, but if MySQL with default credentials is exposed, the module creates a new admin profile.
Oracle Access Manager unauthenticated Remote Code Execution
Authors: Jang, Peterjson, Y4er, and sfewer-r7
Type: Exploit
Pull request: #19994 contributed by sfewer-r7
Path: multi/http/oracle_access_manager_rce_cve_2021_35587
AttackerKB reference: CVE-2021-35587
Description: This adds an exploit module for CVE-2021-35587, an unauthenticated deserialization vulnerability affecting Oracle Access Manager (OAM).
pgAdmin Query Tool authenticated RCE (CVE-2025-2945)
Authors: jheysel-r7 and pyozzi-toss
Type: Exploit
Pull request: #20018 contributed by jheysel-r7
Path: multi/http/pgadmin_query_tool_authenticated
AttackerKB reference: CVE-2025-2945
Description: A new module for CVE-2025-2945, authenticated remote code execution in pgAdmin. The vulnerability lies within the Query Tool. For successful exploitation, an attacker needs a set of valid credentials for pgAdmin and credentials for the target database.
Enhancements and features (5)
- #20003 from zeroSteiner – Adds support for the LDAP protocol within RHOSTS, for example:
use auxiliary/gather/ldap_queryandrun ldap://domain.local;Administrator:[email protected]/dc=domain,dc=local action=ENUM_ACCOUNTS. - #20006 from cgranleese-r7 – Adds additional metadata to the
phpbb_highlightandms10_061_spoolssmodules. - #20015 from adfoster-r7 – Metasploit will now no longer attempt to load external modules with unsupported runtimes as it caused crashes to occur. Now users are notified if they are required to install Go or Python3.
- #20019 from adfoster-r7 – Improves metadata and enhances the APIs for extracting HTTP compatible login scanners.
- #20024 from cgranleese-r7 – Adds a new
sslkeylogfiledatastore option to HTTP modules to support decrypting SSL/TLS network traffic.
Bugs fixed (1)
- #20013 from sjanusz-r7 – Fixes a crash when using the module search cache with an integer.
Documentation
You can find the latest Metasploit documentation on our docsite at docs.metasploit.com.
Get it
As always, you can update to the latest Metasploit Framework with msfupdate
and you can get more details on the changes since the last blog post from
GitHub:
If you are a git user, you can clone the Metasploit Framework repo (master branch) for the latest.
To install fresh without using git, you can use the open-source-only Nightly Installers or the
commercial edition Metasploit Pro
Хронология на прикриването на чадъра над контрабандата
Post Syndicated from Bozho original https://blog.bozho.net/blog/4475
На 1-ви април чрез БОЕЦ са публикувани чатове между служители и ръководители в ГДБОП, от които става ясно, че ръководители са опитали да спрат операция срещу контрабандни цигари. От публикуваната информация става ясно и че един от контрабандистите получава обаждане по време на операцията, което дава възможност на замесените да избягат. От публичната информация и от разследвания на журналисти става ясно, че замесени в канала са хора, свързани с Пеевски. Оттогава от ДБ предприемаме редица парламентарни действия, които намират само частично и разпокъсано медийно отразяване, поради което ще ги обобщя тук. На всеки етап правим изявления пред медиите и оборваме твърденията на управляващите.
1. На 01.04 колегата Ивайло Мирчев задава три парламентарни въпроса на министъра на вътрешните работи: 1-ви, 2-ри и 3-ти. Днес, 11.04, по правилник трябваше да е получен отговор. Такъв не е получен до края на работния ден.
2. Също на 01.04 аз изпращам искане за документи до МВР, в т.ч. номера на прокурорска преписка и/или на досъдебно производство по случая, както и доклада, който министърът каза, че е бил изпратен до ГДБОП и прокуратурата (в случай, че не представлява следствена тайна), както и с какъв гриф за сигурност е бил създаден. Срокът е 14-дневен, отговор все още няма.
3. На 03.04 има заседание на комисията по вътрешна сигурност. На комисията става две неща:
3.1. В рамките на т.нар. „блиц контрол“ на министъра (който се провежда всяка първа седмица в комисия) задавам два въпроса на министъра, като първият е по-обширен и министърът отговаря, че има отстранени от МВР служители, вкл. че заместник-директорът на ГДБОП е отстранен на 02.04 (т.е. предишния ден, когато Борисов казва в кулоарите, че съветва министъра да „разчисти“). Вторият ми въпрос е дали заместник-директорът на ГДБОП (който по изнесените данни е опитал да спре операцията) е бил преназначен, временно отстранен за дисцирплинарна проверка, или освободен от МВР (за да сме терминологично точни). Оказва се, че всъщност е преназначен на друга позиция. Пускам статус във фейсбук, като в реално време министърът го прочита, взема думата в комисия и обяснява как не съм прав, че така прикриват зам-директора.
3.2. Преди комисията внасям проект за решение на комисията, за да ни предостави МВР цялата документация, която е класифицирана (т.е. държавна тайна), както се изисква от чл. 39, ал. 3, т. 2 от Закона за защита на класифицираната информация – че народните представители имат право на достъп до такава информация само при решение на комисия или решение на самия парламент. Председателят на комисията Маноил Манев от ГЕРБ обяснява, че такова решение не може да има и ГЕРБ и Ново начало (може би и БСП) гласуват против допустимостта на решението. Манев отказва да ми даде думата няколко пъти, вкл. след гласуването и закрива заседанието, като аз казвам, че прикриват информация за контрабанда.
4. На следващия ден (04.04) внасяме проект за решение на Народното събрание за същото – да ни бъде предоставена тази информация – всички доклади, документи по дисциплинарните производства и друга относима информация. В решението отбелязваме и че в случай, че информацията е следствена тайна (освен, че е класифицирана), следва министърът да поиска разрешение от прокуратурата за нейното изпращане (съгласно чл. 198 от Наказателно-процесуалния кодекс). В мотивите отбелязваме, че смятаме, че решението не следва да се разпределя на комисия, а да се гласува в зала, тъй като е по процедурен въпрос – процедурата в чл. 39, ал. 3, т. 2 от ЗЗКИ. Председателят Киселова все пак го разпределя на Комисията по вътрешна сигурност.
5. Във вторник (08.04) внасяме изслушване на министъра на вътрешните работи и на 8-те полицаи, участвали в операцията на терен.
6. В сряда (09.04) се гласува дневния ред за седмицата, като Киселова прочита писмо от министъра на вътрешните работи, който не е в София и не може да участва. Въпреки това, цялата опозиция + БСП гласуват „за“ изслушването и точката е приета. На трибуната излиза Костадин Ангелов, иска прегласуване и казва, че министърът го няма. Колегата Йордан Иванов излиза за процедура и казва, че не ни пречи, че министърът го няма – ще се задоволим със заместник министър (както по друго изслушване, което беше гласувано малко по-рано), и че са ни важни 8-те полицаи. На прегласуването Костадин Ангелов от ГЕРБ прави знак на БСП с пръст надолу и БСП (с изключение на двама, доколкото знам пловдивски депутати) обръщат гласуването си.
7. Отново в срада, колегата Йордан Иванов анонсира, че рокадите в ГДБОП в Пловдив са фиктивни – че на мястото на отстранен началник, е назначен нов такъв, който обаче е много близък до първия, т.е. смяната е проформа. Министър Митов от Търговище ехидно обяснява как лъжем и нищо не разбираме. Но се оказва, че са го подвели и има такава заповед за назначаване.
8. В четъвъртък (10.04) предстои заседание на комисията по вътрешна сигурност. В дневния ред председателят от ГЕРБ не е влкючил проекта за решение за задължаване на министъра на вътрешните работи да предостави докладите. Правим брифинг, на който казваме, че ще предложим в дневния ред на комисията да бъде включена тази точка и каня медиите на комисия. Половин час по-късно председателят на комисията отменя заседанието поради здравословни причини. Пиша в групата на комисията, че може да води заместник-председател, но заседанието е отменено.
9. Преди края на заседанието на 10.04 правя процедурно предложение от трибуната – председателят Киселова да свика заседание на Комисията по вътрешна сигурност и обществен ред с тази точка, тъй като председателят Манев не може да присъства и я е отменил. След това изпращам официално писмо на Кислова за същото. Тя не свиква заседание.
10. Днес (11.04) Иво Мирчев чете декларация от трибуната, в която обвинява ГЕРБ и мнозинството в прикриване на информация за контрабандния канал на Пеевски, като споделя част от горната хронология. След това председателя на комисията по вътрешна сигурност Маноил Манев идва при него в пленарна зала да му се кара, че е споменал от трибуната, че се е разболял. Аз казвам да свика заседанието днес. Той отговаря „свиквай си го сам“ (което нямам право като член на комисията).
11. Отново днес, след горната случка, излизам на трибуната и правя предложение – председателя на парламента (Киселова) или председателя на вътрешната комисия (Манев) да свикат заседанието днес, за да не се бавим. Те отказват, като Манев обяснява, че следващата седмица ще го разгледаме в редовното заседание на комисията, в последния работен ден преди ваканцията.
Очевидно и за непознаващите парламентарните процедури, че мнозинството опитва да прикрие документите за контрабандата. Забавянето във времето има две цели 1) темата да бъде забравена покрай празниците и 2) всеки един документ, който още не е следствена тайна, да попадне под нейния обхват. Например, това са дисцриплинарните производства, които вероятно не са част от досъдебното производство, но очаквам в осигурения от ГЕРБ времеви прозорец вече да са приобщени.
ГЕРБ, с разпореждания към останалите партньори в мнозинството им с ДПС Ново начало, успешно отлагат разкриването на информация и прикриват контрабандния канал, за който се твърди, че е на Пеевски. И видимо са много нервни от това.
Ние ще продължим да изискваме всичко по тази тема и да я държим, доколкото можем, във фокуса на общественото внимание, защото не може в европейска държава да се случват такива неща. И нашата роля като опозиция е да искаме информация, отчетност и отговорност от управляващите. Особено когато съзнателно прикриват какво се е случило.
Материалът Хронология на прикриването на чадъра над контрабандата е публикуван за пръв път на БЛОГодаря.
[$] Inlining kfuncs into BPF programs
Post Syndicated from daroc original https://lwn.net/Articles/1016712/
Eduard Zingerman presented a daring proposal that “makes sense if you think
” at the 2025 Linux Storage, Filesystem,
about it a bit
Memory-Management, and BPF Summit. He wants to inline
performance-sensitive kernel functions
into the BPF programs that call them. His
prototype does not yet address all of the design problems inherent in that idea,
but it did spark a lengthy discussion about the feasibility of his proposal.
Simplifying Code Documentation with Amazon Q Developer
Post Syndicated from Jehu Gray original https://aws.amazon.com/blogs/devops/simplifying-code-documentation-with-amazon-q-developer/
In the fast-paced world of software development, maintaining comprehensive documentation often falls to the bottom of priority lists in favor of delivering functionality. Amazon Q Developer’s /doc agent changes this equation by automating README generation and updates. With this tool, the variable of time spent producing documentation is reduced to the point that it’s no longer a burden to the detriment of functionality.
Understanding Amazon Q Developer’s Documentation Generation
The /doc agent leverages generative AI to analyze your codebase and generate comprehensive documentation. Additionally, the agent respects your .gitignore file and excludes files you don’t want to be included in documentation review.
Solution Overview:
As an example, imagine a cloud infrastructure team at a technology consultancy had been working for weeks on their AWS DataSync project. The solution they built provided an elegant CDK implementation that automated data transfer between Amazon S3 buckets using AWS DataSync. The lead engineer had just finished implementing the final IAM role configurations when the product manager requested comprehensive documentation for the next day’s client handoff meeting. The team realized this would typically take hours of focused work. Instead, they decided to try Amazon Q Developer /doc agent.
Getting Started with /doc:
To begin using the /doc agent, you’ll need to:
- Set up Amazon Q: Follow these steps
- Open your IDE with the Amazon Q extension installed
- Click the Amazon Q icon to open the chat panel
- Enter /doc to start the documentation process
- Select your documentation task:
- Create a new README
- Update an existing README with recent code changes
Figure 1 – Entering /doc to start the documentation process.
Example: Creating a New README:
For projects without documentation, simply select: Create a README. It will confirm the project you are creating the README for.
Figure 2 – Select the Create a README option.
Once you verify the folder and select yes, the agent begins creating the README document for the folder.
Here are the steps it works through: scanning the source files, summarizing the source files, and generating the documentation.
Figure 3 – Verify the folder and select yes.
When the document is created, you can preview the README file. The agent then presents you with the ability to either accept the changes or request modifications before implementation.
Figure 4 – Preview the created README file.
If you choose to accept, the README file is added to your project.
Figure 5 – Accept the changes so the README is added to your project folder.
Example: Updating Documentation with Code Changes
When your code evolves, you can keep the documentation synchronized by using /doc. The agent will review your recent code modifications and suggest appropriate documentation updates.
Figure 6 – Select Update an existing README to make changes to a README file.
Then you can describe the changes you want the agent to make to your README file.
Figure 7 – Describe changes to your README files.
For targeted documentation updates, you can provide specific instructions:
Figure 8 – Verify the folder and select yes.
Once you’ve made the changes, the agent asks you to verify them by selecting yes.
Figure 9 – Verify the changes and select yes.
Advanced Documentation Management
Multi-step Documentation Refinement:
Figure 10 – Multi-step Documentation Refinement.
Amazon Q Developer /doc agent allows for iterative improvement of your documentation through feedback loops. After generating initial documentation, you can:
- Review the generated content for gaps or inaccuracies
- Provide specific feedback to refine particular sections
- Request additional sections on complex topics
- Gradually build comprehensive documentation through multiple iterations
This iterative approach is particularly valuable for complex projects where documentation needs to evolve alongside the codebase.
Documentation for Specific Components
For modular projects, you can create targeted documentation at different levels:
- Root-level README for project overview
- Component-level READMEs for specific modules
- Service-level documentation for microservices
- API documentation for interfaces
By combining these documentation levels, you can maintain a hierarchical documentation structure that remains manageable and specific.
Handling Documentation Inheritance
Figure 11 – Handling Documentation Inheritance.
When working with derived or extended codebases:
- Generate base documentation for the parent project
- Create specialized documentation for extensions
- Cross-reference related documentation to maintain consistency
- Use the /doc agent to update specific sections when inheritance patterns change
Documentation Syncing Strategy
Figure 12 – Documentation Syncing Strategy.
For teams working on rapidly evolving projects:
- Establish a documentation update schedule aligned with sprints
- Assign documentation reviews as part of code review processes
- Use /doc to generate change summaries after significant updates
- Implement a verification process to ensure generated documentation accurately reflects code changes
Best Practices for /doc Agent
To improve results from documentation generation with Amazon Q Developer, follow these best practices:
- Optimize repository size: Amazon Q Developer supports documentation generation across your codebase, accommodating projects up to the specified size limits. While documentation for larger repositories may require additional processing time and could provide more generalized results, you have the option to request documentation for specific subsets of code or individual files to receive more detailed insights.
- Maintain high-quality code: The quality of documentation Amazon Q Developer generates improves significantly when your code is well-commented and organized, has meaningful naming conventions for programming entities, and follows standard coding conventions.
- Be specific with change requests: When requesting specific README changes in natural language, choose to update an existing README and select the option to make a specific change. After initial documentation generation, you can request additional modifications by describing exactly what updates you want.
- Craft effective change descriptions: When describing desired updates, include:
- Specific sections you want to modify
- Exact content you want to add or remove
- Particular issues that need correcting
- How project functionality should be reflected in the README
- References to content available in your codebase.
- Understand system limitations: Amazon Q Developer doesn’t have access to private or internal platforms and might lack knowledge of third-party tools, specialized software, or custom tooling in your code. Content requiring this knowledge won’t be documented automatically. In these cases, you’ll need to manually edit the README to include information Amazon Q Developer cannot generate.
Documentation Quotas and Limitations
When working with Amazon Q Developer /doc agent, be aware of these important constraints:
- Document generations per task: There’s a limit to the number of feedback iterations allowed per documentation session. This quota resets each time you start a new documentation task.
- File filtering: Amazon Q Developer filters out files or folders defined in your .gitignore file. This helps streamline the documentation process by focusing only on relevant code files.
Conclusion
Amazon Q Developer /doc agent transforms the documentation process from a tedious chore to an automated, efficient workflow. By generating and maintaining READMEs based on your actual code, it ensures documentation remains accurate and up-to-date without consuming precious development time.
As part of Amazon Q Developer’s free tier, the /doc agent is readily available to integrate into your development process. Start using it today to improve your project documentation and enhance team collaboration.
About the Authors:
Reolink Home Hub + Argus PT Ultra = Perfect Match?
Post Syndicated from BeardedTinker original https://www.youtube.com/watch?v=kYWW1BCHKPI
Simple, scalable, and global: Containers are coming to Cloudflare Workers in June 2025
Post Syndicated from Mike Nomitch original https://blog.cloudflare.com/cloudflare-containers-coming-2025/
It is almost the end of Developer Week and we haven’t talked about containers: until now. As some of you may know, we’ve been working on a container platform behind the scenes for some time.
In late June, we plan to release Containers in open beta, and today we’ll give you a sneak peek at what makes it unique.
Workers are the simplest way to ship software around the world with little overhead. But sometimes you need to do more. You might want to:
-
Run user-generated code in any language
-
Execute a CLI tool that needs a full Linux environment
-
Use several gigabytes of memory or multiple CPU cores
-
Port an existing application from AWS, GCP, or Azure without a major rewrite
Cloudflare Containers let you do all of that while being simple, scalable, and global.
Through a deep integration with Workers and an architecture built on Durable Objects, Workers can be your:
-
API Gateway: Letting you control routing, authentication, caching, and rate-limiting before requests reach a container
-
Service Mesh: Creating private connections between containers with a programmable routing layer
-
Orchestrator: Allowing you to write custom scheduling, scaling, and health checking logic for your containers
Instead of having to deploy new services, write custom Kubernetes operators, or wade through control plane configuration to extend the platform, you just write code.
Let’s see what it looks like.
First, let’s take a look at a stateful example.
Imagine you are building a platform where end-users can run code generated by an LLM. This code is untrusted, so each user needs their own secure sandbox. Additionally, you want users to be able to run multiple requests in sequence, potentially writing to local files or saving in-memory state.
To do this, you need to create a container on-demand for each user session, then route subsequent requests to that container. Here’s how you can accomplish this:
First, you write some basic Wrangler config, then you route requests to containers via your Worker:
import { Container } from "cloudflare:workers";
export default {
async fetch(request, env) {
const url = new URL(request.url);
if (url.pathname.startsWith("/execute-code")) {
const { sessionId, messages } = await request.json();
// pass in prompt to get the code from Llama 4
const codeToExecute = await env.AI.run("@cf/meta/llama-4-scout-17b-16e-instruct", { messages });
// get a different container for each user session
const id = env.CODE_EXECUTOR.idFromName(sessionId);
const sandbox = env.CODE_EXECUTOR.get(id);
// execute a request on the container
return sandbox.fetch("/execute-code", { method: "POST", body: codeToExecute });
}
// ... rest of Worker ...
},
};
// define your container using the Container class from cloudflare:workers
export class CodeExecutor extends Container {
defaultPort = 8080;
sleepAfter = "1m";
}
Then, deploy your code with a single command: wrangler deploy. This builds your container image, pushes it to Cloudflare’s registry, readies containers to boot quickly across the globe, and deploys your Worker.
$ wrangler deploy
That’s it.
How does it work?
Your Worker creates and starts up containers on-demand. Each time you call env.CODE_EXECUTOR.get(id) with a unique ID, it sends requests to a unique container instance. The container will automatically boot on the first fetch, then put itself to sleep after a configurable timeout, in this case 1 minute. You only pay for the time that the container is actively running.
When you request a new container, we boot one in a Cloudflare location near the incoming request. This means that low-latency workloads are well-served no matter the region. Cloudflare takes care of all the pre-warming and caching so you don’t have to think about it.
This allows each user to run code in their own secure environment.
Stateless and autoscaling applications work equally well on Cloudflare Containers.
Imagine you want to run a container that takes a video file and turns it into an animated GIF using FFmpeg. Unlike the previous example, any container can serve any request, but you still don’t want to send bytes across an ocean and back unnecessarily. So, ideally the app can be deployed everywhere.
To do this, you declare a container in Wrangler config and turn on autoscaling. This specific configuration ensures that one instance is always running and if CPU usage increases beyond 75% of capacity, additional instances are added:
"containers": [
{
"class_name": "GifMaker",
"image": "./Dockerfile", // container source code can be alongside Worker code
"instance_type": "basic",
"autoscaling": {
"minimum_instances": 1,
"cpu_target": 75,
}
}
],
// ...rest of wrangler.jsonc...
To route requests, you just call env.GIF_MAKER.fetch and requests are automatically sent to the closest container:
import { Container } from "cloudflare:workers";
export class GifMaker extends Container {
defaultPort: 1337,
}
export default {
async fetch(request, env) {
const url = new URL(request.url);
if (url.pathname === "/make-gif") {
return env.GIF_MAKER.fetch(request)
}
// ... rest of Worker ...
},
};
From the examples above, you can see that getting a basic container service running on Workers just takes a few lines of config and a little Workers code. There’s no need to worry about capacity, artifact registries, regions, or scaling.
For more advanced use, we’ve designed Cloudflare Containers to run on top of Durable Objects and work in tandem with Workers. Let’s take a look at the underlying architecture and see some of the advanced use cases it enables.
Routing to containers is enabled using Durable Objects under the hood. In the examples above, the Container class from cloudflare:workers just wraps a container-enabled Durable Object and provides helper methods for common patterns. In the rest of this post, we’ll look at examples using Durable Objects directly, as this should shed light on the platform’s underlying design.

Each Durable Object acts as a programmable sidecar that can proxy requests to the container and manages its lifecycle. This allows you to control and extend your containers in ways that are hard on other platforms.
You can manually start, stop, and execute commands on a specific container by calling RPC methods on its Durable Object, which now has a new object at this.ctx.container:
class MyContainer extends DurableObject {
// these RPC methods are callable from a Worker
async customBoot(entrypoint, envVars) {
this.ctx.container.start({ entrypoint, env: envVars });
}
async stopContainer() {
const SIGTERM = 15;
this.ctx.container.signal(SIGTERM);
}
async startBackupScript() {
await this.ctx.container.exec(["./backup"]);
}
}
You can also monitor your container and run hooks in response to Container status changes.
For instance, say you have a CI job that runs builds in a Container. You want to post a message to a Queue based on the exit status. You can easily program this behavior:
class BuilderContainer extends DurableObject {
constructor(ctx, env) {
super(ctx, env)
async function onContainerExit() {
await this.env.QUEUE.send({ status: "success", message: "Build Complete" });
}
async function onContainerError(err) {
await this.env.QUEUE.send({ status: "error", message: err});
}
this.ctx.container.start();
this.ctx.container.monitor().then(onContainerExit).catch(onContainerError);
}
async isRunning() { return this.ctx.container.running; }
}
And lastly, if you have state that needs to be loaded into a container each time it runs, you can use status hooks to persist state from the container before it sleeps and to reload state into the container after it starts:
import { startAndWaitForPort } from "./helpers"
class MyContainer extends DurableObject {
constructor(ctx, env) {
super(ctx, env)
this.ctx.blockConcurrencyWhile(async () => {
this.ctx.storage.sql.exec('CREATE TABLE IF NOT EXISTS state (value TEXT)');
this.ctx.storage.sql.exec('INSERT INTO state (value) SELECT '' WHERE NOT EXISTS (SELECT * FROM state)');
await startAndWaitForPort(this.ctx.container, 8080);
await this.setupContainer();
this.ctx.container.monitor().then(this.onContainerExit);
});
}
async setupContainer() {
const initialState = this.ctx.storage.sql.exec('SELECT * FROM state LIMIT 1').one().value;
return this.ctx.container
.getTcpPort(8080)
.fetch("http://container/state", { body: initialState, method: 'POST' });
}
async onContainerExit() {
const response = await this.ctx.container
.getTcpPort(8080)
.fetch('http://container/state');
const newState = await response.text();
this.ctx.storage.sql.exec('UPDATE state SET value = ?', newState);
}
}
Not only do Durable Objects allow you to have fine-grained control over the Container lifecycle, the whole Workers platform allows you to extend routing and scheduling behavior as you see fit.
Workers provide programmable ingress logic from over 300 locations around the world. In this sense, they provide similar functionality to an API gateway.
For instance, let’s say you want to route requests to a different version of a container based on information in a header. This is accomplished in a few lines of code:
export default {
async fetch(request, env) {
const isExperimental = request.headers.get("x-version") === "experimental";
if (isExperimental) {
return env.MY_SERVICE_EXPERIMENTAL.fetch(request);
} else {
return env.MY_SERVICE_STANDARD.fetch(request);
}
},
};
Or you want to rate limit and authenticate requests to the container:
async fetch(request, env) {
const url = new URL(request.url);
if (url.pathname.startsWith('/api/')) {
const token = request.headers.get("token");
const isAuthenticated = await authenticateRequest(token);
if (!isAuthenticated) {
return new Response("Not authenticated", { status: 401 });
}
const { withinRateLimit } = await env.MY_RATE_LIMITER.limit({ key: token });
if (!withinRateLimit) {
return new Response("Rate limit exceeded for token", { status: 429 });
}
return env.MY_APP.fetch(request);
}
// ...
}

By default, Containers are private and can only be accessed via Workers, which can connect to one of many container ports. From within the container, you can expose a plain HTTP port, but requests will still be encrypted from the end user to the moment we send the data to the container’s TCP port in the host. Due to the communication being relayed through the Cloudflare network, the container does not need to set up TLS certificates to have secure connections in its open ports.
You can connect to the container through a WebSocket from the client too. See this repository for a full example of using Websockets.
Just as the Durable Object can act as proxy to the container, it can act as a proxy from the container as well. When setting up a container, you can toggle Internet access off and ensure that outgoing requests pass through Workers.
// ... when starting the container...
this.ctx.container.start({
workersAddress: '10.0.0.2:8080',
enableInternet: false, // 'enableInternet' is false by default
});
// ... container requests to '10.0.0.2:8080' securely route to a different service...
override async onContainerRequest(request: Request) {
const containerId = this.env.SUB_SERVICE.idFromName(request.headers['X-Account-Id']);
return this.env.SUB_SERVICE.get(containerId).fetch(request);
}
You can ensure all traffic in and out of your container is secured and encrypted end to end without having to deal with networking yourself.

This allows you to protect and connect containers within Cloudflare’s network… or even when connecting to external private networks.
You might require custom scheduling and scaling logic that goes beyond what Cloudflare provides out of the box.
We don’t want you having to manage complex chains of API calls or writing an operator to get the logic you need. Just write some Worker code.
For instance, imagine your containers have a long startup period that involves loading data from an external source. You need to pre-warm containers manually, and need control over the specific region to prewarm. Additionally, you need to set up manual health checks that are accessible via Workers. You’re able to achieve this fairly simply with Workers and Durable Objects.
import { Container, DurableObject } from "cloudflare:workers";
// A singleton Durable Object to manage and scale containers
class ContainerManager extends DurableObject {
scale(region, instanceCount) {
for (let i = 0; i < instanceCount; i++) {
const containerId = env.CONTAINER.idFromName(`instance-${region}-${i}`);
// spawns a new container with a location hint
await env.CONTAINER.get(containerId, { locationHint: region }).start();
}
}
async setHealthy(containerId, isHealthy) {
await this.ctx.storage.put(containerId, isHealthy);
}
}
// A Container class for the underlying compute
class MyContainer extends Container {
defaultPort = 8080;
async onContainerStart() {
// run healthcheck every 500ms
await this.scheduleEvery(0.5, 'healthcheck');
}
async healthcheck() {
const manager = this.env.MANAGER.get(
this.env.MANAGER.idFromName("manager")
);
const id = this.ctx.id.toString();
await this.container.fetch("/_health")
.then(() => manager.setHealthy(id, true))
.catch(() => manager.setHealthy(id, false));
}
}
The ContainerManager Durable Object exposes the scale RPC call, which you can call as needed with a region and instanceCount which scales up the number of active Container instances in a given region using a location hint. The this.schedule code executes a manually defined healthcheck method on the Container and tracks its state in the Manager for use by other logic in your system.
These building blocks let users handle complex scheduling logic themselves. For a more detailed example using standard Durable Objects, see this repository.
We are excited to see the patterns you come up with when orchestrating complex applications built with containers, and trust that between Workers and Durable Objects, you’ll have the tools you need.
Since it is Developer Week 2025, we would be remiss to not talk about Workflows, which just went GA, and Agents, which just got even better.
Let’s finish up by taking a quick look at how you can integrate Containers with these two tools.
You need to download a large file from R2, compress it, and upload it. You want to ensure that this succeeds, but don’t want to write retry logic and error handling yourself. Additionally, you don’t want to deal with rotating R2 API tokens or worry about network connections — it should be secure by default.
This is a perfect opportunity for a Workflow using Containers. The container can do the heavy lifting of compressing files, Workers can stream the data to and from R2, and the Workflow can ensure durable execution.
export class EncoderWorkflow extends WorkflowEntrypoint<Env, Params> {
async run(event: WorkflowEvent<Params>, step: WorkflowStep) {
const id = this.env.ENCODER.idFromName(event.instanceId);
const container = this.env.ENCODER.get(id);
await step.do('init container', async () => {
await container.init();
});
await step.do('compress the object with zstd', async () => {
await container.ensureHealthy();
const object = await this.env.ARTIFACTS.get(event.payload.r2Path);
const result = await container.fetch('http://encoder/zstd', {
method: 'POST', body: object.body
});
await this.env.ARTIFACTS.put(`results${event.payload.r2Path}`, result.body);
});
await step.do('cleanup container', async () => {
await container.destroy();
});
}
}
Lastly, imagine you have an AI agent that needs to spin up cloud infrastructure (you like to live dangerously). To do this, you want to use Terraform, but since it’s run from the command line, you can’t run it on Workers.
By defining a tool, you can enable your Agent to run the shell commands from a container:
// Make tools that call to a container from an agent
const createExternalResources = tool({
description: "runs Terraform in a container to create resources",
parameters: z.object({ sessionId: z.number(), config: z.string() }),
execute: async ({ sessionId, config }) => {
return this.env.TERRAFORM_RUNNER.get(sessionId).applyConfig(config);
},
});
// Expose RPC Methods that call to the container
class TerraformRunner extends DurableObject {
async applyConfig(config) {
await this.ctx.container.getTcpPort(8080).fetch(APPLY_URL, {
method: 'POST',
body: JSON.stringify({ config }),
});
}
// ...rest of DO...
}
Containers are so much more powerful when combined with other tools. Workers make it easy to do so in a secure and simple way.
The deep integration between Workers and Containers also makes it easy to pick the right tool for the job with regards to cost.
With Cloudflare Containers, you only pay for what you use. Charges start when a request is sent to the container or it is manually started. Charges stop after the container goes to sleep, which can happen automatically after a configurable timeout. This makes it easy to scale to zero, and allows you to get high utilization even with highly-variable traffic.
Containers are billed for every 10ms that they are actively running at the following rates:
-
Memory: $0.0000025 per GB-second
-
CPU: $0.000020 per vCPU-second
-
Disk $0.00000007 per GB-second
After 1 TB of free data transfer per month, egress from a Container will be priced per-region. We’ll be working out the details between now and the beta, and will be launching with clear, transparent pricing across all dimensions so you know where you stand.
Workers are lighter weight than containers and save you money by not charging when waiting on I/O. This means that if you can, running on a Worker helps you save on cost. Luckily, on Cloudflare it is easy to route requests to the right tool.
Comparing containers and functions services on paper is always going to be an apples to oranges exercise, and results can vary so much depending on use case. But to share a real example of our own, a year ago when Cloudflare acquired Baselime, Baselime was a heavy user of AWS Lambda. By moving to Cloudflare, they lowered their cloud compute bill by 80%.
Below we wanted to share one representative example that compares costs for an application that uses both containers and serverless functions together. It’d be easy for us to come up with a contrived example that uses containers sub-optimally on another platform, for the wrong types of workloads. We won’t do that here. We know that navigating cloud costs can be challenging, and that cost is a critical part of deciding what type of compute to use for which pieces of your application.
In the example below, we’ll compare Cloudflare Containers + Workers against Google Cloud Run, a very well-regarded container platform that we’ve been impressed by.
Example application
Imagine that you run an application that serves 50 million requests per month, and each request consumes an average 500 ms of wall-time. Requests to this application are not all the same though — half the requests require a container, and the other half can be served just using serverless functions.
|
Requests per month |
Wall-time (duration) |
Compute required |
Cloudflare |
Google Cloud |
|
25 million |
500ms |
Container + serverless functions |
Containers + Workers |
Google Cloud Run + Google Cloud Run Functions |
|
25 million |
500ms |
Serverless functions |
Workers |
Google Cloud Run Functions |
Container pricing
On both Cloud Run and Cloudflare Containers, a container can serve multiple requests. On some platforms, such as AWS Lambda, each container instance is limited to a single request, pushing cost up significantly as request count grows. In this scenario, 50 requests can run simultaneously on a container with 4 GB memory and half of a vCPU. This means that to serve 25 million requests of 500ms each, we need 625,000 seconds worth of compute
In this example, traffic is bursty and we want to avoid paying for idle-time, so we’ll use Cloud Run’s request-based pricing.
|
Price per vCPU second |
Price per GB-second of memory |
Price per 1m requests |
Monthly Price for Compute + Requests |
|
|
Cloudflare Containers |
$0.000020 |
$0.0000025 |
$0.30 |
$20.00 |
|
Google Cloud Run |
$0.000024 |
$0.0000025 |
$0.40 |
$23.75 |
* Comparison does not include free tiers for either provider and uses a single Tier 1 GCP region
Compute pricing for both platforms are comparable. But as we showed earlier in this post, Containers on Cloudflare run anywhere, on-demand, without configuring and managing regions. Each container has a programmable sidecar with its own database, backed by Durable Objects. It’s the depth of integration with the rest of the platform that makes containers on Cloudflare uniquely programmable.
Function pricing
The other requests can be served with less compute, and code written in JavaScript, TypeScript, Python or Rust, so we’ll use Workers and Cloud Run Functions.
These 25 million requests also run for 500 ms each, and each request spends 480 ms waiting on I/O. This means that Workers will only charge for 20 ms of “CPU-time”, the time that the Worker actually spends using compute. This ratio of low CPU time to high wall time is extremely common when building AI apps that make inference requests, or even when just building REST APIs and other business logic. Most time is spent waiting on I/O. Based on our data, we typically see Workers use less than 5 ms of CPU time per request vs seconds of wall time (waiting on APIs or I/O).
The Cloud Run Function will use an instance with 0.083 vCPU and 128 MB memory and charge on both CPU-s and GiB-s for the full 500 ms of wall-time.
|
Total Price for “wall-time” |
Total Price for “CPU-time” |
Total Price for Compute + Requests |
|
|
Cloudflare Workers |
N/A |
$0.83 |
$8.33 |
|
Google Cloud Run Functions |
$1.44 |
N/A |
$11.44 |
* Comparison does not include free tiers and uses a single Tier 1 GCP region.
This comparison assumes you have configured Google Cloud Run Functions with a max of 20 concurrent requests per instance. On Google Cloud Run Functions, the maximum number of concurrent requests an instance can handle varies based on the efficiency of your function, and your own tolerance for tail latency that can be introduced by traffic spikes.
Workers automatically scale horizontally, don’t require you to configure concurrency settings (and hope to get it right), and can run in over 300 locations.
A holistic view of costs
The most important cost metric is the total cost of developing and running an application. And the only way to get the best results is to use the right compute for the job. So the question boils down to friction and integration. How easily can you integrate the ideal building blocks together?
As more and more software makes use of generative AI, and makes inference requests to LLMs, modern applications must communicate and integrate with a myriad of services. Most systems are increasingly real-time and chatty, often holding open long-lived connections, performing tasks in parallel. Running an instance of an application in a VM or container and calling it a day might have worked 10 years ago, but when we talk to developers in 2025, they are most often bringing many forms of compute to the table for particular use cases.
This shows the importance of picking a platform where you can seamlessly shift traffic from one source of compute to another. If you want to rate-limit, serve server-side rendered pages, API responses and static assets, handle authentication and authorization, make inference requests to AI models, run core business logic via Workflows, or ingest streaming data, just handle the request in Workers. Save the heavier compute only for where it is actually the only option. With Cloudflare Workers and Containers, this is as simple as an if-else statement in your Worker. This makes it easy to pick the right tool for the job.
We are collecting feedback and putting the finishing touches on our APIs now, and will release the open beta to the public in late June 2025.
From day one of building Cloudflare Workers, it’s been our goal to build an integrated platform, where Cloudflare products work together as a system, rather than just as a collection of separate products. We’ve taken this same approach with Containers, and aim to make Cloudflare not only the best place to deploy containers across the globe, but the best place to deploy the types of complete applications that developers are building, that use containers in tandem with serverless functions, Workflows, Agents, and much more.
We’re excited to get this into your hands soon. Stay on the lookout this summer.

Startup spotlight: building AI agents and accelerating innovation with Cohort #5
Post Syndicated from Christopher Rotas original https://blog.cloudflare.com/ai-agents-and-innovation-with-launchpad-cohort5/
With quick access to flexible infrastructure and innovative AI tools, startups are able to deploy production-ready applications with speed and efficiency. Cloudflare plays a pivotal role for countless applications, empowering founders and engineering teams to build, scale, and accelerate their innovations with ease — and without the burden of technical overhead. And when applicable, initiatives like our Startup Program and Workers Launchpad offer the tooling and resources that further fuel these ambitious projects.
Cloudflare recently announced AI agents, allowing developers to leverage Cloudflare to deploy agents to complete autonomous tasks. We’re already seeing some great examples of startups leveraging Cloudflare as their platform of choice to invest in building their agent infrastructure. Read on to see how a few up-and-coming startups are building their AI agent platforms, powered by Cloudflare.
Founded in 2023, Lamatic.ai empowers SaaS startups to seamlessly integrate intelligent AI agents into their products. Lamatic.ai simplifies the deployment of AI agents by offering a fully managed lifecycle with scalability and security in mind. SaaS providers have been leveraging Lamatic to replatform their AI workflows via a no-code visual builder to reduce technical debt and ship products faster. Designed for high availability, scalability, and low latency, Lamatic’s architecture enables developers to build AI-driven applications that remain performant under heavy load. After acquiring a high amount of users in a short amount of time on Product Hunt, Lamatic identified there was real interest to solve complex problems with AI Agents, and the team knew they needed to build a solution with scalability and performance in mind.
Cloudflare plays a key role in supporting Lamatic’s growth. Powered by Cloudflare Workers, Lamatic ensures requests process closer to end users, minimizing latency while offloading computational strain from centralized servers. In just a few months, Lamatic.ai has efficiently scaled to over three million serverless requests per month, supporting over 1,000 customers — all managed by a lean three-person team.
Customers design their Agent Flows through a no-code visual builder, which generates an interoperable YAML configuration. Sensitive credentials such as API keys and model access tokens are securely encrypted and stored in Workers KV, ensuring they are only decrypted at runtime for enhanced security. All YAML configurations are then compiled into a Workers-compatible JavaScript bundle. When a project is deployed, Lamatic orchestrates critical components like sync jobs for scheduled data ETL operations and incoming webhooks to handle event-driven workflows via Cloudflare Queues. Once deployed, the project is fully operational as a Cloudflare Worker with an exposed API endpoint, allowing customers to integrate AI-powered automation directly into their applications with minimal friction.

To scale out their platform, Lamatic.ai built their architecture isolating serverless and AI logic on a per-customer basis. Rather than batching requests into a centralized cluster, Lamatic.ai distributes workloads across Cloudflare’s global network, ensuring each customer and endpoint is served by its own Worker executing dedicated logic. This per-customer deployment model — enabled by Workers for Platforms — allows Lamatic.ai to deliver customer-specific serverless functions at scale, and reduces technical overhead as they onboard additional customers. Each customer gets a dedicated Worker whose request and rate limits are enabled based on their level of subscription.
Beyond request processing, Lamatic uses Cloudflare Workers KV as a distributed config store to ensure high availability and security. All values are encrypted at rest with AES-256-GCM and decrypted only at runtime, keeping operations both secure and low-latency. Tokens and user credentials are encrypted and stored in the database and KV.
To further enhance performance, Cloudflare Queues plays a key role in orchestrating task completion. Lamatic uses Queues to offload work from Workers requests, and handle tasks such as webhooks and coordinating distributed processes, both essential for maintaining system consistency and reliability at scale. While Workers handle sync requests at point of execution, longer running jobs process via Queues. For example, during a scheduled ETL sync, new data records generated are stored as a message queue on Cloudflare Pub/Sub. A consumer Worker collects these messages and makes an API request to the pod using the Workers Queue. The consumer Worker consumes more messages as each queue is finished processing.
Another example of where this has been optimal is for managing AI workflows. Many AI workflows involve concurrent requests to multiple data sources, Queues streamlines data processing and efficiently feeds information into customers’ Retrieval Augmented Generation (RAG) workflows. This approach smooths out workload spikes, reduces bottlenecks, and ensures that AI agents can reliably aggregate and process data without delays.
Beyond this, Lamatic.ai offers Workers AI as one of the support inference providers that customers can use across their platform. Customers can choose to run one of the many open source models hosted on Workers AI, depending on their use case (chatbot, image generation, voice, etc.). Together, these layers solve the challenges of scaling AI agents by handling high volumes of data, maintaining low-latency responses, and ensuring robust security. With Cloudflare’s infrastructure as its backbone, Lamatic.ai has built a resilient and high-performing platform that meets the rigorous demands of modern AI applications, making it an ideal choice for startups embedding AI-driven features into their products.
Skyward AI is transforming compliance operations by leveraging Cloudflare’s serverless computing capabilities to build AI-driven compliance agents that streamline critical tasks like evidence collection, real-time risk analysis, and policy updates. Compliance teams in fintech, supply chain, and other highly regulated industries use these AI Agents to extract and organize evidence, provide real-time recommendations, and orchestrate policy and procedural updates automatically. By handling document parsing, risk monitoring, and policy enforcement, these AI Agents reduce the risk of human error while allowing compliance professionals to focus on high-value tasks.
Skyward has built an AI agents platform designed with a serverless-first approach, avoiding the constraints of centralized cloud computing. To achieve this, the company leverages Cloudflare’s Developer Platform to create and maintain a highly responsive and scalable infrastructure. Workers handle incoming requests like chat inputs, compliance checks, or authentication, and route them efficiently across multiple geographies. Skyward initially built their AI agents infrastructure using Durable Objects, Workflows and JavaScript-native RPC for AI coordination, but has recently transitioned to Cloudflare’s new AI agents framework. Given that agents provides a framework for building and orchestrating AI agents, the migration has helped Skyward abstract the need to manage Durable Objects manually, significantly reducing time spent on managing these tools. While this release is fairly recent, the transition has helped simplify the way that agents communicate, but it also preserved the benefits of their original design like data privacy, isolation, and concurrency management. This has also made it easier to provide real-time feedback and responses to their end users.
Skyward optimizes real-time compliance automation by achieving sub-100 ms response times for AI agent queries. Workloads are structured to minimize unnecessary network round-trips, and a sync-engine approach proactively preloads and pushes data to clients, delivering a highly responsive user experience. To proxy AI inference, Skyward uses AI Gateway to provide observability into usage, performance, and costs across multiple vendors, improving their AI operational efficiency. Leveraging Cloudflare’s serverless Developer Platform has allowed Skyward to simplify their architecture while supporting global availability, avoiding the need for Kubernetes clusters or complex locking mechanisms. The team also avoids the burden of managing regional deployments, as Cloudflare’s multi-region support ensures consistent performance worldwide without added operational complexity.

State management is a critical component to execute agentic workflows. Each compliance session runs within a dedicated Durable Object, which keeps relevant data close to the execution layer. This setup minimizes database round-trips and ensures that tasks like Anti-Money Laundering (AML) checks, Know Your Business (KYB) validation, and document processing remain efficient. Once a compliance session is complete, the system summarizes and stores the relevant information in Postgres and R2, optimizing memory usage without requiring persistent cloud infrastructure.
To balance low-latency operations with long-term storage, Skyward employs a multi-layered data management strategy. The Skyward team, using Hyperdrive, has been able to reduce query latency by nearly 50%, allowing compliance teams to receive immediate feedback. At the company’s core, Skyward’s goal is to offer a platform that is “streamlined for compliance teams”. The team maintains that a speedy feedback loop ensures end customers get the data and responses needed to act. Whether there’s one agent or hundreds of agents processing tasks in parallel, Hyperdrive ensures that database requests to assets like extensive company documentation (i.e. regulations, policies, procedures, internal documents), complex regulatory knowledge graphs, and on-demand context information for conversational workflows are all as performant as possible.
Durable Objects facilitate real-time session state, ensuring AI agents function smoothly without complex locking mechanisms. For larger compliance-related documents, such as legal PDFs and archived data, Cloudflare R2 provides long-term storage, ensuring only frequently accessed information remains readily available. This approach enhances performance while keeping storage management efficient and cost-effective.
Security and scalability remain priorities for compliance-focused AI applications. Skyward enforces strict access controls, ensuring that only authorized users can access development and production environments. Each AI session maintains an auditable log of key events, user actions, and approvals, supporting the ability to export these insights for compliance and legal requirements. Because each agent is deployed in its own instance and has its own database, Skyward ensures that there is a detailed record of every required user, agent interaction, and auditing requirements. On top of this, the ability to deploy and scale globally with Cloudflare’s network has allowed Skyward to maintain consistent, high-performance operations across multiple regions without extensive infrastructure overhead.
Looking ahead, Skyward plans to further enhance AI agent responsiveness by running select models directly on Cloudflare Workers AI, reducing reliance on external inference providers. The team plans to further integrate Workers for Platforms in an effort to better isolate customer data and workflows, giving end users greater control over their compliance automation. As Cloudflare continues to evolve its AI capabilities, Skyward aims to push the boundaries of distributed AI compliance solutions, making regulatory adherence more automated, scalable, and secure.
We’re inspired by how startups like Lamatic AI and Skyward AI are building their AI agent platforms on Cloudflare. This kind of innovation is why we’re proud to see so many startups trust Cloudflare for a scalable, reliable, and efficient foundation.
We’re also thrilled to share that both Lamatic AI and Skyward AI have been invited to join Cloudflare’s upcoming Workers Launchpad Cohort #5. Speaking of Workers Launchpad, it’s been a few months since our last update — let’s take a look at what’s new.

The Workers Launchpad team is blown away by what customers are demonstrating on the Developer Platform. Members of Cohort #4 presented at our bi-annual Demo Day. We had customers demonstrate what they’re building across a multitude of industries, including (of course) AI / ML, developer tools, 3D design, cloud infrastructure, adtech, media, and beyond. It’s incredibly encouraging to see what all these amazing companies are building on the Cloudflare network, and we look forward to continuing to partner with them throughout their startup journey.
Following the Demo Day for Workers Launchpad Cohort #4, we’ve seen the largest influx of applications from startups across the globe eager to join Cohort #5. This next wave of founders is pushing the boundaries of what’s possible, building in areas like AI agents, developer tooling, MCP, media, and beyond. With each new cohort, we’re continually inspired by the caliber of founding teams, the bold ideas they bring to life, and the real-world problems they’re tackling with technology.
Help us give some love and a warm welcome to the participants of Cohort #5:

We can’t wait to share more about what Cohort #5 achieves. Be sure to follow @CloudflareDev on X and join our Developer Discord server to hear updates on the cohorts.
If you’re developing your application on our Developer Platform, we’d love to learn how Cloudflare is powering your journey. Please share more about what you’re building, and our team will be sure to review your submission. And if you’re a startup and interested in joining Workers Launchpad, feel free to apply for Cohort 6 — applications are now open!
|
Company |
About |
|
AI learning platform for university students and educators |
|
|
Building an MCP for identity verification & fraud prevention |
|
|
Productize your service and launch your website with integrated payments within 30 minutes |
|
|
Agentic commerce platform that enables consumers to shop at the moment of inspiration |
|
|
Deliver quality PR on demand: pay for placements, not retainers |
|
|
Managed AI middleware and IDE to embed AI features quickly and reliably |
|
|
Application that makes it easy to host great events |
|
|
AI-driven penetration testing: identify, remediate, and retest on-demand |
|
|
Crowdsource DeFi strategies and list them as ETFs |
|
|
Platform for building and managing MCPs at scale |
|
|
Remove barriers to language, access, and modality for frontline workers |
|
|
Craft beautiful emails using natural language |
|
|
Simple, friendly, all-in-one cybersecurity for organizations |
|
|
Enable new paths for rights management, protect intellectual property, and properly monetize individual contributions |
|
|
Add transactional notifications into your app in minutes with no engineers required |
|
|
AI provider offering data analytics software solutions to organizations in underserved markets |
|
|
AI-powered multi-modal content personalization for sports and media organizations |
|
|
Guardrails, logging, and cost reduction for AI integrations |
|
|
Enable next-gen digital engagement with agentic app experiences |
|
|
The AI-native workspace for compliance teams |
|
|
AI-native customer intelligence platform that synthesizes customer feedback and delivers actionable insights across all communication channels |
|
|
Intelligent enterprise SSO that just works |
|
|
AI outbound sales-coaching platform |
|
|
Increase test coverage with Computer-Use agents |
|
|
Web development engine that lets product teams build beautiful interactive web applications |
|
|
Platform that enables any developer to build AI agents and workflows with a great developer experience |
|
|
Agentic AI-powered, end-to-end business research platform |
|
|
Advanced Arabic conversational AI for customer engagement activities |
|
|
Digital freedom through tailored security and privacy |

A global virtual private cloud for building secure cross-cloud apps on Cloudflare Workers
Post Syndicated from Thomas Gauvin original https://blog.cloudflare.com/workers-virtual-private-cloud/
Today, we’re sharing a preview of a new feature that makes it easier to build cross-cloud apps: Workers VPC.
Workers VPC is our take on the traditional virtual private cloud (VPC), modernized for a network and compute that isn’t tied to a single cloud region. And we’re complementing it with Workers VPC Private Links to make building across clouds easier. Together, they introduce two new capabilities to Workers:
-
A way to group your apps’ resources on Cloudflare into isolated environments, where only resources within a Workers VPC can access one another, allowing you to secure and segment app-to-app traffic (a “Workers VPC”).
-
A way to connect a Workers VPC to a legacy VPC in a public or private cloud, enabling your Cloudflare resources to access your resources in private networks and vice versa, as if they were in a single VPC (the “Workers VPC Private Link”).

Workers VPC and Workers VPC Private Link enable bidirectional connectivity between Cloudflare and external clouds
When linked to an external VPC, Workers VPC makes the underlying resources directly addressable, so that application developers can think at the application layer, without dropping down to the network layer. Think of this like a unified VPC across clouds, with built-in service discovery.
We’re actively building Workers VPC on the foundation of our existing private networking products and expect to roll it out later in 2025. We wanted to share a preview of it early to get feedback and learn more about what you need.
Developers are increasingly choosing Workers as their platform of choice, building rich, stateful applications on it. We’re way past Workers’ original edge use-cases: you’re modernizing more of your stack and moving more business logic on to Workers. You’re choosing Workers to build real-time collaboration applications that access your external databases, large scale applications that use your secured APIs, and Model Context Protocol (MCP) servers that expose your business logic to agents as close to your end users as possible.
Now, you’re running into the final barrier holding you back in external clouds: the VPC. Virtual private clouds provide you with peace of mind and security, but they’ve been cleverly designed to deliberately add mile-high barriers to building your apps on Workers. That’s the unspoken, vested interest behind getting you to use more legacy VPCs: it’s yet another way that captivity clouds hold your data and apps hostage and lock you in.
In conversation after conversation, you’ve told us “VPCs are a blocker”. We get it: your company policies mandate the VPC, and with good reason! So, to access private resources from Workers, you have to either 1) create new public APIs that perform authentication to provide secure access, or 2) set up and scale Cloudflare Tunnels and Zero Trust for each resource that you want to access. That’s a lot of hoops to jump through before you can even start building.
While we have the storage and compute options for you to build fully on Workers, we also understand that you won’t be moving your applications or your data overnight! But we think you should at least be free to choose Workers today to build modern applications, AI agents, and real-time global applications with your existing private APIs and databases. That’s why we’re building Workers VPC.
We’ve witnessed the pain of building around VPCs first hand. In 2024, we shipped support for private databases for Hyperdrive. This made it possible for you to connect to databases in an external VPC from Cloudflare Workers, using Cloudflare Tunnels as the underlying network solution. As a point-to-point solution, it’s been working great! But this solution has its limitations: managing and scaling a Cloudflare Tunnel for each resource in your external cloud isn’t sustainable for large, complex architectures.
We want to provide a dead-simple solution for you to unlock access to external cloud resources, in a manner that scales as you modernize more of your workloads with Workers. And we’re leveraging the experience we have in building Magic WAN and Magic Cloud Networking to make that possible.
So, we’re taking VPCs global with Workers VPC. And we’re letting you connect them to your legacy private networks with Workers VPC Private Links. Because we think you should be free to build secure, global, cross-cloud apps on Workers.
Private networks are complex to set up, they span across many layers of abstraction, and entire teams are needed to manage them. There are few things as complex as managing architectures that have outgrown their original point-to-point network! So we knew we needed to provide a simple solution for isolated environments on our platform.
Workers VPCs are, by definition, virtual private clouds. That means that they allow you to define isolated environments of Workers and Developer Platform resources like R2, Workers KV, and D1 that have secure access to one another. Other resources in your Cloudflare account won’t have access to these — VPCs allow you to specify certain sets of resources that are associated with certain apps and ensure no cross-application access of resources happens.
Workers VPCs are the equivalent of the legacy VPC, re-envisioned for the Cloudflare Developer Platform. The main difference is how Workers VPCs are implemented under the hood: instead of being built on top of regional, IP-based networking, Workers VPCs are built for global scale with the Cloudflare network performing isolation of resources across all of its datacenters.
And as you would expect from traditional VPCs, Workers VPCs have networking capabilities that allow them to seamlessly integrate with traditional networks, enabling you to build cross-cloud apps that never leave the networks you trust. That’s where Workers VPC Private Links comes in.
Like AWS PrivateLink and other VPC-to-VPC approaches, Workers VPC Private Links connect your Workers VPC to your external cloud using either standard tunnels over IPsec or Cloudflare Network Interconnect. When a Private Link is established, resources from either side can access one another directly, with nothing exposed over the public Internet, as if they were a single, connected VPC.

Workers VPC Private Link automatically provisions a gateway for IPsec tunnels or Cloudflare Network Interconnect and configures DNS for routing to Cloudflare resources
To make this possible, Workers VPC and Private Links work together to automatically provision and manage the resources in your external cloud. This establishes the connection between both networks and configures the resources required to make bidirectional routing possible. And, because we know some teams will want to maintain full responsibility over resource provisioning, Workers VPC Private Link can automatically provide you with Terraform scripts to provision external cloud resources that you can run yourself.
After the connection is made, Workers VPC will automatically detect the resources in your external VPC and make them available as bindings with unique IDs. Requests made through the Workers VPC resource binding will automatically be routed to your external VPC, where DNS resolution will occur (if you’re using hostname-accessed resources) and will be routed to the expected resource.

For example, connecting from Cloudflare Workers to a private API in an external VPC is just a matter of calling fetch() on a binding to a named Workers VPC resource:
const response = await env.WORKERS_VPC_RESOURCE.fetch(“/api/users/342”);
Similarly, Cloudflare resources are accessible via a standardized URL that has been configured within a private DNS resource in your external cloud by Workers VPC Private Link. If you were attempting to access R2 objects from an API in your VPC, you would be able to make the request to the expected URL:
const response = await
fetch(“https://<account_id>.r2.cloudflarestorage.com.cloudflare-workers-vpc.com”);
Best of all, since Workers VPC is built on our existing platform, it takes full advantage of our networking and routing capabilities to reduce egress fees and let you build global apps.
First, by supporting Cloudflare Network Interconnect as the underlying connection method, Workers VPC Private Links can help you lower your bandwidth costs by taking advantage of discounted external cloud egress pricing. Second, since Workers VPC is global by nature, your Workers and resources can be placed wherever needed to ensure optimal performance. For instance, with Workers’ Smart Placement, you can ensure that your Workers are automatically placed in a region closest to your external, regional VPC to maximize app performance.
Workers VPC unlocks huge swaths of your workloads that are currently locked into external clouds, without requiring you to expose those private resources to the public Internet to build on Workers. Here are real examples of applications that you’ve told us you’re looking forward to build on Workers with Workers VPC:

Sample architecture of real-time canvas application built on Workers and Durable Objects accessing a private database and container in an external VPC
Let’s say you’re trying to build a new feature for your application on Workers. You also want to add real-time collaboration to your app using Durable Objects. And you’re using Containers as well because you need to access FFmpeg for live video processing. In each scenario, you need a way to persist the state updates in your existing traditional database and access your existing APIs.
While in the past, you might have had to create a separate API just to handle update operations from Workers and Durable Objects, you can now directly access the traditional database and update the value directly with Workers VPC.
Same thing goes for Model Context Protocol (MCP) servers! If you’re building an MCP server on Workers, you may want to expose certain functionality that isn’t immediately available as a public API, especially if time to market is important. With Workers VPC, you can create new functionality directly in your MCP server that builds upon your private APIs or databases, enabling you to ship quickly and securely.

Sample architecture of external cloud resources accessing data from R2, D1, KV
Lots of development teams are landing more and more data on the Cloudflare Developer Platform, whether it is storing AI training data on R2 due to its zero-egress cost efficiency, application data in D1 with its horizontal sharding model, or configuration data in KV for its global single-digit millisecond read latencies.
Now, you need to provide a way to use the training data in R2 from your compute in your external cloud to train or fine-tune LLM models. Since you’re accessing user data, you need to use a private network because it’s mandated by your security teams. Likewise, you need to access user data and configuration data in D1 and KV for certain administrative or analytical tasks and you want to do so while avoiding the public Internet. Workers VPC enables direct, private routing from your external VPC to Cloudflare resources, with easily accessible hostnames from the automatically configured private DNS.

Finally, let’s use an AI agents example — it’s Developer Week 2025 after all! This AI agent is built on Workers, and uses retrieval augmented generation (RAG) to improve the results of its generated text while minimizing the context window.
You’re using PostgreSQL and Elasticsearch in your external cloud because that’s where your data currently resides and you’re a fan of pgvector. You’ve decided to use Workers because you want to get to market quickly, and now you need to access your database. Your database is, once again, placed in a private network and is inaccessible from the public Internet.
While you could provision a new Hyperdrive and Cloudflare Tunnel in a container, since your Workers VPC is already set up and linked, you can access the database directly using either Workers or Hyperdrive.
And what if new documents get added to your object storage in your external cloud? You might want to kick off a workflow to process the new document, chunk it, get embeddings for it, and update the state of your application in consequence, all while providing real-time updates to your end users about the status of the workflow?
Well, in that case, you can use Workflows, triggered by a serverless function in the external cloud. The Workflow will then fetch the new document in object storage, process it as needed, use your preferred embedding provider (whether Workers AI or another provider) in order to process and update the vector stores in Postgres, and then update the state of your application.
These are just some of the workloads that we know will benefit from Workers VPC on day 1. We’re excited to see what you build and are looking forward to working with you to make global VPCs real.
We’re incredibly excited for you to be able to build more on Workers with Workers VPC. We believe that private access to your APIs and databases in your private networks will redefine what you can build on Workers. Workers VPCs unlock access to your private resources to let your ship faster, more performant apps on Workers. And we’re obviously going to ensure that Containers integrate natively with Workers VPC.
We’re actively building Workers VPC on the networking primitives and on-ramps we’ve been using to connect customer networks at scale, and our goal is to ship an early preview later in 2025.
We’re planning to tackle connectivity from Workers to external clouds first, enabling you to modernize more apps that need access to private APIs and databases with Workers, before expanding to support full-directional traffic flows and multiple Workers VPC networks. If you want to shape the vision of Workers VPC and have workloads trapped in a legacy cloud, express interest here.
Startup Program update: empowering every stage of the startup journey
Post Syndicated from Christopher Rotas original https://blog.cloudflare.com/expanding-cloudflares-startup-program/
During Cloudflare’s Birthday Week in September 2024, we introduced a revamped Startup Program designed to make it easier for startups to adopt Cloudflare through a new credits system. This update focused on better aligning the program with how startups and developers actually consume Cloudflare, by providing them with clearer insight into their projected usage, especially as they approach graduation from the program.
Today, we’re excited to announce an expansion to that program: new credit tiers that better match startups at every stage of their journey. But before we dive into what’s new, let’s take a quick look at what the Startup Program is and why it exists.
Cloudflare for Startups provides credits to help early-stage companies build the next big idea on our platform. Startups accepted into the program receive credits valid for one year or until they’re fully used, whichever comes first.
Beyond credits, the program includes access to up to three domains with enterprise-level services, giving startups the same advanced tools we provide to large companies to protect and accelerate their most critical applications.
We know that building a startup is expensive, and Cloudflare is uniquely positioned to support the full-stack needs of modern applications. Our goal is simple: ensure that you have access to the best of Cloudflare’s global network, without the barriers of cost or availability.
Since launching the revamped credits system in September, we’ve learned a lot from the startups in our program, including what they’re building, what they need, and where they need more flexibility. One of the most common requests was more credit tier options.
That’s why we’re introducing new tiers that provide even more options to startups as they scale.
The Cloudflare for Startups Program now offers four credit tiers:
|
Credit Amount |
$5,000 |
$25,000 |
$100,000 |
$250,000 |
|
Stage |
Bootstrapped, stealth startups |
Up-and-coming startups |
Seed-funded startups |
Tier 1 startups |
|
Description |
For startups who are just getting started. This tier is great for building, testing, and iterating your product. |
For startups with early adopters and proving product market fit. |
For startups that have raised capital, and are experiencing high growth. |
For scaling startups that belong to our Tier 1 VC and accelerator network, are building a mission-critical AI application, or are participating in our Workers Launchpad Program. |
|
Criteria |
Building a software-based product or service Founded in the last 5 years Valid and matching email address |
$5,000 criteria plus: Active LinkedIn Funded up to $1M |
$25,000 criteria plus: Funded between $1M and $5M Belong to any of our 250+ approved VC or Accelerator partners |
$100,000 criteria plus: High growth / AI companies, OR Tier 1 VC & Accelerators |
These tiers are designed to offer simplicity and clarity by aligning with where you are in your growth journey. (You can check out eligibility criteria and apply to the Startup Program here). These tiers are still subject to the same Cloudflare for Startups Terms of Service. Credits are valid for up to one year or when all credits are consumed (whichever comes first).
We understand that each startup may have different needs depending on where they’re at in their journey. Some are just getting off the ground, others are scaling rapidly, and each has unique infrastructure needs. With this expansion, we’re reaffirming Cloudflare’s commitment to startups of all sizes, making it easier for you to access the right level of support and resources, exactly when you need them.
Whether you’re launching your MVP or preparing for your next funding round, Cloudflare is here to help you grow.
The vast majority of Cloudflare products (including all products found on the pay-as-you-go plans) can be used on the Startup Program. Beyond going to the website to see what products are included, below are a few examples of what you can use your credits for:
Build AI applications
Store your training data in R2, build AI-powered agents (via Agents SDK) that autonomously perform tasks with Durable Objects and Workers, or use one of over 50 models to run inference tasks on Cloudflare’s global network.
Create immersive realtime experiences
Deliver live audio and video via our Realtime Kit, enhance the experience with an AI-powered chatbot running on Workers AI to transcribe the call, broadcast to large audiences with Stream.
Build durable multi-step applications
Design and run long-lived, multi-step processes like onboarding flows, document processing, or order fulfillment. Use Workflows to coordinate logic across Workers, Durable Objects, Queues, and AI tasks. Easily handle retries, timeouts, and state management without complex orchestration infrastructure.
“From a modern design tool, you’d expect real-time collaborative features and would like to have resources as close to users as possible. Since betting on the Developer Platform architecture, Cloudflare has done more for us than any other vendor out there!” – Oleg Isonen (Founder & CEO)
“Cloudflare’s fusion of edge computing and AI empowers developers to deploy and utilize AI models with unprecedented efficiency and scale, marking a significant leap forward in how we build and interact with intelligent systems.” – Deepak Gupta (Co-founder & CEO)
“Each month Render Better optimizes billions of monthly requests for ecommerce visitors, delivering faster loading sites that make top brands millions more in revenue. We’re able to scale up with Cloudflare’s serverless workers, handling every request at the network edge within milliseconds, thanks to the rock solid, DX-friendly scope of the Developer Platform.” – James Koshigoe (Co-founder & CEO)
We can’t wait to see what you will build on Cloudflare. Apply here to take advantage of the Cloudflare for Startups Program.

How we simplified NCMEC reporting with Cloudflare Workflows
Post Syndicated from Mahmoud Salem original https://blog.cloudflare.com/simplifying-ncmec-reporting-with-cloudflare-workflows/
Cloudflare plays a significant role in supporting the Internet’s infrastructure. As a reverse proxy by approximately 20% of all websites, we sit directly in the request path between users and the origin, helping to improve performance, security, and reliability at scale. Beyond that, our global network powers services like delivery, Workers, and R2 — making Cloudflare not just a passive intermediary, but an active platform for delivering and hosting content across the Internet.
Since Cloudflare’s launch in 2010, we have collaborated with the National Center for Missing and Exploited Children (NCMEC), a US-based clearinghouse for reporting child sexual abuse material (CSAM), and are committed to doing what we can to support identification and removal of CSAM content.
Members of the public, customers, and trusted organizations can submit reports of abuse observed on Cloudflare’s network. A minority of these reports relate to CSAM, which are triaged with the highest priority by Cloudflare’s Trust & Safety team. We will also forward details of the report, along with relevant files (where applicable) and supplemental information to NCMEC.
The process to generate and submit reports to NCMEC involves multiple steps, dependencies, and error handling, which quickly became complex under our original queue-based architecture. In this blog post, we discuss how Cloudflare Workflows helped streamline this process and simplify the code behind it.
When we designed our latest NCMEC reporting system in early 2024, Cloudflare Workflows did not exist yet. We used the Workers platform Queues as a solution for managing asynchronous tasks, and structured our system around them.
Our goal was to ensure reliability, fault tolerance, and automatic retries. However, without an orchestrator, we had to manually handle state, retries, and inter-queue messaging. While Queues worked, we needed something more explicit to help debug and observe the more complex asynchronous workflows we were building on top of the messaging system that Queues gave us.
In our queue-based architecture each report would go through multiple steps:
-
Validate input: Ensure the report has all necessary details.
-
Initiate report: Call the NCMEC API to create a report.
-
Fetch impounded files (if applicable): Retrieve files stored in R2.
-
Upload files: Send files to NCMEC via API.
-
Finalize report: Mark the report as completed.

A diagram of our queue-based architecture
Each of these steps was handled by a separate queue, and if an error occurred, the system would retry the message several times before marking the report as failed. But errors weren’t always straightforward — for instance, if an external API call consistently failed due to bad input or returned an unexpected response shape, retries wouldn’t help. In those cases, the report could get stuck in an intermediate state, and we’d often have to manually dig through logs across different queues to figure out what went wrong.
Even more frustrating, when handling failed reports, we relied on a “Reaper” — a cron job that ran every hour to resubmit failed reports. Since a report could fail at any step, the Reaper had to deduce which queue failed and send a message to begin reprocessing. This meant:
-
Debugging was a nightmare: Tracing the journey of a single report meant jumping between logs for multiple queues.
-
Retries were unreliable: Some queues had retry logic, while others relied on the Reaper, leading to inconsistencies.
-
State management was painful: We had no clear way to track whether a report was halfway through the pipeline or completely lost, except by looking through the logs.
-
Operational overhead was high: Developers frequently had to manually inspect failed reports and resubmit them.
Queues gave us a solid foundation for moving messages around, but it wasn’t meant to handle orchestration. What we’d really done was build a bunch of loosely connected steps on top of a message bus and hoped it would all hold together. It worked, for the most part, but it was clunky, hard to reason about, and easy to break. Just understanding how a single report moved through the system meant tracing messages across multiple queues and digging through logs.
We knew we needed something better: a way to define workflows explicitly, with clear visibility into where things were and what had failed. But back then, we didn’t have a good way to do that without bringing in heavyweight tools or writing a bunch of glue code ourselves. When Cloudflare Workflows came along, it felt like the missing piece, finally giving us a simple, reliable way to orchestrate everything without duct tape.
Once Cloudflare Workflows was announced, we saw an immediate opportunity to replace our queue-based architecture with a more structured, observable, and retryable system. Instead of relying on a web of multiple queues passing messages to each other, we now have a single workflow that orchestrates the entire process from start to finish. Critically, if any step failed, the Workflow could pick back up from where it left off, without having to repeat earlier processing steps, re-parsing files, or duplicating uploads.
With Cloudflare Workflows, each report follows a clear sequence of steps:
-
Creating the report: The system validates the incoming report and initiates it with NCMEC.
-
Checking for impounded files: If there are impounded files associated with the report, the workflow proceeds to file collection.
-
Gathering files: The system retrieves impounded files stored in R2 and prepares them for upload.
-
Uploading files to NCMEC: Each file is uploaded to NCMEC using their API, ensuring all relevant evidence is submitted.
-
Adding file metadata: Metadata about the uploaded files (hashes, timestamps, etc.) is attached to the report.
-
Finalizing the report: Once all files are processed, the report is finalized and marked as complete.
Here’s a simplified version of the orchestrator:
import { WorkflowEntrypoint, WorkflowEvent, WorkflowStep } from 'cloudflare:workers';
export class ReportWorkflow extends WorkflowEntrypoint<Env, ReportType> {
async run(event: WorkflowEvent<ReportType>, step: WorkflowStep) {
const reportToCreate: ReportType = event.payload;
let reportId: number | undefined;
try {
await step.do('Create Report', async () => {
const createdReport = await createReportStep(reportToCreate, this.env);
reportId = createdReport?.id;
});
if (reportToCreate.hasImpoundedFiles) {
await step.do('Gather Files', async () => {
if (!reportId) throw new Error('Report ID is undefined.');
await gatherFilesStep(reportId, this.env);
});
await step.do('Upload Files', async () => {
if (!reportId) throw new Error('Report ID is undefined.');
await uploadFilesStep(reportId, this.env);
});
await step.do('Add File Metadata', async () => {
if (!reportId) throw new Error('Report ID is undefined.');
await addFilesInfoStep(reportId, this.env);
});
}
await step.do('Finalize Report', async () => {
if (!reportId) throw new Error('Report ID is undefined.');
await finalizeReportStep(reportId, this.env);
});
} catch (error) {
console.error(error);
throw error;
}
}
}
Not only can tasks be broken into discrete steps, but the Workflows dashboard gives us real-time visibility into each report processed and the status of each step in the workflow!
This allows us to easily see active and completed workflows, identify which steps failed and where, and retry failed steps or terminate workflows. These features revolutionize how we troubleshoot issues, providing us with a tool to deep dive into any issues that arise and retry steps with a click of a button.
Below are two dashboard screenshots, one of our running workflows and the second of an inspection of the success and failures of each step in the workflow. Some workflows look slower or “stuck” — that’s because failed steps are retried with exponential backoff. This helps smooth over transient issues like flaky APIs without manual intervention.

Cloudflare Workflows Dashboard for our NCMEC Workflow

Cloudflare Workflows Dashboard containing a breakout of the NCMEC Workflow Steps
Cloudflare Workflows transformed how we handle NCMEC incident reports. What was once a complex, queue-based architecture is now a structured, retryable, and observable process. Debugging is easier, error handling is more robust, and monitoring is seamless.
If you’re also building larger, multi-step applications, or have an existing Workers application that has started to approach what we ended up with for our incident reporting process, then you can typically wrap that code within a Workflow with minimal changes. Workflows can read from R2, write to KV, query D1 and call other APIs just like any other Worker, but are designed to help orchestrate asynchronous, long-running tasks.
To get started with Workflows, you can head to the Workflows developer documentation and/or pull down the starter project and dive into the code immediately:
$ npm create cloudflare@latest workflows-starter --
--template="cloudflare/workflows-starter"
Learn more about Cloudflare Workflows, and about using the Cloudflare CSAM Scanning Tool.

