惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
C
Cybersecurity and Infrastructure Security Agency CISA
P
Palo Alto Networks Blog
N
News | PayPal Newsroom
L
Lohrmann on Cybersecurity
S
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
IT之家
IT之家
云风的 BLOG
云风的 BLOG
博客园_首页
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Cyber Attacks, Cyber Crime and Cyber Security
量子位
人人都是产品经理
人人都是产品经理
S
Securelist
Last Week in AI
Last Week in AI
V
V2EX
Simon Willison's Weblog
Simon Willison's Weblog
AWS News Blog
AWS News Blog
I
Intezer
T
The Exploit Database - CXSecurity.com
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
美团技术团队
Project Zero
Project Zero
博客园 - 叶小钗
Cyberwarzone
Cyberwarzone
A
Arctic Wolf
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
P
Privacy International News Feed
Blog — PlanetScale
Blog — PlanetScale
C
Cisco Blogs
G
GRAHAM CLULEY
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
P
Proofpoint News Feed
NISL@THU
NISL@THU
Latest news
Latest news
Scott Helme
Scott Helme
The Hacker News
The Hacker News
Know Your Adversary
Know Your Adversary
F
Full Disclosure
The Cloudflare Blog
Spread Privacy
Spread Privacy
H
Hacker News: Front Page

Lobsters

CIFSwitch: a non-universal Linux local root vulnerability RIPE NCC session fixation: poaching logins with an Atlas probe GNOME 2.20 but its Web Components Agentic Search for Context Engineering – Leonie Monigatti Garnix is shutting down [not OC] akashina.tngl.sh/jjc Concerning Emacs (and Jazz) Nitpicking the shell history scene in ‘Tron: Legacy’ What's cooking on SourceHut? Q2 2026 The tenth OpenPGP email summit Package managers that package package managers Clojure on Fennel part three: parsing WordPress at 23 Finding Miscompiles for Fun, Not Profit GitHub - creusot-rs/creusot: Creusot helps you prove your Rust code is correct. Announcing Rust 1.96.0 | Rust Blog A Love Letter to Neovim sqlite AGENTS.md Am I a Bad Friend? CSS vs. JavaScript • Josh W. Comeau Erlang Ecosystem Foundation - Supporting the BEAM community A brief note about slot access cost in Common Lisp Keyboard latency probe Rethinking the GNOME clipboard issues Back to the Building Blocks’ Building Blocks Tech Notes: Theseus: translating win32 to wasm Fast is better than slow Content-addressed Rust builds (or, what kache actually caches) Intent to Prototype: Embedding API Canada’s Bill C-22 and the security cost of collecting more data 5 PostgreSQL locking behaviors that trip people up okmij.org Stop advertising in your commits! | AksDev GitHub - mplsllc/macsurf: A modern web browser for Classic Mac OS 9 PowerPC. Real CSS3, ES5 JavaScript, native HTTPS — built with CodeWarrior on the Carbon API. Introducing DoomBench - Can Your Data Stack Run DOOM? What are some of your favourite developer tools? Building a Scalable Ingestion Pipeline with Temporal (Part 1) Converting shallow Git bundles into normal repositories Are you a member of any professional associations? What is a harmonic? An interactive comic about additive synthesis How Virtual Tables Work in the Itanium C++ ABI Using SwiftUI to Build a Mac-assed App in 2026 Rust (and Slint) on a jailbroken Kindle. ~jack/lambda-on-lambda - Serverless Haskell on AWS - sourcehut git Human proof for FOSS contributions Extremely simple internet radio controlled via IRC Announcing BABLR Splitting Konsole views from Helix to run tools | AksDev GitHub - yugr/rust-slides Serving files over HTTP three ways: synchronous, epoll, and io_uring update docs with information about building with build.py (#979) · astral-sh/python-build-standalone@c9c40c5 A Simple Makefile Tutorial On C extensions, portability, and alternative compilers Switching to Colemak | Pedro Alves Just How Bad Was The Intel IAPX432? Nix's Substituter List Is Not a Routing Table Accelerating copy_if using SIMD Lambda on Lambda: Serverless Haskell on AWS | Blog Announcing feed-repeat v1.0 Scaling Akvorado BMP RIB with sharding EYG news: A host of CLI improvements, new guides and new effects The social contract of writing JS Crossword C array types are weird; and related topics Flatpak will depend on systemd – OSnews Migrating from Go to Rust | corrode Rust Consulting A portentous reunion Vivado Licensing Options How my minimal, memory-safe Go rsync steers clear of vulnerabilities the entropy layer of a wavelet codec, on its own GitHub - nferhat/fht-compositor: A dynamic tiling Wayland compositor. Debian SE Linux and PinTheft Does bulk memmove speed up std::remove_if? (No.) 声明式部分更新 | Blog | Chrome for Developers Fully in-browser container builds Dianne Skoll's Web Site - Remind The Architecture of Open Source Applications (Volume 1)Berkeley DB Pardon MIE? - ironPeak Blog “Long-Term Support” doesn’t mean what you think Jira IS Turing-Complete May I recommend thinking of Emacs as your Fortress of Solitude hershey Floodgap Gopher-HTTP gateway gopher://thelambdalab.xyz/1cuneiforth/ HP QuickWeb, Singular And Pointless That one time I used Go panics for flow control A new suite of modern tools coming for editing and publishing RFCs From the Tabletop… The Digital Antiquarian Building a Host-Tuned GCC to Make GCC Compile Faster Are we self-sovereign PKI yet? Claw Patrol: an open-source security firewall for agents | Deno Revised^7 Report on Scheme, Large: Procedural Fascicle Draft is now public A Network Allow-List Won't Stop Exfiltration — André Graf From AFSK to Goertzel – µArt.cz Software For My New Home Server Introducing Neptune: Direct3D virtualization for QEMU AI Agent Bankrupted Their Operator While Trying to Scan DN42 - Lan Tian @ Blog mimalloc: A new, high-performance, scalable memory allocator for the modern era Making wl_shm fast The Soul of Maintaining a New Machine - Third Draft | Books in Progress What is Git made of?
Slint 1.17 Released
Slint Developers · 2026-06-24 · via Lobsters

