Commit Graph
100 Commits
Author SHA1 Message Date
Jonathan Kelley 51b0cd3313 fix: more panic resilience (#5489)
* fix: more panic resilience

* fix: panic typos
2026-04-14 17:58:50 -07:00
John CostaandJonathan Kelley cb5abb48dd fix(cli): display user-specified address in serve output (#5481)
* fix(cli): display user-specified address in serve output

When running `dx serve --addr 0.0.0.0`, the CLI was overriding the
displayed address to 127.0.0.1. This was confusing for users who
explicitly chose 0.0.0.0 and expected the output to reflect their
choice. The default (127.0.0.1) is unchanged when no --addr flag is
given.

Fixes #5477

* fix(cli): resolve actual network IP when bound to 0.0.0.0

Instead of showing the unroutable 0.0.0.0, use the UDP socket trick
to resolve the machine's primary network address for a clickable URL.
Falls back to 127.0.0.1 when resolution fails (no network, etc).

* style: apply rustfmt to test function calls

* fit longer urls in tui frame

* space

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-04-14 16:52:43 -07:00
MartinandJonathan Kelley 79693f8cff Minor fixes for tests (#4686)
* Suggested method for correcting integration tests

* Use static atomics for simplicity

This is consistent with the test immediately below.

* Add assertions to some tests, comments to others

This should fix a handful of tests that didn't correctly do their test.

In other places, comments should make it clearer *why* tests are how
they are.

* Be consistent with existing imports

* remove bad test

* nit

* fix compile errrs

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-04-14 15:37:30 -07:00
Jonathan Kelley 679ba83652 make Action partialeq (#5488)
* make Action partialeq

* better docs, hoist to macro_rules

* doc
2026-04-14 14:34:41 -07:00
Evan Almloff 94e4465244 fix resize and visible types (#5483) 2026-04-14 12:10:58 -07:00
Jonathan Kelley fb855b7088 fix: workspace hotpatch cache thrashing, feat: add compile profiling, cleanup + refactor + document cli request.rs file (#5479)
* it works!

* fix wasm hotpatch error

* bump wasmopt

* rename wasmopt flag

* rename ldd_keep_exports

* add build profiling

* undo bundle ignore

* some cleanups

* more cleanups

* wip: hoist up telemetry to builder

* fix compile

* wip: flamegraph rewrite

* clean up flamegraph impl

* cleanup profiling engine

* add comment on spans obj

* cleanup more phases

* more cleanup

* small cleanups

* bit more cleanups

* cleanup phases

* sign with tokio, not std proc

* split out the specific platform helpers

* cleanup a bit

* more cleanups

* more cleanups

* more cleanups

* more cleanups

* pull out fingerprint logic

* wip... I think I have a slightly better approach. saving checkpoint

* hm I think it's better now?

* fix: also seems to work not in workspace mode juuust yet

* okay yay almost there

* clooose but not there yet

* fix: manually export __wasm_apply_data_relocs since got relocations weren't firing

WASM workspace hotpatching: export __wasm_apply_global_relocs to fix call_indirect type mismatch

When workspace crates are recompiled with -Crelocation-model=pic for hotpatching, wasm-ld generates GOT.func.internal globals that hold element-segment-relative offsets (e.g., MetricCardProps::memoize = 31). These need __table_base added at runtime by __wasm_apply_global_relocs to become absolute table indices.

wasm-ld generates __wasm_apply_global_relocs but treats it as an internal synthetic function -- neither --export nor --export-if-defined will export it. Without the export, the runtime's call silently failed (the old code used unchecked_into on undefined), leaving the globals unrelocated. Function pointers then pointed to index 31 in the original module's table (some unrelated function) instead of table_base + 31 (the patched function), causing call_indirect to a signature that does not match.

Three changes:

patch.rs: After walrus processing, find __wasm_apply_global_relocs by name and add it as an export before emitting the patched wasm.
lib.rs: Replace unchecked_into with dyn_into for calling relocation functions, so missing exports are handled gracefully instead of silently swallowed.
link.rs: Remove the ineffective --export-if-defined flags that were added during debugging.

* cleanup

* fix scope dir

* change up naming a bit

* more tidying up

* more cleanups

* ignore early return

* clean er up

* more comprehensive cache bustign

* bust fingerprints of dag

* move bust_fingerprint back to request.rs

* add better rustdoc

* more idiomatic

* more cleanups

* fix panic, typos

* more lints

* only delete workspace prints in fat mod

* clippy
2026-04-14 12:09:49 -07:00
Nico Burns 348208d1cb Remove bevy from the workspace (#5471)
Signed-off-by: Nico Burns <nico@nicoburns.com>
2026-04-10 10:38:13 -07:00
dunkylandEvan Almloff da445fdeb6 Fix: notify parent store when child is marked dirty (#5365)
* add tests

* fix: include root node when store is marked dirty

* fix tracking deep subscriptions. We need to walk all parents for deep subscriptions instead of relying on tracking all children recursively during the initial read since some children may not exist yet

* avoid double notifying parents when children re-visit parents in deep mark dirty

---------

Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
2026-04-10 11:44:26 -05:00
Trevin Chow 35826114c5 feat(html): add inert global HTML attribute (#5476)
Add the `inert` boolean attribute to the global HTML attribute
group and to the SSR boolean attributes list. This allows users
to set `inert` on any HTML element, matching the HTML spec.

Fixes #5455
2026-04-10 12:25:53 +01:00
Jonathan Kelley 71df8c790f fix: clippy 2026-04-07 18:48:04 -07:00
faysouandJonathan Kelley 56882b97e5 feat: support Cursor editor as debug session option (#5205)
* feat: support Cursor editor as debug session option

* fmt

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-04-07 18:13:38 -07:00
Trevin ChowandJonathan Kelley e396c1f04b feat: add blanket IntoAttributeValue impl for references (#5447)
* feat: add blanket IntoAttributeValue impl for references

Adds `impl<T: IntoAttributeValue + Clone> IntoAttributeValue for &T` so
users don't need to explicitly dereference or clone when passing references
to RSX attributes.

Closes #5444

* use to-owned

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-04-07 17:09:58 -07:00
SuperKenVeryandJonathan Kelley 95fdca3cbf fix: Content-hash-based filename when bundling with wasm_split (#5340)
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-04-07 16:33:01 -07:00
Jonathan Kelley c73dc43233 fix(autofmt): add support for handling comments in various expression types (#5461)
* fix(autofmt): add support for handling comments in various expression types

* fmt
2026-04-07 16:19:00 -07:00
Samuel ÅkessonandJonathan Kelley 689e39b3f6 Add shell-completions for dx (#5232)
* add naive shell completion using clap_complete

* first pass completions

* simpler toggle

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-04-07 15:25:11 -07:00
Evan Almloff d8026f8824 Fix autofill event downcast - ignore events of the wrong type (#5379)
* fix autofill events

* ignore the wrong type of event like we do in desktop

* check the event type before dispatch instead of panicing on downcast

* clean up conversion

* remove example

* pull out shared event list

* pull in deserialize_raw

* unified event list

* prettier comment

* restore test

* restore alias

* normal doc comments

* move over comments

* minimize diff

* remove alias, was moved into the macro
2026-04-07 13:18:24 -07:00
Lluc Simó 610ee8107f fix: ensure file type bit is set for rpm bundle (#5459)
By using the `permissions()` method of `FileOptionsBuilder`,
which was added in version 0.20.0 of the `rpm` crate, we fix
a bug where newer versions of `rpm` (the package, not the
crate) would fail when installing the bundle.
2026-04-07 12:55:16 -07:00
Gabriël KonatandEvan Almloff a07b406699 Fix too restrictive Clone bounds in props with generics (#5451)
* Manually implement Clone for *WithOwner for less restrictive bounds.

* add tests

* fix clippy

---------

Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
2026-04-06 13:18:10 -05:00
Jonathan Kelley d027e26046 Release 0.7.5
dioxus-autofmt@0.7.5
dioxus-cli@0.7.5
dioxus-component-manifest@0.7.5
dioxus-desktop@0.7.5
dioxus-fullstack@0.7.5
dioxus-html@0.7.5
dioxus-server@0.7.5
dioxus-web@0.7.5
manganis@0.7.5

Generated by cargo-workspaces
2026-04-06 10:50:46 -07:00
Evan AlmloffandJonathan Kelley 14f3e71722 Check minimum versions in CI (#5437)
* check minimum versions

* fix min lockfile

* fix clippy

* Delete .codex

* fix toml min version

* add cache to min-deps

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-04-03 15:51:42 -07:00
Blake Scampone 6e5b370481 Fixed issue #5438: Added FIPS Compliance flag to candle.exe command (#5439) 2026-04-03 15:50:59 -07:00
Yuval Deutscher 28c696bbfb Add support for aarch64 Windows platform in wasm_opt (#5442) 2026-04-03 15:49:30 -07:00
Emiliano Maldonado Garza 291c110dd4 fix(lld): use -B flag (#5443) 2026-04-02 17:39:10 -07:00
John Costa 45442af41d fix(server): don't redirect error responses from #[get] server functions (#5429)
The post-handler redirect logic was unconditionally converting responses
to 302 Found when the request had Accept: text/html and a Referer header.
This overwrote error status codes (4xx, 5xx), making it impossible to
return errors from #[get] endpoints accessed via browser navigation.

Add a response.status().is_success() guard so only successful responses
get the Post/Redirect/Get treatment.

Fixes #5428
2026-03-30 18:46:48 -07:00
John CostaandJonathan Kelley e5b9c39f4e fix(autofmt): remove extra whitespace before commas in for-loop tuple patterns (#5384)
* fix(autofmt): remove extra whitespace before commas in for-loop tuple patterns

`dx fmt` was adding spaces before commas in for-loop destructuring
patterns (e.g. `for (index , name , value)`) because `TokenStream::Display`
inserts spaces between every token. Route the pattern through prettyplease
via a new `unparse_pat` helper, following the existing `unparse_expr` pattern.

Fixes #5348

* style: apply rustfmt to writer.rs

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-03-27 17:15:32 -07:00
Jonathan Kelley fff2e3d5a9 Release Dioxus v0.7.4 2026-03-27 16:58:44 -07:00
Jonathan Kelley 1eb00b5e00 commit lf desktop readme 2026-03-27 13:35:17 -07:00
Brock 0d94a51ec8 fix(cli): skip platform-specific test assertions when tools are unavailable (#5386)
The test_harnesses::run_harness test panics on machines without
Android NDK/SDK installed and on non-macOS platforms for iOS
assertions. Skip these assertions gracefully instead of failing
the entire test suite.

- Android assertions: skip when get_android_tools() returns None
- iOS assertions: skip when not running on macOS
2026-03-26 23:35:25 -07:00
Javier SuandJonathan Kelley 232a8dc83d fix: additional new line in info.plist (#5389)
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-03-26 23:10:08 -07:00
Matt JenkinsonandJonathan Kelley 371dfe5264 feat: allow config for showing the main app on tray icon click (#5361)
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-03-26 17:14:10 -07:00
Brock b94f8c6b5f chore: add .gitattributes for consistent line endings (#5385)
Normalize line endings to LF across all platforms. Without this,
Windows contributors get CRLF warnings on every checkout and test
run due to generated harness files.
2026-03-26 17:12:47 -07:00
Jonathan Kelley 5a8d5afb64 fix dup esbuild download 2026-03-26 17:12:12 -07:00
niminypiminy 364fbc2207 Updated dependencies build.gradle.kts.hbs (#5402)
This fixes the android security warning
2026-03-26 17:06:30 -07:00
Pete Watts 5d2f607681 Fix using iOS mobile simulator on Intel Mac. (#5268) 2026-03-26 16:46:44 -07:00
Jonathan Kelley 20e242628d fix stutter in bundle, fix nsis, fix msi bundling (#5412)
* fix stutter in bundle, fix nsis, fix msi bundling

* fmt

* rename android libname to `libmain`, rename server exe to `server`

* fix hot-dog url handling

* set linux product name

* update schema
2026-03-26 13:05:11 -07:00
Acheul a42dd1320b fix: diffing debug in push_all_root_nodes() (#5413) 2026-03-26 09:18:14 -07:00
John Costa cece12b57e docs: clarify difference between use_context and consume_context (#5406)
* docs: clarify difference between use_context and consume_context

Document the key distinction: use_context is a hook that captures the
context value once on first render and caches it, following the rules
of hooks. consume_context reads directly from the runtime each time
and can be called from anywhere (event handlers, async tasks, etc.).

Fixes #3862

* fix: remove redundant explicit rustdoc link targets

* fix: use plain text for cross-crate use_context reference in rustdoc
2026-03-24 08:10:13 -05:00
Jonathan Kelley 7289256b0a version tools (#5407)
* version tools

* move bundling tools to `~/.dx/tools`
2026-03-23 17:18:57 -07:00
Jonathan Kelley b2d01e6779 rip out tauri bundle (v2), swc -> esbuild, blacksmith -> warpbuild, FAST CI 🚀 (#5328)
- inline mac, windows, linux bundling in the cli
- remove tauri bundle from our dep tree
- trim down the rpm crate for fewer dependencies in tree
- migrate from blacksmith to warpbuild
- move off swc and instead use esbuild via tool
- use dev drives in windows CI
- use fork of nix action for faster caching
- test bundling in CI
- fix asset handling in linux 
- add default APPDATA location for webview2 installs for dioxus apps on windows
2026-03-20 12:27:13 -07:00
BillionTokenandBillionClaw be7296f4f0 fix(file-explorer): prevent entering files as directories (#5383)
The file_explorer example had two issues:
1. Used heuristic (contains '.') to detect files vs directories, which is unreliable
2. Tried to enter files as directories when clicked, causing errors

Changes:
- Use path.is_file() for accurate file detection
- Use path.is_dir() check before entering a directory
- Rename shadowed 'path' variable to 'path_display'

Fixes #5368

Co-authored-by: BillionClaw <267901332+BillionClaw@users.noreply.github.com>
2026-03-18 15:19:24 +00:00
InfinoidandEvan Almloff 049e4416f2 Update doc reference: SsrRender → Renderer (#5378)
* Update doc reference: SsrRender → Renderer

* make it a code link

---------

Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
2026-03-16 15:01:00 -05:00
Evan Almloff 77a50f916f Fix opening native targets while they are still building and retry tcp connections to avoid server is still loading page (#5358)
* retry tcp connections

* don't open native binaries that don't exist

* fix formatting

* fix proxy
2026-03-13 13:01:42 -05:00
Martin Martinez Rivera f472349012 Update workflow to working intel macOS image (#5336) 2026-03-12 20:29:44 +00:00
dependabot[bot] b6cd1a8989 Bump quinn-proto from 0.11.13 to 0.11.14 (#5359)
Bumps [quinn-proto](https://github.com/quinn-rs/quinn) from 0.11.13 to 0.11.14.
- [Release notes](https://github.com/quinn-rs/quinn/releases)
- [Commits](https://github.com/quinn-rs/quinn/compare/quinn-proto-0.11.13...quinn-proto-0.11.14)

---
updated-dependencies:
- dependency-name: quinn-proto
  dependency-version: 0.11.14
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-11 09:49:39 -07:00
Andrew BarnesandEvan Almloff 2a34be5815 Fix panic in calculator when pressing ± after AC (#5352)
* fix: handle empty string in calculator plus-minus button

calc_val() panics on empty string when AC is pressed before the
plus-minus button. Return 0.0 early for empty input.

Fixes #4858

* fix a few ci failures

* fix link check

---------

Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
2026-03-10 11:33:41 -07:00
John CostaandEvan Almloff b7958d3d17 feat(signals): add WritableResultExt trait (#5338)
* feat(signals): add WritableResultExt trait

Add WritableResultExt mirroring the existing ReadableResultExt,
providing mutable access to signal values holding Result<T, E>.

Methods:
- as_mut(): returns Result<WritableRef<T>, WritableRef<E>>
- unwrap_mut(): returns WritableRef<T>, panics if Err

Closes #5293

* refactor(signals): use descriptive expect messages in WritableResultExt::as_mut

Replace bare .unwrap() calls with .expect() containing a descriptive
message about the failure mode. This gives better diagnostics if the
Result variant changes between the read and write lock acquisitions.

* switch to a single write to avoid race conditions with sync signals

---------

Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
2026-03-09 14:10:15 -07:00
Moritz Hedtke d312ef84d2 Avoid eval on web (#5313) 2026-02-16 08:39:43 -06:00
eeb60f7173 permissions, manganis::ffi, full Info.plist/AndroidManifest.xml customization (#4842)
* initial version

* make custom permission work without const-vec change

* wiring up with cli

* yey symbol found

* wip

* holy moly

* proper ui

* cleanup

* okay

* wip cleanup

* reduce boilerplate code into mobile-core

* Delete copilot-instructions.md

* revert hello-world example for low diff

* fix android build in mobile-core

* rename permission to static_permission

* small success with popup location on android

* android popup working

* Refactor permission checks for readability

Improves code formatting in has_location_permission and check_permission functions by splitting long lines and updating function signatures for better readability. No functional changes were made.

* wip consolidate all java files and build from cli instead of build.rs

* few cli cleanups

* wip java_plugin macro

* cleanup cleanup cleanup

* Update java_plugin macro to use full relative file paths

The java_plugin macro now accepts full relative paths for Java files instead of assuming a fixed directory structure. Documentation and usage examples have been updated to reflect this change, improving flexibility and clarity for specifying file locations.

* Improve iOS geolocation permission and retrieval logic

Added checks for authorization status before requesting location permissions and retrieving location data. Now only requests permission if not determined, and attempts to retrieve cached location before starting location updates, improving efficiency and user experience.

* Add ios_plugin macro for iOS framework metadata

Introduces the ios_plugin! macro in mobile-core-macro for declarative iOS framework metadata embedding. Updates mobile-core to re-export the macro and refactors mobile-geolocation to use ios_plugin! instead of manual linker attributes.

* not needed

* simplify the plugin

* rename mobile-core to platform-bridge and mobile-core-macro to platform-bridge-macro

* Refactor metadata serialization buffer initialization

Replaces inline creation of ConstVec with a named EMPTY constant for buffer initialization in metadata serialization. This improves code clarity and maintainability.

* mobile-geolocation out of dioxus

* take the example also out of dioxus

* remove example from cargo toml

* remove demo css

* revert hello-world example

* revert mac.plist

* revert gitignore

* Remove basic usage example for permissions crate

Deleted the basic_usage.rs example file from the permissions crate. This change may be part of a cleanup or refactoring to remove outdated or unnecessary example code.

* Delete plan.md

* remove dups

* cleanup java build

* cleanup permission symbol extraction

* update todo

* small slop of tested permissions in enums for minimum diff

* Refactor symbol extraction into linker_symbols module

Moved generic symbol extraction logic from android_java.rs and permissions.rs into a new linker_symbols.rs module. Updated both files to use the shared utilities for finding symbol offsets, reducing code duplication and improving maintainability.

* wip consolidate ios and macos as darwin

* Add docs and re-export for MainThreadCell and MainThreadMarker

Expanded documentation for MainThreadCell, clarifying usage and safety. Changed visibility of MainThreadCell to public, improved method docs, and re-exported MainThreadMarker in darwin/mod.rs for easier access.

* Update Darwin framework symbol and section names

Changed the framework symbol prefix from '__DARWIN_FRAMEWORK__' to '__DARWIN_FW__' and updated the Mach-O section name from '__darwin_framework' to '__darwin_fw' for compliance with section name length limits and consistency.

* Fix Info.plist path handling for iOS and macOS

Adds comments and corrects the path to Info.plist for iOS and macOS app bundles. For iOS, Info.plist is at the root of the .app bundle, while for macOS it is inside Contents/. Also improves warning message to include the missing path.

* Handle missing permission symbols and web bundle case

Improves permission extraction by returning an empty manifest when no permission symbols are found or when building a web bundle, as permissions are runtime-only in that case. Adds debug logging for missing symbols and ensures robust handling of these scenarios.

* objc2 over framework

* windows, linux, web all permissions are runtime so cleanup

* only include permissions for build time

* cleanup unnecessary test

* more cleanup

* extract shared into dx-macro-helpers

* rc.3 to 0.7.0 for const-serialize

* Add CustomPermissionBuilder and enhance PermissionBuilder for better permission management

- Introduced `CustomPermissionBuilder` for creating custom permissions with platform-specific identifiers.
- Enhanced `PermissionBuilder` to support custom permissions and location permissions with a clear builder pattern.
- Updated documentation and examples in the macro README to reflect new usage patterns for custom and location permissions.
- Improved parsing logic in the macro to handle both builder and direct construction patterns for permissions.

* clippy fixes

* implement const cbor encoding + decoding for basic types

* Add #[used] attribute to linker sections for optimization protection

- Added #[used] attribute to linker sections in both permission and Android plugin macros to prevent the linker from optimizing away symbols, ensuring they are preserved even if unused.
- Created static references to linker sections to enhance defense-in-depth against optimization issues.

* implement map encoding and decoding

* fix map test

* wip unified linker symbol

* cleanup permissions

* pipe java sources with manganis as well

* all tests passing

* dynamically sized arrays

* smaller str encoding

* swap array and list and add more documentation

* move serialization and deserialization for each struct together

* support both legacy and new assets

* bump const serialize version

* fix asset conversion code

* pull out manganis symbol struct from tuble

* test reading old asset versions

* more list/array cleanup and bump rust version

* fix clippy

* Revert "pipe java sources with manganis as well"

This reverts commit ddea9a459d9ac26f3f037a74d9ae0de3edfced67.

* Revert "cleanup permissions"

This reverts commit 7b18500155237403e179f0783cb8903a4f158b80.

* Revert "wip unified linker symbol"

This reverts commit 813e33feddb30d26868f6ac6e6da318402ac138f.

* Revert "Add #[used] attribute to linker sections for optimization protection"

This reverts commit a94a7a3a5e8eee80060de9d66a53aabfcf554f96.

* update cargo lock

* wip permission through assets

* abit cleanup

* fix reexports

* fix assets

* Fix the permissions piping

* some small cleanups

* checkout const-serialize as per #4932 and fix build

* invoking swift as a package

* geolocation package & example dumping for easy testing

* keep geolocation simple for testing

* cleanups

* pipe everything through __ASSETS__ and cleanup

* remove linker_symbols helper file

* example

* re example

* copy build methos into mobile-plugin-build crate

* Add conditional import for dioxus_07 feature

Introduces a conditional import to use the dioxus_07 crate when the corresponding feature is enabled, improving compatibility with different dioxus versions.

* Improve error handling and JNI reference usage

Adds a null check for Objective-C instance initialization in the iOS geolocation plugin to prevent errors on failed allocation. Refactors Android callback to use local JNI references instead of creating unnecessary global references, reducing potential memory leaks.

* revert changes on playwright

* Update dioxus dependency to 0.7.2 in Cargo.lock

Removed dioxus 0.7.1 from dependencies, retaining only dioxus 0.7.2 for the dioxus-cli-optimization-test package.

* small cleanup

* Add legacy const-serialize 0.7 support to dx-macro-helpers

Introduces support for the const-serialize 0.7 format in dx-macro-helpers by adding a new dependency and export, as well as a helper function for serialization with layout padding. Updates manganis to use the new helper for serializing assets in the legacy format, simplifying code and improving maintainability.

* Add helper for legacy and current linker sections

Introduces generate_link_sections_with_legacy in dx-macro-helpers to emit both legacy and current linker sections for compatibility. Refactors manganis-macro to use this new helper, reducing duplication and improving maintainability.

* Fix lints

* Fix clippy and doctest

* Refactor asset bundling and allow large enum variant

Refactored Asset::bundled to use Vec<u8> instead of ConstVec for reading volatile slices, simplifying the code and improving compatibility. Added #[allow(clippy::large_enum_variant)] to SymbolData enum to suppress Clippy warnings about large enum variants.

* Update license URLs in README to use angle brackets

Changed license URLs in the README from parentheses to angle brackets for improved formatting and clarity.

* Fix asset deserialization with correct buffer type

Replaces the use of `bytes.read()` with `ConstReadBuffer::new(bytes.as_ref())` for asset deserialization, ensuring compatibility with the expected deserialization API.

* Refactor geolocation and asset handling for clarity

Removed unnecessary clones in geolocation example event handlers to simplify state management. Updated SymbolDataOrAsset to store SymbolData in a Box for improved memory handling and adjusted related logic. Fixed documentation example in geolocation lib to include PermissionState in the import.

* Update geolocation example and permissions usage docs

Removes unused variables in the geolocation example's App function. Updates the permissions crate documentation to reflect new API usage with PermissionBuilder and LocationPrecision.

* Update permissions-macro to use permissions crate

Switched imports and dev-dependency from permissions_core to permissions in permissions-macro. Updated documentation and examples to reflect the new crate usage.

* rollback const-serialize changes

* move items around (doesn't compile)

* convert gelocation plugin to example

* remove dx-macro-helpers

* we're just gonna full-send linker everything

* rollback desktop changes

* remove gradle

* fix most compile?

* fix dioxus vers

* small cleanups

* add claude design docs

* add ffi macro

* remove

* loads but not linking yet

* fix output leak

* a little bit closer but not quite

* improve android code gen

* sheeeeee works!!!

* small tweaks to demo

* replace ios/android plugin with ffi macro entirely

* simplify ffi module

* simplify again

* condense / rip out some stuff from manganis

* remove types form public api

* wip, permissions

* oops I broke it

* I unbroke it

* move arch doc

* remove extra manifest types

* drop bindgen file

* remove permission

* small cleanup

* remove unsafecall mtm thing

* yoink perms

* wire up manifest

* Add deeplinks

* add schema generation

* update schema

* wip....

* fix recurse limit schema generation

* wip, muck around with schema

* add inline dioxus.toml support

* merge bundle config schemas

* claude my man

* Remove cdecl, annotate ffi

* rename design docs

* wip: live activities

* wip: apple plugin bundling

* wip

* get live activities linking properly

* small cleanups

* remove sidecars

* remove widget

* yoink legacy

* cleanup

* more fixups

* wire up more things to dioxus.toml

* fix workspace join

* final cleanups

* fmt

* final bit of clippy

* ci tweak

* update schema

* fmt, doc

* update schema docs

---------

Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-02-13 15:39:38 -08:00
Kyle W. Rader 64cc42e16e fix(fullstack): prevent AlreadyBorrowed panic in WebSocket recv() (#5300) 2026-02-12 19:43:54 -08:00
Marek Pokropiński d75d9642ef implement stream and sing for websocket (#5308) 2026-02-12 17:19:25 -08:00
cb88528c15 fix(cli) replace installation_url with application_id in launch_ios_app_paused (#5283)
* fix(cli) replace installation_url with application_id in launch_ios_app_paused

* properly handle provision profile for installed devices

* clippy, fmt

---------

Co-authored-by: Serban Bajdechi <serban.bajdechi@phreesia.com>
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-02-12 17:12:29 -08:00
Robert DeatonandRobert Deaton df4fe37180 feat: Enable plumbing through keep_names to wasm build for better stack traces (#5296)
Co-authored-by: Robert Deaton <me@rdeaton.space>
2026-02-12 17:08:29 -08:00
Jonathan Kelley 33159f366a workspace hot-patching, dynamic tls fixups (#5291)
* Refactor cross-tls-crate-dylib configuration and update test output

- Commented out the crate-type configuration in Cargo.toml for cross-tls-crate-dylib.
- Modified the initial value of the thread-local variable FOO from 2.0 to 1.0 in the main.rs test file.
- Updated the output message in main.rs to be more descriptive.
- Added a new field `tls_fixups` to the JumpTable struct in subsecond-types, which will facilitate future runtime TLS sharing.

* ws hotpatch!

* remove old file

* undo core change

* svh

* Enhance rlib path resolution by incorporating -C extra-filename handling

* remove obj diffing

* small cleanups

* obj cache as files

* simplify

* simplify a bit

* dont bother round tripping cache

* extract to helper

* cleanup `build` function

* dont round-trip modified_crates

* make sure to wipe between full

* bit of a cleanup

* use explicit naming

* compact extra method

* fix temp cleanup

* fix warnign

* cleanup

* fmt, clippy
2026-02-10 22:37:16 -08:00
Jonathan Kelley 9b0d380765 update ext vo 0.7.3 2026-01-25 13:54:26 -08:00
Jonathan Kelley b6793dc2b4 fix more whitespace issues in rsx autofmt nested rsx blocks (#5257)
* trim

* works a bit better

* almost...

* it work?

* yay!

* codex tried a thing

* move

* reduce to 1

* remove search

* simplify

* adjust test case

* clippy
2026-01-24 22:32:55 -08:00
Alexey ceb82612e0 fix: Handle HTTP errors in FromResponseParts (#5243)
* fix: Handle HTTP errors in FromResponseParts

Check for non-success status codes before attempting to decode response
parts. For error responses, parse the JSON error payload and convert it
to a ServerFnError::ServerError.

Also make ErrorPayload fields pub(crate) to allow internal access.

* fixed test name
2026-01-23 13:39:50 -08:00
Matouš VolfandJonathan Kelley 7a7f5fb719 fix: replace unwraps with errors in fullstack WebSockets (#5248)
* fix: replace unwraps with errors in fullstack WebSockets

* refactor: pull the conversions to fullstack `RequestError` up from the core crate

* no breaking changes

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-01-23 13:38:32 -08:00
Antti Jalomäki 4070d0c8bd docs: fix grammar and typos in comments and documentation (#5254)
* docs: fix grammar and typos in comments and documentation

* docs: use British English style for e.g. and i.e. (no trailing comma)
Changed from American English style (e.g.,) to British English style (e.g.)
for consistency with the rest of the codebase."
2026-01-23 13:30:00 -08:00
Christopher Serr 409d8358b6 Fix android_runtime_lock not being cfg guarded (#5244)
The `android_runtime_lock` wasn't properly `cfg` guarded in various
places, so it got included on all operating systems, not just Android by
accident. This causes deadlocks when trying to use `muda`.
2026-01-20 14:42:45 -08:00
Marc Espin d01a820b6f chore: Remove Freya from README (#5239) 2026-01-18 21:06:01 +00:00
Jonathan Kelley 3d9c10aa86 cargo fmt 2026-01-16 20:14:20 -08:00
Jonathan Kelley cb0b7eb737 fix playwright test by adding cache header via release mode 2026-01-16 20:13:44 -08:00
Jonathan Kelley 97a670af0f remove doctests for mangnais 07 2026-01-16 20:00:57 -08:00
Jonathan Kelley 22b06badde release v0.7.3 2026-01-16 19:51:29 -08:00
Jonathan Kelley 58eea846b9 use a better time format than raw humantime 2026-01-16 18:22:58 -08:00
Shoshána Abigail 10eda3a794 respect tailwind_input when detecting tailwind v3 or v4 (#5151)
* respect tailwind_input when detecting tailwind v3 or v4

* cargo fmt fixes
2026-01-16 18:01:00 -08:00
Fu WangandJonathan Kelley 128a9d9fad Enhance CLI Build Duration Output with Human-Readable Formatting (#4591)
* Use humantime for build duration formatting in CLI

Replaces manual millisecond formatting with humantime::format_duration for improved readability of build duration logs. Adds humantime as a dependency in Cargo.toml.

* Format build duration with millisecond precision

Changed build duration logging to use millisecond precision instead of default formatting to avoid microsecond/nanosecond noise.

* Refactor duration formatting to use helper function to reduce code duplication.

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-01-16 17:57:14 -08:00
Amar Sood 8c1911c268 Use ServeDir for fullstack dev static assets (#4983)
Without this patch, simply instantiating the Jumpstart template in fullstack mode and making _any_ hot-patch change would result in a 404 on fetch and a client WASM panic.

This changes the fullstack server static asset routing so that, in debug builds, directories under the `public` tree (including `/wasm`) are served via `tower_http::services::ServeDir` instead of being eagerly expanded into a fixed set of routes at startup.

Today `dioxus_server::DioxusRouterExt::serve_static_assets` walks the `public` directory once at launch via `serve_dir_cached`, registering a separate route for every file it sees. That works fine for pre-baked assets, but it breaks down when dx/subsecond writes new files into `public` during a dev session. In a fullstack web app, wasm hot patches are emitted as timestamped files like `public/wasm/lib<name>-patch-<ts>.wasm`; the CLI tells the browser to fetch `/wasm/lib<name>-patch-<ts>.wasm` immediately, but the fullstack server never registered a route for that path, so the fetch returns 404 even though the file already exists on disk.

Non-fullstack dev builds do not have this problem because the dx devserver serves `public` directly using `ServeDir`, which consults the filesystem at request time. Fullstack dev, by contrast, proxies asset requests to the inner server, and that server only knows about whatever was in `public` at the moment its router was built.

This change narrows the gap by making `serve_static_assets` dynamic for directories in debug builds while preserving the existing behaviour elsewhere:

- For debug builds (`cfg(debug_assertions)`), `serve_dir_cached` now uses `ServeDir::new(&path)` when it encounters a directory. This means `/wasm`, `/assets`, and any other subdirectories are backed by a live directory listing, so new files like wasm patch modules and freshly emitted hashed CSS become immediately visible without restarting the fullstack server or rebuilding its router.
- For non-debug builds, the previous behaviour is preserved: `serve_dir_cached` continues to recurse and register one route per discovered file, still using `ServeFile::precompressed_br()` and `cache_response_forever` for hashed, cache-busted filenames.

This is a no-op for release builds, but in debug fullstack it's necessary for wasm hot patches and other dynamically-created assets that could 404 until the server happened to be restarted. It also aligns fullstack dev behaviour more closely with the plain web devserver, which already uses `ServeDir` for the `public` tree.
2026-01-16 17:42:27 -08:00
Amar SoodandJonathan Kelley 8b427ddf16 signals: Rebuild stale global cache entries automatically (#4809)
* signals: Rebuild stale global cache entries automatically

* remove log

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-01-16 17:05:09 -08:00
Tamaro SkaljicandEvan Almloff 07b9dcb3a7 Fix crates.io repository URLs and READMEs for subsecond and manganis crates (#5013)
* Update repository URL and add README reference

* Fix repository URL and add readme field

Updated repository URL to point to the correct path and added a readme field.

* Update repository URL in Cargo.toml

* Update repository URL in Cargo.toml

* Update repository URL and add readme path

* Fix repository URL in Cargo.toml

---------

Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
2026-01-16 16:58:49 -08:00
Jonathan Kelley 794c12443f tweak log messages (#5174) 2026-01-16 16:58:21 -08:00
Jonathan Kelley ef4d596885 fix playwright flakey test, upgrade to blacksmith runners for more things, cargo update to fix rfd build (#5228)
* attempt fix for flakey playwright test

* fix link

* disable blitz-shell file dialog

* remove rfd integration in native for now

* undo file-dialog pass-thru in anticipation of blitz-shell update

* upgrade to blacksmith

* blitz-shell bump

* use faster runner
2026-01-16 16:52:41 -08:00
Mateusz Maćkowski 1b1e3e3e17 fix: serve_subsecond looping when devtools do not connect (#5158)
Currently when `serve_subsecond` is used and the user doesn't run the
app with `dx serve --hot-patching`, the function causes the future to be
constantly recreated in a loop. This fixes the behavior so that the
future is awaited once and then `serve_subsecond` returns.
2026-01-16 16:44:35 -08:00
Rhaskia adfd6a12f8 add android_sync_lock to wry event handler to avoid refcell errors (#5190)
* add android_sync_lock to wry event handler to avoid refcell errors

* rustfmt

* move sync lock to apply_event
2026-01-16 16:37:28 -08:00
Coco d6629acd84 use $CARGO_HOME for installation if set (#5219) 2026-01-16 16:33:45 -08:00
Nico Burns 35e289fe28 Fix more examples to work with dioxus-native (#5179)
* Enable native for hotdog, file-explorer, and bluetooth-scanner examples

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Fix crash in calculator example

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Add config macro for native

* Add Config struct to dioxus-native

* Re-export dioxus-native as dioxus::native

* Fix calculator example to work with dioxus-native

* Fix calculator_mutable example to work with dioxus-native

---------

Signed-off-by: Nico Burns <nico@nicoburns.com>
2026-01-17 00:32:45 +00:00
Marius Ileana 8aefb2a1e2 fix(cli): showDXToast on reload (#5202)
Basically, guarding the elements against nulls. It uses the most explicit and safe version of a JS implementation.

Closes #5175
2026-01-16 16:30:29 -08:00
kevinwrightandJonathan Kelley b83bff76e6 Full file paths in drop handlers (#5211)
* Use native drop handler to push full file paths into element drop handler

* Remove debug code

* fmt

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2026-01-16 16:10:41 -08:00
hideselfviewandDmitry Minkovsky 3a60140dff fix: prevent dx fmt from adding trailing whitespace to blank lines (#5224)
This fixes a conflict between dx fmt and cargo fmt (rustfmt). Previously,
dx fmt would add indentation whitespace to blank lines inside RSX blocks,
but cargo fmt removes trailing whitespace from all lines. This made it
impossible for code to satisfy both formatters.

The fix skips adding indentation to empty lines in two places:
1. When indenting formatted RSX blocks inside expressions
2. When reassembling the final formatted output

Fixes #5223

Co-authored-by: Dmitry Minkovsky <dminkovsky@gmail.com>
2026-01-16 15:47:47 -08:00
Evan Almloff 8eb4322de2 Fix optional callback props implementation (#5225)
* fix optional event handler diffing

* add regression test
2026-01-16 14:50:48 -08:00
Samuel Åkesson f77a9162f5 chore: fix typo (#5220)
"Fist" -> "First"
2026-01-14 17:37:55 -06:00
Nico BurnsandEvan Almloff 761c9503fd CLI: don't enable default features in --no-default-features builds (#5147)
* Don't push default features in `--no-default-features` builds

Signed-off-by: Nico Burns <nico@nicoburns.com>

* add tests for default features and no default features outside of renderers

---------

Signed-off-by: Nico Burns <nico@nicoburns.com>
Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
2026-01-14 23:24:18 +00:00
Nico BurnsandEvan Almloff 352e59ea01 Bump rfd to 0.17.2 (#5204)
* Bump rfd to 0.17.1

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Bump MSRV to 1.90

Signed-off-by: Nico Burns <nico@nicoburns.com>

* Fix clippy

Signed-off-by: Nico Burns <nico@nicoburns.com>

* bump rfd and revert msrv changes

---------

Signed-off-by: Nico Burns <nico@nicoburns.com>
Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
2026-01-14 22:30:51 +00:00
Sabin Regmi 15bf75b7b0 Fixes Passive Segment in Manganis (#5189) 2026-01-08 12:23:19 -08:00
Alex Ellwein a5db24defc chore: fix typo (#5185) 2026-01-07 13:18:11 -06:00
Jonathan Kelley 6b78816c1d allow passive wasm segments for manganis (#5163)
* fix passive segment using tls calculation!

* clean things up

* clean diff

* revert some pr changes for review

* cleanups
2026-01-07 02:35:08 -08:00
Jonathan Kelley ec8f31dece bump translation links 2025-12-29 22:58:12 -05:00
HenryandJonathan Kelley 9965220947 Scoped css (#5087)
* Create new css module parser

* Use css module processing

* Make hot reloading work for css_module macro

* Change css_module macro shape and rename to styles

* Add css_module example

* Update styles macro documentation

* Remove hidden from styles macro

* Remove unneeded param

* Remove unneeded visibility

* Improve `styles!` macro documentation

* Clippy

* Remove unneeded method

* Clippy

* Clippy

* Replace panic with anyhow

* Update css_module macro to attribute macro

* Update macro docs

* chore: Cargo.lock

* Clippy

* respect semver by deprecating old func

* update to latest winnow

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2025-12-29 22:41:36 -05:00
Jonathan Kelley 34554766db bump extension 2025-12-29 22:09:23 -05:00
Jonathan Kelley 1025bd69f0 fix: autofmt duplicate whitespace on attributes, flickering of vscode autoformat (#5159)
* wip: failing test

* edit harness a bit

* wip, not fixed entirely

* fix comment accumulation and whitespace

* fix: autofmt syncrhonize edits with vscode waitUntil edit pipeline

* fix optimization collapsing away whitespace

* comment out test case for now
2025-12-29 22:04:41 -05:00
Jonathan Kelley f537d72918 fix typo checker 2025-12-29 20:24:52 -05:00
Jonathan Kelley 852a1e5ea5 move notes to translations 2025-12-29 20:23:55 -05:00
Jonathan Kelley e2a405457f move security doc to notes 2025-12-29 20:23:10 -05:00
Jonathan Kelley 13e7cd1655 remove mailmap 2025-12-29 20:21:24 -05:00
Jonathan Kelley c2c24569c6 feat: add section about assets to key agents.md 2025-12-29 18:11:28 -05:00
Jonathan Kelley 638c02e15a feat: AGENTS.md and architecture guides for agents! 2025-12-29 18:09:05 -05:00
Agustín Covarrubias 2ee8ecd477 fix(cli): pass --all-features flag to cargo (#5153) 2025-12-29 09:33:03 -05:00
Jonathan Kelley 02b62342ef allow codesigning any server backend on macos (#5085)
* allow codesigning any server backend on macos

* clippy
2025-12-28 22:37:46 -05:00
Bayley Foster 887a87dcc1 fix(cli): display bundle format instead of undefined in dev loading screen (#5123) 2025-12-28 21:51:39 -05:00
Evan AlmloffandJonathan Kelley c977cc125e Switch const serialize to use CBOR (#4932)
* implement const cbor encoding + decoding for basic types

* implement map encoding and decoding

* fix map test

* all tests passing

* dynamically sized arrays

* smaller str encoding

* swap array and list and add more documentation

* move serialization and deserialization for each struct together

* support both legacy and new assets

* bump const serialize version

* fix asset conversion code

* pull out manganis symbol struct from tuble

* test reading old asset versions

* more list/array cleanup and bump rust version

* fix clippy

* switch cli opt port

* install playwright deps

* split cli-optimization package to avoid two dioxus' in the same crate

* fix clippy

* force the toast.png asset to be included in the linker stage #[used] has platform depedant behavior

* bundle both formats in the link section and only use the asset the cli changed

* remove sudo which doesn't exist on windows

* add binstall to the playwright workflow

* separate bin target for the old cli

* lockfile

* cargo update to get versions shaken out

* notes on binstalls, add back `.read()` for compat

* use 0.8.0-alpha.0 for const-serialize instead of 0.8

this ensures we can still publish breaking changes on 0.8 without taking over the full version

* fix clippy in example

* small debug nits

* update rust-overlay in nix

* fix flake?

* migrate to new structure

* just comment out binstalls

* just remove old test harness

---------

Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
2025-12-28 21:49:34 -05:00