DevTrendsDeveloper trends
Accent color

DEV TRENDS / DAILY DISCOVERIES

May 27, 2026 · What developers are building

Daily discoveries from developer communities, independent makers, and open source.

npm-deprecated-check:一行命令检查npm依赖弃用情况,支持MCP Server让AI帮你管依赖

它解决什么问题? npm 依赖被标记为 deprecated,只有 npm install 时才会提示,日常开发中完全无感知。一旦弃用包引发兼容性问题,排查起来非常痛苦。 npmdeprecatedcheck(缩写ndc)一行命令即可检查当前项目、全局包或指定包的弃用状态,并提供最小可升级版本建议。 核心亮点 多维度检查:支持当前项目依赖(ndc current)、全局包(ndc global)、指定包(ndc package< name)三种模式 Node.js 兼容性分析:自动计算所有依赖所需的最低 Node.js 版本,升降级 Node 前可用 ndc compat 预判兼容性 EOL 检测:检查当前 Node.js 版本是否已到达生命周期终点 Monorepo 友好:支持 deep 深度检查 monorepo 项目 兼容主流包管理器:npm/yarn/pnpm 均可使用 MCP Server能力 这是本工具最值得关注的能力——内置 MCP Server 支持,一行命令启动:npx npmdeprecatedcheck mcp启动后, Claude Code、OpenCode 等 AI Agent 可直接调用以下工具: | 工具 | 说明 | ||| | checkpackage | 检查指定npm包是否已弃用 | | checkcurrentproject | 检查当前项目所有依赖 | | checkglobal | 检查全局安装的包 | | checknode | 检查 Node.js 版本是否 EOL | | checkcompat | 检查 Node.js 版本兼容性 | 所有工具返回结构化 JSON 数据,AI Agent 可以据此自动生成迁移建议、风险报告或升级方案。 “我的项目有哪些弃用依赖?帮我生成一份升级计划。” 配置非常简单 { "mcpServers": { "npmdeprecatedcheck": { "command": "npx", "args": ["y", "npmdeprecatedcheck", "mcp"] } } } 建议全局安装使用 适用场景 CI/CD 中集成弃用检查(支持 failfast 一旦发现弃用立即退出) 大型项目定期依赖健康巡检 Node.js 版本升降级前的兼容性预判 通过 MCP 接入 AI Agent,实现依赖管理的智能化

Original
DTLifestyle & entertainmentDTSoftware developmentDTAgent extension
—

Echo Loop:一个科学、高效的英语听说训练 App

<div align="center" </div Echo Loop 是一个开源的、科学高效的英语听说训练 App,用盲听、精听、跟读、复述和间隔复习,自动驱动用户把一段英语音频从听懂练到会说。 它解决的问题是:拿到一段英语音频之后,怎么把它从“听过一遍”练到“真正听懂、能跟读、能复述、能长期记住”。 GitHub: 它解决什么问题 很多人学英语时,最大的问题不是缺材料,而是不知道怎么把一段材料真正练透。 常见情况是:今天收藏一个播客,明天听一段演讲,材料越来越多,但真正认真练熟的内容很少。听的时候好像懂了,过几天又忘了,更不用说把里面的表达说出来。 这背后其实很符合人性:人天然喜欢新鲜、轻松、即时反馈强的东西,所以花哨的内容、游戏化激励和不断刷新的材料很容易让人上瘾。但对语言学习来说,真正有效的训练往往不是“不断换新材料”,而是对合适的材料进行重复、拆解、模仿和复述。过多的新鲜感反而会分散注意力,让学习停留在“看过、听过、收藏过”,而没有真正内化。 另一个更隐蔽的问题是:即使用户知道正确的方法,也很难长期坚持。因为这些方法看起来简单,真正执行时却需要大量手动判断:今天练哪段、先听几遍、什么时候看字幕、哪些句子要反复跟读、什么时候开始复述、几天后再复习、复习时该练什么。每一步都要自己控制,最后学习本身还没开始,决策负担已经把心力耗尽了。 Echo Loop 想做的事,就是在不违背人性的前提下,用更科学的训练流程降低重复练习的执行成本。它把盲听、精听、跟读、复述和间隔复习串成一个自动推进的闭环,让用户更容易把一段音频真正练懂、练熟、练到能说出来。 核心流程 Echo Loop 的训练流程是: 盲听 → 精听 → 跟读 → 复述 → 间隔复习 盲听 先不看字幕,完整听一遍音频,判断自己真实听懂了多少。 这一步可以避免一种很常见的假学习:看着字幕觉得自己听懂了,但关掉字幕之后就听不出来。 精听 逐句听音频,遇到没听懂的句子,可以查看字幕、翻译、AI 解析和意群划分。 很多听力问题并不是整篇文章都难,而是卡在某几个句子上。可能是连读、弱读、长难句,也可能是某个表达不熟。逐句精听可以把这些问题拆出来。 跟读 针对难句反复跟读,把“听懂”进一步转化为“说得出”。 App 会对跟读内容进行 AI 评测,自动对齐识别结果和原文,高亮命中的词,并给出跟读评级。 复述 复述不是机械重复原句,而是要求用户理解段落内容,记住关键信息,再用自己的话说出来。 这一步可以直接暴露真实口语能力:是否真的理解了内容,是否记住了信息,是否能组织表达。 间隔复习 学完一段材料后,Echo Loop 会自动安排后续复习任务。 每段素材包含首次学习和多轮间隔复习,复习间隔从 6 小时逐步拉长到 28 天。用户不需要自己记哪天该复习哪段,打开 App 就能看到今天该练什么。 主要功能 🤖 自动驱动学习节奏:跟读次数、复习时机、难句标记自动推进,你只需要专注听和说。 🎯 听说闭环:精听、跟读、复述一气呵成。从听懂内容,到模仿表达,再到用自己的话说出来。 🧩 长难句意群划分:长句按意群切分,复杂句拆开理解,降低听懂难度。 ⭐ 难句收藏与专项复习:难句自动归档,可集中跟读、反复重练,避免“标了就忘”。 📚 语境化闪卡复习:收藏单词和意群,结合原句上下文复习,在语境中记忆,而不是孤立背词。 💡 AI 翻译、解析与词汇讲解:支持双语翻译、句子解析、单词用法和搭配讲解,按需展开,不打断学习节奏。 📍 断点续学:自动记录学习阶段和当前句子,下次打开直接继续,5 分钟碎片时间也能练。 📊 学习数据统计:记录学习时长、输入输出比例、唯一词汇量,让练了多少、说了多少一目了然。 🎙️ 跟读 AI 评测:自动对齐识别结果与原文,高亮命中词,并给出跟读评级。 🎧 导入本地音频 + AI 字幕:支持批量导入本地音频,可导入本地字幕,也可用 AI 自动转录生成字幕。 适合什么人 Echo Loop 更适合中等及以上水平的英语学习者,尤其适合: 1. 正在备考托福、雅思、CATTI 等考试的人 2. 想系统提升英语听力和口语的人 3. 知道精听、跟读、复述有效,但一直坚持不下来的人 4. 手里有很多英语材料,但不知道怎么练的人 5. 希望把真实音频从听懂练到会说的人 如果只是想轻松刷一点英语内容,它可能不是最合适的。 但如果目标是认真训练听力和口语,把一段材料反复练透,Echo Loop 会比较合适。 截图 <table <tr <td align="center" width="260" / <br / <sub音频合集</sub </td <td align="center" width="260" / <br / <sub学习任务</sub </td <td align="center" width="260" / <br / <sub学习时长统计</sub </td </tr <tr <td align="center" width="260" / <br / <sub间隔复习</sub </td <td align="center" width="260" / <br / <sub盲听精听跟读复述</sub </td <td align="center" width="260" / <br / <sub精听句子讲解</sub </td </tr <tr <td align="center" width="260" / <br / <sub段落复述</sub </td <td align="center" width="260" / <br / <sub收藏词汇</sub </td <td align="center" width="260" / <br / <sub闪卡复习</sub </td </tr </table