June 24, 2026 by Slint Developers


We're happy to announce Slint 1.17, another big step toward making Slint desktop-ready. This release brings drag and drop, system tray icons, tooltips, and two-way bindings on model rows.

Slint is a toolkit written in Rust, with APIs for Rust, C++, JavaScript, and Python, for building native user interfaces for desktop, embedded, and mobile applications.

Making Slint Desktop-Ready

Back in November we laid out a plan to make Slint desktop-ready. With 1.17 we're checking off four more boxes from that list:

  • single-window drag and drop
  • system tray icons
  • tooltips as a built-in widget
  • two-way bindings on model rows

Work on drag and drop, system tray icons, and tooltips was funded by NLnet as part of the Slintify LibrePCB project. We're very grateful for their support.

Drag and Drop

You can now add drag and drop interactions to your Slint apps.

Try the kanban demo live in your browser.

A DragArea marks the source of a drag, a DropArea marks the target, and the payload is an opaque data-transfer value that you construct and read in your host language.

export global Api {
    pure callback make-transfer(string) -> data-transfer;
    pure callback read-transfer(data-transfer) -> string;
}

export component Example inherits Window {
    DragArea {
        data: Api.make-transfer("Hello World");
        allow-copy: true;
        Rectangle { background: #f0c000; width: 100px; height: 100px; }
    }

    drop := DropArea {
        x: 150px;
        can-drop(event) => DragAction.copy;
        dropped(event) => {
            debug("Got: ", Api.read-transfer(event.data));
            return event.proposed-action;
        }
        Rectangle {
            background: drop.contains-drag ? #80e080 : #a0a0a0;
            width: 100px;
            height: 100px;
        }
    }
}

can-drop runs while the drag hovers and returns a DragAction that drives the cursor and any visual feedback; dropped runs on release and confirms the action. A DragArea declares which actions it allows and reacts to the result through drag-finished. See the drag and drop guide for the full picture.

In this release, drag and drop works within the application. Dragging to other applications and receiving drops from them is in development upstream in winit.

System Tray Icons

Run a quiet background app, display status updates, or expose a quick-action menu from the system tray with the new SystemTrayIcon element:

export component MyTray inherits SystemTrayIcon {
    icon: @image-url("tray.png");
    tooltip: "My App";

    callback show-window();
    callback hide-window();

    Menu {
        MenuItem {
            title: "Show";
            activated => { show-window(); }
        }
        MenuItem {
            title: "Hide";
            activated => { hide-window(); }
        }
    }
}

The same SystemTrayIcon works on macOS, Windows, and Linux. The clip above shows it on Windows.

Tooltips and Radio Groups

Two new widgets that show up everywhere in a real desktop app.

Add a tooltip to any element with the new Tooltip element:

Button {
    text: "Save";
    Tooltip { text: @markdown("Save the current document (Ctrl+S)"); }
}

And bundle a set of radio buttons with RadioGroup, which manages selection and keyboard navigation for you:

RadioGroup {
    RadioButton { text: "Small"; }
    RadioButton { text: "Medium"; checked: true; }
    RadioButton { text: "Large"; }
}

Other Changes

Additional items worth highlighting:

  • MCP server for AI assistants: a Slint application can now embed a Model Context Protocol server. Once connected, an assistant can inspect a running application through its accessibility tree, drive the UI by injecting mouse, touch, and keyboard input, and capture screenshots to reason about the result. We also ship skills and plugins that teach AI coding assistants how to write Slint code; see the AI coding assistants guide to set them up.
  • Remote Slint viewer: a new --remote flag connects slint-viewer to a Slint LSP running on another machine and renders the design locally, so you can edit a .slint file on your desktop and watch the result on a phone or tablet as you type. The viewer is in beta for Android on Google Play (or grab the APK), and for iOS through TestFlight while the App Store review is underway.
  • Two-way bindings on model rows: following the two-way bindings on struct fields from Slint 1.15, you can now bind directly to model row data with text <=> item.name, editing a row in place without bouncing through a callback to write the change back.
  • Cross-axis alignment on layouts: align children along the cross axis with the new cross-axis-alignment property on VerticalLayout and HorizontalLayout (#2587).
  • A faster Node.js port: on Linux and macOS, Slint now ties its event loop to the libuv file descriptor that Node already polls, so the UI no longer wakes on a timer and idle CPU usage drops to near zero (Windows is still pending). A dedicated blog post on these changes is coming soon.
  • C++ on Android: you can now build Slint apps for Android from a C++ codebase. See the Android guide to get started.
  • Markdown parsing in native code: the StyledText API in Rust, C++, JavaScript, and Python now parses markdown at runtime, so you can construct styled text from data your app loads at runtime, not just from .slint literals.
  • Drop-shadow improvements: we added drop-shadow-spread and a full set of inner-shadow-* properties to Rectangle (Skia only).

For the full picture, see the ChangeLog.

Getting Started with Slint 1.17

Don't forget to star us on GitHub, join our Mattermost chat, and share your projects.

Thanks

Big thanks to everyone who contributed code, fixes, or feedback. You help us make Slint better with every release.

@0x6e @1mrnewton @agent10 @amirHdev @bennysj @bowenxuuu @DataTriny @dfaure-kdab @eira-fransham @Eyalm321 @farmaazon @fieran100 @flukejones @GrandAdmiralBee @ImFeH2 @lainon1 @manushT @megabyte6 @npwoods @pepin82 @qarmin @redstrate @ruffsl @stevekwon211 @task-jp @tilladam @ubruhin @wyhaya


Comments

Slint is a Rust-based toolkit for creating reactive and fluent user interfaces across a range of targets, from embedded devices with limited resources to powerful mobile devices and desktop machines. Supporting Android, Windows, Mac, Linux, and bare-metal systems, Slint features an easy-to-learn domain-specific language (DSL) that compiles into native code, optimizing for the target device's capabilities. It facilitates collaboration between designers and developers on shared projects and supports business logic development in Rust, C++, JavaScript, or Python.