Original
DTResearch & learningDTLifestyle & entertainment
—

织经(Workflow Cookbook) — Claude Code Workflows 官方特性深度解析,涵盖29 章实战手册

Claude Code 有一个环境变量门控的实验性特性 Workflows —— 用纯 JavaScript 脚本 + agent() / parallel() / pipeline() 等注入原语,确定性地编排多个 AI subagent。脚本能 git 管理、能分享、能断点续传,把编排逻辑从提示词里拿出来放进了确定性代码。 问题是这个功能几乎没有文档。所以我把它系统地写了出来。 项目亮点 29 章 + 6 篇附录,覆盖认知定位、API 完全指南、7 个实战食谱、进阶模式、社区生态横评、从零创作全流程 真值可溯源:所有技术论断分三级(官方类型定义 / 本机实测带 Run ID / 第三方标注未核实),全书 23 个唯一 Run ID 可查 九轮全量验证:不是 vibe coding 产物,经过对信源的多轮交叉校验 实战食谱涵盖:分片代码审查、PR 多维 Review、生成批评修复循环、深度研究、评委面板、Bug 猎手、大扫除 GitHub: 在线阅读:

Original
DTResearch & learningDTSoftware developmentDTAgent orchestration
—

UGCVideo.ai:一个适合独立开发者和内容团队的 AI UGC 视频生成工具

最近在做海外内容投放和短视频素材测试时,我们团队内部一直有个问题: 广告脚本能快速写出来,但真人出镜素材制作太慢。 于是我们做了一个自己的工具:UGCVideo.ai 它本质上是一个 AI UGC 视频生成平台,可以快速生成类似 TikTok / Instagram 风格的真人口播短视频,比较适合做广告素材、产品种草和多语言内容。 💡 核心功能亮点 AI 虚拟人物口播生成 支持多语言配音与字幕 输入脚本即可自动生成短视频 支持不同场景、镜头和语气风格 适合快速批量测试广告素材 我们内部有段时间一天要测试十几个创意,以前真人录制根本跟不上。后来改成 AI 流程之后,至少不会卡在“没人拍视频”这个环节。 👥 适用人群与使用场景 目前比较适合: 独立开发者做产品宣传 Shopify / SaaS 团队做海外广告 做 TikTok 内容矩阵的人 想快速验证创意的运营团队 没预算长期请演员的小团队 尤其是需要频繁换文案、换语言的时候,会比传统拍摄轻很多。 ✨ 平台优势 我们自己比较在意的几个点: 不需要复杂剪辑经验 视频生成速度比较快 更偏“真实 UGC 风格”,不是传统企业宣传片 对短视频广告测试比较友好 支持持续迭代脚本内容 当然,现在 AI 视频还不可能完全替代真人拍摄。 有些情绪表达、停顿感、即兴发挥,真人还是更自然。 但如果目标是“快速做出可测试的视频素材”,AI 确实已经能解决很多重复工作了。 最近也在继续优化角色动作和语音节奏,如果有人也在做 AI 内容工作流,欢迎交流一些实际使用场景。

Original
DTContent creationDTSoftware development
—

一款声明式 Rust WebAssembly UI 框架 - Euv

【开源自荐】一款声明式 Rust WebAssembly UI 框架 Euv 版本基线:基于 euv v0.12.17(202607)当前仓库 euvdev/euv 的实际实现。所有 API、宏、CLI 命令均与源码一致。 项目概述 Euv 是一个基于 Rust 语言开发的声明式、跨平台 UI 框架,构建在 WebAssembly 之上。框架采用"按需 Patch 虚拟 DOM + 精确依赖追踪的细粒度响应式"两条路径相结合的设计:用 html! 宏编写类 JSX 的声明式视图,用 usesignal / computed! / watch! 构建自动追踪依赖的响应式系统,渲染层通过 dataeuvid 全局事件委托 + 局部 Patch 更新避免不必要的整树 Diff。 核心特性 声明式 UI:html! 宏编写类 JSX 语法,编译期类型检查;属性支持字符串、信号、if/match 三态表达式;Rust 关键字属性加 r 前缀(rtype、rloop);布尔属性必须传 Signal<bool;data / aria 自动转 data / aria 细粒度响应式 Signal:usesignal Hook + 精确依赖追踪,Signal::get() 在 DynamicNode 渲染上下文内自动注册依赖,只有真正依赖该信号的 DynamicNode 会被标记为 dirty —— 不是全树广播 按需虚拟 DOM:VirtualNode 变体 Element | Text | Fragment | Dynamic | Empty;列表支持 key: 启用 Keyed Diffing;非列表场景走精确 Patch(attribute 级 HashMap diff),跳过完整 Diff Microtask 批处理:多次 Signal::set() 在同一微任务内自动合并为一次 dispatch;App::batch(|| { ... }) 提供手动抑制中间调度,闭包退出后才统一刷新 DOM 全局事件委托:基于事件冒泡 + dataeuvid 精确路由;非冒泡事件(blur / focus / mouseenter / mouseleave / scroll / resize / 媒体类 35 种)直绑 target;每种冒泡事件类型全局只注册一次监听器;handler 在 DOM 节点删除时自动清理,无内存泄漏 CSSinRust:class! 宏原生支持伪类(hover / focus / nthchild 等)、伪元素(before / after)、媒体查询(media(...))、类继承(cbase();)、参数化类(cdynamiccolor(color: &str))、动态属性名({key}: {value};),snakecase 属性自动转 kebabcase;vars! / var! 提供类型安全的 CSS 变量定义与引用(注意是 vars! 不是 cssvars!) 计算属性 + 副作用:computed!(a, b, |a: T, b: T| R { ... }) 派生只读信号;watch!(a, b, |a, b| { ... }) 注册副作用,创建时立即执行一次 组件系统:[component] 属性宏标注,组件函数签名 fn(node: VirtualNode<Props) VirtualNode;支持 Props Down / Callback Up / 双向绑定(Shared Signal) CLI 工具链:内置 euv(来自 euvcli crate),run / build / fmt 三种子命令,集成 wasmpack,自动处理 cratepath / wwwdir,支持热更新开发服务器 架构设计亮点 Workspace 架构 euv/ 聚合入口:euvcore + euvmacros ├── core/ 核心运行时:app / event / reactive / renderer / vdom ├── macros/ 过程宏:html! / class! / vars! / var! / computed! / watch! / [component] ├── cli/ CLI 工具,binary 名 = euv ├── engine/ 独立的 2D 游戏引擎(ECS / 固定步长 / 物理 / 碰撞 / 精灵 / 音频) ├── ui/ 跨 page 共享的 UI 组件库(euvbutton / euvcard / euvinput / ...) └── example/ 示例 SPA:50 个 page(路由 / 布局 / 业务 / 全栈) | Crate | 职责 | 说明 | | | | | | euv | 聚合入口 | 对外暴露 App::usesignal / batch / mount / ...;重新导出 euvcore + euvmacros | | euvcore | 核心运行时 | VirtualNode、Signal 系统、Renderer、事件代理、HookContext、Scheduler | | euvmacros | 过程宏 | html! class! vars! var! computed! watch! [component] | | euvcli | CLI | run / build / fmt;集成 wasmpack,热更新 Dev Server | | euvengine | 2D 游戏引擎 | ECS / 固定步长 / 物理 / 碰撞 / 精灵 / 音频,可选依赖 | | euvui | 组件库 | 跨 page 共享的 euvbutton / euvcard / euvmodal / euvinput / euvbadge / ... | | euvexample | 示例 SPA | 50 个示例 page,覆盖各种使用场景 | 响应式系统架构 Signal::set(value) ── T: Clone + PartialEq ──┐ │ 值变化才更新 ▼ SignalInner.setvalue │ ▼ 遍历 listeners(已 swapout 防重入) │ ▼ updatedependentsbysignaladdr ──► 标记 dirty │ ▼ App::scheduleupdate([...dirty ids]) │ ▼ queueMicrotask ─► dispatch │ ▼ 精确重新渲染每个 dirty DynamicNode │ ▼ attribute HashMap diff ─► DOM patch 关键设计要点: 1. 精确依赖追踪:Signal::get() 在 CURRENTTRACKINGDYNAMICID 激活时调用 adddependent(),建立 signal → DynamicNode 的反向依赖图。Signal::set() 时只标记实际依赖此 signal 的 DynamicNode,避免全树广播 2. Microtask 批处理:多次 set() 自动合并;App::batch(|| { ... }) 进一步抑制中间 dispatch,闭包退出时统一调度一次 3. Copy 语义:Signal<T 实质是 usize(内部地址),实现 Copy;底层 Rc<SignalInner<T 由全局注册表持有,跨 async / 闭包 / setTimeout 自由拷贝不增加引用开销 4. usesignal Hook 语义:首次渲染时执行 init() 并存储;后续渲染返回同一 signal;hook index 由调用位置隐式决定(不可写在条件分支内,否则 index 错位) 5. 生命周期安全:Signal::deactivate() 仅清空 listeners/dependents,保留堆分配——因为 async 闭包可能持有旧 Signal 拷贝,释放内存会导致后续 .get() useafterfree;deactivate 后这些调用退化为 noop 按需 Patch 策略 | 场景 | 算法 | 复杂度 | | | | | | key: 列表 | Keyed Diff | O(N) 建映射 + 最小 DOM 移动 | | 普通列表 | Positional Diff | O(min(M, N)) 逐位比较 | | 静态子树 | 不渲染(直接复用) | O(1) | | DynamicNode 重渲染 | Attribute HashMap diff | 只更新变化的属性 | | 初次挂载 | 全量构建 | — | Keyed Diff 细节: 构建 oldkey → oldindex HashMap 复用已有 DOM 节点,仅 Patch 属性差异 通过 insertbefore 最小化 DOM 移动操作 反向遍历移除废弃节点,避免索引偏移 全局事件委托机制 DOM Element └─ dataeuvid="42" ← 自动分配,跨 rerender 保持稳定 └─ Event Bubble ─► window 委托监听器 └─ dispatchdelegatedevent() 沿 target 向上找到最近的 dataeuvid └─ HandlerRegistry[(42, "click")] ─► HandlerSlot ─► 用户回调 冒泡事件:click / input / change / submit / keydown / keyup / mousedown / mouseup / mousemove / mouseover / mouseout / wheel / touchstart / touchmove / touchend / dragstart / drag / dragend / drop / pointer / focusin / focusout / copy / cut / paste / scroll(冒泡部分) 等,全部走 window 委托,每种事件类型全局只有一个监听器 非冒泡事件(35 种):blur / focus / mouseenter / mouseleave / load / error / scroll(element) / resize / beforeunload / 所有媒体事件(play / pause / seeked / timeupdate / ...)/ transitionend / animationend 等,直接绑在 target 元素上 精确路由:dataeuvid 在元素首次挂载时分配,跨 rerender 复用同一 ID,handler 通过 ID 在全局注册表查找 自动清理:DOM 节点被移除时,对应的 HandlerSlot 自动从注册表删除;Signal::deactivate() 同步清理 subscribe 闭包 开发便捷性 1. 声明式 UI 编写 rust use euv::; use wasmbindgen::prelude::; [wasmbindgen] pub fn main() { consoleerrorpanichook::setonce(); App::mount("app", app); } fn app() VirtualNode { let count: Signal<i32 = App::usesignal(|| 0); let disabled: Signal<bool = App::usesignal(|| false); html! { div { class: ccontainer() euvbutton { variant: EuvButtonVariant::Primary label: if { disabled.get() } { "Disabled" } else { "Increment" } onclick: move |: Event| { count.set(count.get() + 1); } } p { "Count: " { count.get() } } } } } 2. 响应式状态管理 rust fn pageconditional() VirtualNode { let showdetails: Signal<bool = App::usesignal(|| false); let usertype: Signal<String = App::usesignal(|| "guest".tostring()); // 计算属性:自动追踪 firstname / lastname 变化 // (此处仅示意,实际 firstname / lastname 需另行 usesignal) // let fullname: Signal<String = computed!(firstname, lastname, |f: String, l: String| String { // format!("{} {}", f, l) // }); html! { div { class: cpagecontainer() euvbutton { variant: EuvButtonVariant::Primary label: "Toggle Details" onclick: move |: Event| { showdetails.set(!showdetails.get()); } } // 响应式 if——条件用 {} 包裹,依赖变化时自动重新求值 if { showdetails.get() } { div { class: ccard() "Hidden Details" } } // 响应式 match——必须含 通配分支 match { usertype.get().asstr() } { "guest" = { p { "Welcome, guest!" } } "user" = { p { "Hello, user!" } } = { p { "Welcome, admin!" } } } } } } 3. CSSinRust 样式系统 rust // 类的定义统一在 ui/src/style/class/fn.rs(306 个跨 page 共享类) // 或项目内 example/src/style/class/fn.rs(仅本页使用) // page 的 view/fn.rs 只引用 cxxx() 函数,绝不写 class! 块 class! { pub ccard { background: var!(background); border: 1px solid var!(border); borderradius: 0; padding: var!(space2xl); hover { background: var!(accentmuted); bordercolor: var!(accent); } // 唯一断点:移动端 < 768px media("(maxwidth: 767px)") { padding: var!(spacelg); } } // 参数化类 pub cdynamiccolor(color: &str) { color: {color}; background: var!(background); } // 继承 pub cprimarybutton { cbase(); background: var!(accent); color: var!(textonaccent); hover { background: var!(foreground); // 覆盖 cbase 的 hover } } } // CSS 变量:vars! 定义,var! 引用 vars! { pub cthemelight { background: "ffffff"; foreground: "000000"; accent: "000000"; accentmuted: "ffffff"; border: "000000"; textonaccent: "ffffff"; } pub cthemedark { background: "000000"; foreground: "ffffff"; accent: "ffffff"; accentmuted: "000000"; border: "ffffff"; textonaccent: "000000"; } } // 引用:var!(name) 或 var!("name") 都行 class! { pub ccard { background: var!(background); border: 1px solid var!(border); } } 4. 计算属性与副作用 rust let count: Signal<i32 = App::usesignal(|| 0i32); let name: Signal<String = App::usesignal(|| String::from("euv")); // 计算属性:firstname + lastname → fullname,自动追踪依赖 let firstname: Signal<String = App::usesignal(|| String::from("Rust")); let lastname: Signal<String = App::usesignal(|| String::from("WASM")); let fullname: Signal<String = computed!(firstname, lastname, |f: String, l: String| String { format!("{} {}", f, l) }); // watch!:注册副作用,依赖变化时执行;创建时立即执行一次 watch!(count, name, |countval: i32, nameval: String| { websys::console::log1( &format!("count={}, name={}", countval, nameval).into() ); }); // 批量更新:闭包内的多次 set 只触发一次 DOM dispatch App::batch(|| { count.set(10); name.set("updated".tostring()); }); 5. CLI 开发工具链 sh 安装(包名 euvcli,binary 名 euv) cargo install euvcli 创建 / 启动开发服务器(热更新) euv run cratepath . wwwdir ./www 构建发布 euv build cratepath . wwwdir ./www 格式化宏代码 euv fmt cratepath . 框架优势 1. 零成本抽象设计 编译期宏展开:html! class! vars! 等宏在编译时生成 Rust 代码,运行时零解析开销 类型安全:Props 自动提取([derive(Clone, Default)])、事件类型强校验、Signal<bool 强制用于布尔属性,编译时消除 UI 逻辑错误 Copy 语义 Signal:Signal<T 是 usize(内部地址),实现 Copy,仅复制指针地址;底层 Rc<SignalInner<T 由全局注册表持有,跨闭包 / async / setTimeout 无 GC 压力 依赖追踪在编译期不可能:Signal::get() 的运行时追踪是 euv 唯一"运行时开销",但配合 DynamicNode 边界可以做到零浪费——不在 DynamicNode 内调用 get() 就不注册依赖 2. 精细 DOM 更新策略 属性级 Patch:新旧属性 HashMap 对比,仅更新变化的属性 信号绑定属性:AttributeValue::Signal 自动订阅变更,DOM 节点移除时自动清理监听器(dataeuvsignaladdrs 维护 signal 地址集合) DynamicNode 独立渲染:每个动态节点拥有独立的 Renderer 和 HookContext,实现局部更新 arm 切换检测:match 分支切换时自动执行 renderfullreplace,避免错误复用 3. 完善的生命周期管理 DOM 子树清理:cleanupdomsubtree 递归清理事件处理器、动态节点监听器、信号监听器 Hook 清理:match 分支切换 / 组件卸载时执行 cleanups 队列,防止信号泄漏 Signal 存活标记:alive 标志位 + deactivate() 路径确保已清理的 Signal 不再触发无效更新 4. 跨平台响应式布局 媒体查询:class! 宏原生支持 media("(maxwidth: 767px)") { ... } 语法,唯一断点 < 768px 视为移动端 CSS 变量主题:vars! 实现明暗主题,运行时通过 class 切换即可 技术栈对比 | 特性 | Euv | Yew | Dioxus | Leptos | | | | | | | | 声明式宏 | ✅ html! | ✅ html! | ✅ rsx! | ✅ view! | | 响应式系统 | ✅ Signal + 精确依赖追踪 | ❌(手动更新) | ✅ | ✅ | | 计算属性 | ✅ computed! | ❌ | ❌ | ✅ | | 副作用 | ✅ watch! | ❌ | ❌ | ✅ | | CSSinRust | ✅ class! + vars! | ❌ | ❌ | ❌ | | 伪类/媒体查询 | ✅ 原生 | ❌ | ❌ | ❌ | | 全局事件委托 | ✅ 冒泡事件 | ❌ | ❌ | ❌ | | 组件系统 | ✅ [component] | ✅ | ✅ | ✅ | | CLI 工具链 | ✅ run/build/fmt + wasmpack | ❌ | ✅ | ✅ | | WASM 目标 | ✅ | ✅ | ✅ | ✅ | | Rust Edition | 2024 | 2021 | 2021 | 2021 | | 2D 游戏引擎 | ✅ euvengine(ECS / 物理) | ❌ | ❌ | ❌ | 生态系统与社区 文档与学习资源 官方文档:< API 文档:< < crates.io:< 许可证:MIT License 适用场景 推荐使用场景 1. Web 应用前端:需要高性能、类型安全的现代 Web 应用 2. 内部管理系统:表单密集、条件渲染复杂的管理后台 3. 交互式仪表盘:实时数据更新、响应式布局的数据看板 4. 组件库开发:类型安全的 Props、CSSinRust 样式隔离 5. WASM 原生应用:追求极致性能的 WebAssembly 应用 6. 2D 游戏 / 可视化:搭配 euvengine(ECS / 物理 / 碰撞 / 精灵 / 音频)开箱即用 示例页面(50 个) 基础特性:/(About)、/animation、/async、/customattrs、/badge、/componentbinding、/browser、/camera、/canvas、/conditional、/counter、/dynamiccomponent、/event、/facedetector、/form、/keepalive、/lifecycle、/list、/modal、/observer、/select、/timer、/fileupload、/virtuallist 全栈集成:/websocket、/sse、/qrcode、/shortlink、/rss、/cicd、/monitor 2D / 3D 游戏:/game2d、/game3d、/gomoku、/ide、/chat、/auth、/blog、/textreader、/videolist、/tracking、/trace、/order、/user、/notification、/json、/sticky、/redis、/diff 核心能力 35 种非冒泡事件 + 所有冒泡事件走全局委托,每种事件类型仅一个 window 监听器 内置组件:euvbutton(Primary / Outline)、euvcard、euvinput、euvcheckbox、euvbadge、euvtag、euvalert、euvmodal、euvlogo、euvinfo、euvformlabel 依赖追踪 + 计算属性:Signal::get() 在 DynamicNode 内自动追踪;computed! 派生只读信号 生命周期 Hook:usesignal / usecleanup / usewindowevent / useinterval 批量更新:App::batch(|| { ... }) 闭包内多次 set 仅触发一次 DOM dispatch 总结 Euv 作为一款新兴的 Rust 声明式 UI 框架,在 WebAssembly 生态中独树一帜。通过创新的架构设计——精确依赖追踪的 Signal 系统 + 按需 Patch 虚拟 DOM + dataeuvid 全局事件委托 + CSSinRust 样式系统——为 Rust 前端开发提供了完整且高效的解决方案。 框架的核心优势在于: 开发体验:html! 宏 + class! 宏 + usesignal Hook + computed! + watch!,五位一体的声明式开发范式 运行时性能:精确依赖追踪(不广播)+ Microtask 批处理 + Keyed Diff + 事件委托,多层级优化确保极致渲染效率 类型安全:编译期宏展开、Props 自动提取、事件类型强校验、Signal<bool 强约束,将 UI 错误扼杀在编译阶段 工程化支持:CLI 工具链提供 run / build / fmt 三种模式,内置热更新、wasmpack 集成和代码格式化 生态完整:可选 euvengine(2D 游戏引擎)+ euvui(跨 page 组件库)+ 50 个示例 page 对于追求类型安全、高性能和开发效率的 Rust WebAssembly 项目,Euv 是一个值得考虑的优秀选择。随着 Rust 前端生态的不断发展,Euv 有望成为 WebAssembly UI 开发的重要工具。

Original
DTResearch & learningDTLifestyle & entertainmentDTWeb app
—

Agent-HTML:抛弃对话框,用HTML和AI交互

背景 传统llm交互模式只能基于对话框,而html可以作为agent和人之间的画板,当我们想表达某个想法时可以直接选择页面的元素和agent对话,agent也不再需要返回冗长文字,而是生成可交互的组件,比如按钮/复选框等 实现 将组件作为积木一样封装好,agent不再需要写非常啰嗦且随机的html样式代码,而是像搭积木一样,只需要极少量的token就能生成一个样式和结构稳定的页面,让ai更专注于内容表达而不是冗长的样式 <div align="center" 组件作为积木在页面可直接交互 text </div 丰富组件 <div align="center" agent生成面板,在页面做交互反馈 支持表格及嵌入图片 width="500" / 支持丰富数据图表 width="500" / </div Agent交互 <div align="center" 本地agent交互,哪里有问题直接问 width="500" / </div 个性化主题 <div align="center" width="500" / </div

Original
DTSoftware development
—

Codex Mate — 本地AI编程工具统一管理面板

Codex Mate 是一个本地优先的 CLI + Web UI,用于统一管理多个本地 AI 编程工具: 多工具统一入口:Codex / Claude Code / OpenClaw 配置切换 会话管理:统一浏览、过滤、导出会话记录,带使用统计 支持:Codex、Claude Code、Gemini CLI、CodeBuddy Code 本地技能市场:技能跨应用导入/导出,ZIP 分发 提示词模板:可复用的变量化模板,一键生成 OpenAI 兼容桥接:将 Codex 响应转为 OpenAI 格式 MCP 支持:stdio 协议集成(默认只读) 与手动配置对比 | 维度 | Codex Mate | 手动编辑 | |||| | 多工具管理 | 单入口统一管理 | 各工具分散配置 | | 会话操作 | 浏览/过滤/统计/批量清理 | 手动定位文件处理 | | 技能复用 | 本地市场+跨应用导入 | 手动复制文件夹 | | 可见性 | 统一视图+汇总 | 依赖手动检查 | 快速开始 npm install g codexmate && codexmate run 默认监听 .0.0.0:3737,自动打开浏览器。 技术栈 Node.js + Vue 3,原生 HTTP 服务,零云依赖。 GitHub: 文档: 协议: Apache2.0

Original
DTSoftware developmentDTAgent extensionDTAgent orchestration
—

Recall Inbox:自托管的 X 书签与 GitHub Stars 处理收件箱

Recall Inbox 在线 一句话介绍: Recall Inbox 是一个自托管的个人收藏收件箱,用来同步和整理 X 书签、GitHub Stars 等保存过但容易被遗忘的内容。 很多人会不断收藏帖子、文章和开源项目,但很少真正回看。Recall Inbox 试图把这些零散收藏变成一个可处理的工作流:同步 回顾 标记状态 添加标签/笔记 导出 Markdown。 目前支持: 同步 X 书签 同步 GitHub Stars 使用 inbox / keep / action / dismiss 管理收藏状态 添加标签和笔记 导出 Markdown 本地运行,或部署到 Cloudflare Workers + D1 / Vercel + Postgres 适合人群: 经常收藏内容但缺少回顾流程的人 想把 GitHub Stars 和 X 书签统一整理的开发者 偏好自托管和 Markdown 工作流的个人知识管理用户 它不是另一个完整的书签管理器,而是更偏向“收藏后的处理收件箱”。目标是帮助用户定期消化已有收藏,而不是继续堆积更多链接。

Original
DTData & operationsDTSoftware development
—

AI Agent 全栈工程师 · 远程

AI Agent 全栈工程师 · 远程 15–25k / 月 · 远程 · 早期团队 · 0 → 1 优秀者可谈早期期权 关于团队 我们是一家专注 AI Agent 应用方向的早期团队,刚组建,正在从 0 到 1 打造一款 AI 社交向 mobile 产品。 产品已完成第一阶段 demo,即将进入正式开发期。 我们做什么 新一代 AI Agent 应用方向 不是 ChatGPT 套壳,不是企业 SaaS 面向 C 端用户的创新形态 具体方向面试时详谈 你会做什么 | 维度 | 内容 | ||| | 全栈参与 | RN 端 → Node 服务 → LLM 编排,完整链路 | | 架构共建 | 跟创始团队一起决定技术栈细节,不是执行外包 | | AI 工程 | LLM Prompt 工程 + Agent 行为编排 + 实时消息系统 | | 三方平衡 | 性能 / 成本 / 体验 | | 关键模块 | 经济系统、状态机、权限分层等核心设计 | 我们要什么样的人 必须项 3+ 年全栈经验 — 前后端任一深度,另一端能独立开发 0 → 1 上线经历 — 自有项目或公司初创都算,必须独立扛过 任一技术栈深度足够: 前端 · React Native(Expo 优先)/ React + TS / Tailwind 后端 · Node.js(Hono / Fastify / Express) / Prisma / Postgres / Redis AI · 任一主流 LLM SDK(OpenAI / Anthropic / Vercel AI SDK / DeepSeek) 真用 AI 写代码,不抗拒 — Claude Code / Cursor / Codex 任一深度用户 工程纪律: 有意识地写测试 有意识地避免用 fallback 掩盖错误 响应快、自驱、能远程协作 加分项 上线过 RN 应用,过审 iOS / Android 主导过 BullMQ / cron / 异步任务编排 写过中等以上规模的 Prompt 工程或 Agent 系统 对社交 / 内容 / 游戏化产品有深入产品思考 有活跃的 GitHub 账户(开源贡献优先) 投递 [在这里填你的投递邮箱:hi@orionchen.me] 请附上: GitHub 一段你最自豪的项目 或 一次最痛的线上事故复盘(二选一) 你最近一次用 AI 写代码的真实截图或描述 我们小,但我们决定干净。

Original
DTLifestyle & entertainmentDTSoftware developmentDTAgent orchestration
—

一道小学题,看懂大模型进化

用一道小学数学题拆解大模型训练的五个阶段,从混沌续写到长出双手,再到涌现自我对话——这篇科普文字把预训练、SFT、RLHF、RLVR到Agent的演化逻辑讲得简单明了。 如果你好奇 ChatGPT 为什么“会说话”却不一定“会思考”,想知道 DeepSeek 那种“等一下,我理一理”的推理感从哪儿来,读完它,你就摸到了大模型进化的那条清晰回路。

Original
—

TaskPin - Windows 任务栏嵌入信息显示工具

TaskPin 是一个 Windows 任务栏嵌入工具,可以将自定义信息直接显示在任务栏内部。纯 C + Win32 API + Lua 5.4 实现,单文件 450KB,零依赖。 支持 HTTP API 轮询 + Lua 脚本两种数据源,内置 JSON 解析和模板引擎,可用于监控服务状态、查看待办任务、显示账户余额等场景。 GitHub:

Original
DTWindows
—

GEO Wiki,面向 AI 搜索时代的免费百科全书

GEO Wiki 是一个面向 AI 搜索时代的免费百科全书,专门收录与生成式引擎优化(Generative Engine Optimization, GEO)相关的概念、方法、平台与研究。 它要解决的问题很具体:当读者越来越习惯在 ChatGPT、Perplexity、Google AI Overviews、Gemini 这类生成式入口里直接拿答案,原本围绕"排序链 接"建立起来的 SEO 知识体系正在失去解释力。GEO Wiki 把这门新学科的术语、流程、引擎差异、最新论文整理成可引用、可核查的条目,让从业者在客户方案里能直接引用,让工程师在阅读时不会觉得被稀释。 站点分为五个模块: Wiki:GEO 概念、引擎爬虫、SEO/AEO/LLMO/GEO 对比等定义性条目。 Playbooks:可复用的操作手册,覆盖审计、引用追踪、品牌提及监测等日常动作。 Research:原创论文与一份精选的参考文献库,聚焦 AI 搜索行为、评测与治理。 Platforms:每一家主流中西方 AI 搜索引擎的深度档案,含爬虫 UA、排序信号、访问策略。 Learn:把上述四类内容串成学习路径,按从入门到落地的顺序导览。 所有条目同时提供英文与简体中文两个版本。 2. 我为什么要做这个 第一,中文圈缺一份可信的 GEO 参考。 市面上要么是各家 SaaS 写的产品向软文,要么是英文资料的机器翻译,几乎没有把"什么是 GEO、它与 SEO 的真正分野在哪、各家引擎到底如何爬取与引用"讲清楚的中立来源。从业者在跟客户解释时,常常没有一条可以贴出去的链接。 第二,AI 搜索的规则正在被重新写。 爬虫、引用机制、品牌提及权重这些底层信号变化得很快,传统 SEO 资料的更新节奏跟不上,原始论文又散落在 arXiv、各厂博客、各家工程文档里。需要有人把它们一篇篇读完、对齐、注上出处。 3. 特点 引用级的内容标准 每一个非显而易见的论断都必须挂一条一手来源(论文、厂商文档、首方数据)。sources 字段是内容 schema 的强制部分,没有出处的条目无法发布。 自创术语被诚实标注 凡是站点自己提出、行业尚未通用的说法(如 Answer Loop),条目顶部会有一段"关于这个词"的说明,事实卡里会写明"是否行业通用术语:否",并锚定 到它所依赖的既有概念。读者一眼能分辨这是行业共识还是站点观点。 模块之间彼此打通 定义条目可以直接跳到对应的 Playbook,Playbook 又会引用 Research 里的论文与 Platforms 里的引擎档案,Learn 再把这些串成可执行的学习路线。读者从任一入口进入,都能顺着链接走完一个完整闭环。 为 AI 与人同时设计 结构化数据、清晰的标题层级、稳定的 URL、显式的 TL;DR、CC BY 4.0 协议,让生成式引擎可以低成本地理解与引用本站,也让人类读者在前 10 秒就能拿到要点。 4. 适合谁 主要面向三类读者 SEO 与市场从业者:正在从传统 SEO 过渡到 GEO,需要可以在客户方案、内部周报、汇报材料里直接引用的定义与方法。建议从 Wiki 里的 SEO vs GEO、生成式引擎、引用追踪 等基础条目入手,再到 Playbooks 找对应的执行手册。 AI 与搜索方向的工程师、研究者:关心一手定义、原始论文、可复现的评测方法。建议直接进入 Research 与 Platforms 模块,逐一查看各引擎的爬虫 UA、排序信号、首方文档链接。 品牌、产品与业务决策者:需要快速判断"这件事是否值得投入、投入多少"。建议从 Learn 的入门路径开始,配合 About 与 Topic 索引建立全局认知。

Original
DTSecurity & testingDTResearch & learningDTWeb app
—

小K酱 iOS AI Dev:帮非技术背景创作者把 App 从想法做到上架的 Skill

人工智能 小K酱|帮非技术背景创作者把 iOS App 从想法做到上架的 Skill 一个专门为「有产品想法但不会写代码」的创作者设计的 Claude Code Skill。覆盖 iOS App 开发全流程:立项规划、产品定义、技术选型、AI Prompt 架构设计、UI 设计审查、开发中问题诊断、App Store 合规检查。 AI 自动诊断开发问题(代码 bug / prompt 偏差 / 联调断层 / 设计问题),根据描述自动路由到对应的处理流程,不需要用户自己分类问题。集成了 /qiaomudesignadvisor(设计审查)和 Jobs 视角审计(设计合理性校验)。 亮点 角色替代:确认用户无技术背景后,AI 承担所有代码判断,用户只需决定「要不要做」而不是「怎么做」 防踩坑清单:覆盖最常见的踩坑点——第三方登录合规、IAP 配置、PostgreSQL 特殊字符、异步操作锁等 Prompt 工程内置:将 Claude 官方 Prompt 工程四层结构(可读性 / 靶心 / 能力 / 验证)落地到 App 开发场景 中英双语:README 中英文,面向全球独立开发者 bash npx skills add kellyvai/lovekkiosaidev@iosaidev

Original
DTSecurity & testingDTSoftware developmentDTAgent extension
—

小K酱 业务操盘手:大组织零资源做 0→1 项目的 Skill

人工智能 小K酱|大组织零资源做 0→1 项目的业务管理 Skill 针对大型企业业务管理岗(金融、零售、地产等)的 Claude Code Skill。解决「没有权限、没人配合、资源被卡、数据说不清楚、城市不执行」这些大组织里真实存在的难题。 四个工作流入口: 1. 新项目立项 — AI 引导用户把模糊方向变成可执行的立项方案,自动生成立项分析报告 2. 系统 / 产品设计 — 先定经营逻辑,再定系统需求,避免「产品做出来一线不用」 3. 数据指标体系 — 搭三层指标体系(项目级 / 渠道级 / 推动级),帮用户掌握数据解释权 4. 推动落地 — 诊断卡在向上 / 向横 / 向下哪一层,直接出推动方案 亮点 执行工作流而非教学文档:用户描述情况,AI 读取内部框架自主判断,直接输出方案,不讲课 方法论来自真实项目实战:经过大型企业多个 0→1 项目验证的框架,不是理论 协同推动框架:「向上拿资源 / 向横让团队动 / 向下让城市执行」三层交易设计,每层都有具体打法 中英双语:README 中英文 bash npx skills add kellyvai/lovekkbizops@bizops

Original
DTAgent extensionDTAgent orchestrationDTSkill / plugin
—

TradingAgents-CN-lite: 轻量级多Agent股票分析框架,支持对A股/港股/美股上市公司进行分析

人工智能 一个轻量级的支持A股/港股/美股分析的多Agent股票分析框架 基于LangGraph的多Agent股票分析框架。输入股票代码和日期,四个AI分析师并行工作:基本面读财报,情绪爬东方财富股吧,新闻抓CCTV财经,技术面算MACD/RSI/布林带。之后多头和空头辩论,风险管理团队三方审查,最终给出买卖建议和分析报告。原版TradingAgents只支持美股,A股数据缺失;完整版TradingAgentsCN需要部署Web UI、MongoDB、Redis、Docker,个人研究太重。本项目保留CLI轻量架构,补齐A股完整数据管道,自动识别市场,一条命令即可运行,最终直接生成比肩顶级投行的研究报告。 亮点 相比原版:补齐了A股完整数据支持(BaoStock行情、AkShare财报、东方财富股吧情绪、CCTV宏观新闻),输入A股代码即可运行。相比CN完整版:去掉Web界面、数据库、Docker依赖,保留CLI轻量架构,个人研究改代码都方便。模拟真实投资团队决策流程——分析师出报告、多空辩论、风控审查、经理拍板,不是单一模型直接给结论。最后直接生成Markdown和HTML的研究报告(中英文版都有),让投资者直观了解这家被研究的上市公司的运营状况和未来潜力 markdown CNSYSTEMPROMPT = """你是高盛级别的中文投行报告设计师。 任务:阅读下方 markdown 投资分析报告,生成一份简洁、直观、专业的中文 HTML 报告。这不是翻译——你需要提炼关键信息,用投行报告的视觉语言呈现。 设计规范 配色(高盛风格): 页眉背景:003A70(深蓝) 金色点缀:B59A57(边框、高亮、评级徽章描边) 买入绿:1B5E20 | 卖出红:B71C1C | 持有金:B59A57 卡片背景:FAFAF8 | 卡片边框:E8E6E1 正文:1A1A1A | 次要文字:6B6B6B 字体(Google Fonts @import + 系统字体): @import url('); 标题:'Microsoft YaHei', 'PingFang SC', sansserif — 微软雅黑,干净专业 正文:'Microsoft YaHei', 'PingFang SC', sansserif 数据/数字:'JetBrains Mono', monospace 内容规则: 完整呈现分析内容——每节应有详实、数据支撑的洞察,不是简单的要点罗列。 保留所有重要推理、指标、数据点和结论。只删减真正冗余的重复文字和原始数据表。 每节应像真实的股票研究报告:24 段有具体数字、日期和证据的分析文字。 多空辩论:包含关键论点及其支撑逻辑,不只是标题。 风险评估:详述每个风险因素的背景,不只是标签。 执行摘要:58 句话的全面概述,不是骨架式的提纲。 章节用中文序号:一、二、三... 专业术语首次出现附英文:市盈率(P/E Ratio) 评级用中文:买入、增持、持有、减持、卖出 日期格式:2026年5月22日 布局: 最大宽度 860px,居中,留白充足 评级大徽章居中展示(买入=绿、持有=金、卖出=红) 执行摘要:35 条要点,金色边框卡片 核心指标:紧凑网格(PE、市值、目标价等) 多空对比:左右卡片(绿左红右),各 35 条 风险评估:卡片网格 最终决策:醒目卡片,明确建议 打印友好 纯 HTML + 内联 CSS,单文件。仅允许 Google Fonts @import。只输出完整 HTML,以 <!DOCTYPE html 开头。""" def generatehtmlreportcn(mdpath: str) str: """Generate Chinese HTML report from markdown. Returns path to HTML file.""" with open(mdpath, "r", encoding="utf8") as f: mdcontent = f.read() print("[generatereport] Generating Chinese HTML report...") htmlcontent = callllm(mdcontent, CNSYSTEMPROMPT) htmlpath = mdpath.rsplit(".", 1)[0] + "cn.html" with open(htmlpath, "w", encoding="utf8") as f: f.write(htmlcontent) print(f"[generatereport] Chinese HTML saved to: {htmlpath}") return htmlpath if name == "main": if len(sys.argv) < 2: print("Usage: uv run python generatereport.py <pathtoreport.md") sys.exit(1) mdpath = sys.argv[1] generatehtmlreport(mdpath) generatehtmlreportcn(mdpath) 截图或演示视频

Original
DTResearch & learningDTData & operationsDTAgent orchestration
—

BaseBuddy

Turn your Supabase database into a WordPress-like editor

DTData & operations
103

Aviquill

A calm canvas for visual thinkers with messy minds

DTResearch & learning
79

Harbor

CLI + companion App to spin up complete local LLM stacks

DTSoftware developmentDTWeb
75

GenGo

Transform selected text anywhere on macOS

DTSoftware developmentDTmacOSDTTerminal
78

QuickSheet v1.2

Instantly create and edit spreadsheets from your menu bar

DTDesktop productivityDTDesktop appDTWeb
83

zero.xyz

Give your AI agent access to ~8k tools, APIs and services

DTCLIDTTerminalDTClaude Code
341

Octolane

Self-driving AI CRM that you can talk to

DTBusiness & growthDTAgent extensionDTAgent orchestration
179

baz.studio

Skills library & video editor for AI Agents

DTSoftware developmentDTAgent extensionDTCLI
99

Local Panel

Local SSH server manager with no subscriptions or installs

DTDesktop productivityDTDesktop app
84

DEV TRENDS / COMMUNITY

Discuss this edition

Sign in with GitHub to share a thought, question, or useful follow-up.

Open discussions ↗