diff --git a/lang/rust/Makefile b/lang/rust/Makefile
index f3b8b845814..87d72c781e6 100644
--- a/lang/rust/Makefile
+++ b/lang/rust/Makefile
@@ -1,5 +1,11 @@
 ONLY_FOR_ARCHS =	${RUST_ARCHS}
 
+.if "${MACHINE_ARCH}" == "amd64"
+ENABLE_WASM =		Yes
+.else
+ENABLE_WASM =		No
+.endif
+
 BROKEN-powerpc64 =	needs new bootstrap
 
 .if "${MACHINE_ARCH}" == "i386"
@@ -13,6 +19,9 @@ COMMENT-gdb =		Rust debugger through gdb
 COMMENT-clippy =	Rust linter
 COMMENT-rustfmt =	Rust code formatter
 COMMENT-src =		Rust source component
+.if ${ENABLE_WASM:L:Myes}
+COMMENT-wasm32 =	Rust toolchain for Wasm32
+.endif
 
 V =			1.73.0
 DISTNAME =		rustc-${V}-src
@@ -32,8 +41,14 @@ PKGNAME-gdb =		rust-gdb-${V}
 PKGNAME-clippy =	rust-clippy-${V}
 PKGNAME-rustfmt =	rust-rustfmt-${V}
 PKGNAME-src =		rust-src-${V}
+.if ${ENABLE_WASM:L:Myes}
+PKGNAME-wasm32 =	rust-wasm32-${V}
+.endif
 
 MULTI_PACKAGES =	-main -gdb -clippy -rustfmt -src
+.if ${ENABLE_WASM:L:Myes}
+MULTI_PACKAGES +=	-wasm32
+.endif
 
 CATEGORIES =		lang
 
@@ -48,6 +63,9 @@ WANTLIB-main =		${COMPILER_LIBCXX} c crypto curl m pthread ssh2 ssl z
 WANTLIB-gdb =
 WANTLIB-clippy =	${COMPILER_LIBCXX} c m pthread
 WANTLIB-rustfmt =	${COMPILER_LIBCXX} c m pthread
+.if ${ENABLE_WASM:L:Myes}
+WANTLIB-wasm32 =
+.endif
 
 SITES =			https://static.rust-lang.org/dist/ \
 			https://dev-static.rust-lang.org/dist/
@@ -123,10 +141,45 @@ LIBRUST_REHASH +=	test
 LIBRUST_REHASH +=	unicode_width
 LIBRUST_REHASH +=	unwind
 
+.if ${ENABLE_WASM:L:Myes}
+LIBRUST_REHASH_WASM32 +=	addr2line
+LIBRUST_REHASH_WASM32 +=	adler
+LIBRUST_REHASH_WASM32 +=	alloc
+LIBRUST_REHASH_WASM32 +=	cfg_if
+LIBRUST_REHASH_WASM32 +=	compiler_builtins
+LIBRUST_REHASH_WASM32 +=	core
+LIBRUST_REHASH_WASM32 +=        dlmalloc
+LIBRUST_REHASH_WASM32 +=	getopts
+LIBRUST_REHASH_WASM32 +=	gimli
+LIBRUST_REHASH_WASM32 +=	hashbrown
+LIBRUST_REHASH_WASM32 +=	libc
+LIBRUST_REHASH_WASM32 +=	memchr
+LIBRUST_REHASH_WASM32 +=	miniz_oxide
+LIBRUST_REHASH_WASM32 +=	object
+LIBRUST_REHASH_WASM32 +=	panic_abort
+LIBRUST_REHASH_WASM32 +=	panic_unwind
+LIBRUST_REHASH_WASM32 +=	proc_macro
+LIBRUST_REHASH_WASM32 +=	rustc_demangle
+LIBRUST_REHASH_WASM32 +=	rustc_std_workspace_alloc
+LIBRUST_REHASH_WASM32 +=	rustc_std_workspace_core
+LIBRUST_REHASH_WASM32 +=	rustc_std_workspace_std
+LIBRUST_REHASH_WASM32 +=	std
+LIBRUST_REHASH_WASM32 +=	std_detect
+LIBRUST_REHASH_WASM32 +=	sysroot
+LIBRUST_REHASH_WASM32 +=	test
+LIBRUST_REHASH_WASM32 +=	unicode_width
+LIBRUST_REHASH_WASM32 +=	unwind
+.endif
+
 # generate a stable hash and pass it to build environment
 LIBRUST_HASH !=	echo '${PKGNAME}:${REVISION}:${TRIPLE_ARCH}' | sha1 | cut -c1-14
 SUBST_VARS +=	LIBRUST_HASH
 
+.if ${ENABLE_WASM:L:Myes}
+LIBRUST_HASH_WASM32 !=	echo '${PKGNAME}:${REVISION}:wasm32-unknown-unknown' | sha1 | cut -c1-14
+SUBST_VARS +=	LIBRUST_HASH_WASM32
+.endif
+
 # on arches where the base compiler is clang: base-clang or ports-clang should be fine,
 # as we need devel/llvm only for libs.
 # on others archs, use ports-gcc as llvm libraries depends on libestdc++.so and libgcc.a.
@@ -144,12 +197,16 @@ BUILD_DEPENDS +=	devel/gdb
 
 .if !${USE_EMB_LLVM:L:Myes}
 MODULES +=			lang/clang
-MODCLANG_VERSION =		16
+MODCLANG_VERSION =		13
 MODCLANG_COMPILER_LINKS =	No
 .else
 WANTLIB-main +=		execinfo
 .endif
 
+.if ${ENABLE_WASM:L:Myes}
+MODCLANG_VERSION =		13
+.endif
+
 LIB_DEPENDS-main +=	${LIB_DEPENDS} \
 			net/curl \
 			security/libssh2
@@ -159,6 +216,9 @@ RUN_DEPENDS-gdb +=	lang/rust,-main \
 RUN_DEPENDS-clippy +=	lang/rust,-main
 RUN_DEPENDS-rustfmt +=	lang/rust,-main
 RUN_DEPENDS-src +=	lang/rust,-main
+.if ${ENABLE_WASM:L:Myes}
+RUN_DEPENDS-wasm32  +=	lang/rust,-main
+.endif
 
 PKG_ARCH-src =		*
 
@@ -216,8 +276,11 @@ do-configure:
 	echo 'docs = false' >>${WRKBUILD}/config.toml
 	echo 'verbose = 2' >>${WRKBUILD}/config.toml
 	echo 'host = ["${TRIPLE_ARCH}"]' >>${WRKBUILD}/config.toml
+.if ${ENABLE_WASM:L:Myes}
+	echo 'target = ["${TRIPLE_ARCH}", "wasm32-unknown-unknown"]' >>${WRKBUILD}/config.toml
+.else
 	echo 'target = ["${TRIPLE_ARCH}"]' >>${WRKBUILD}/config.toml
-
+.endif
 	echo '[install]' >>${WRKBUILD}/config.toml
 	echo 'prefix = "${LOCALBASE}"' >>${WRKBUILD}/config.toml
 	echo 'sysconfdir = "${SYSCONFDIR}"' >>${WRKBUILD}/config.toml
@@ -244,6 +307,13 @@ do-configure:
 		>>${WRKBUILD}/config.toml
 .endif
 
+.if ${ENABLE_WASM:L:Myes}
+	echo '[target.wasm32-unknown-unknown]' >>${WRKBUILD}/config.toml
+	echo 'linker = "${LOCALBASE}/bin/clang-${MODCLANG_VERSION}"'  >>${WRKBUILD}/config.toml 
+	echo 'llvm-config = "${LOCALBASE}/bin/llvm-config-${MODCLANG_VERSION}"' \
+		>>${WRKBUILD}/config.toml
+.endif
+
 BUILD_BIN = cd ${WRKBUILD} && exec ${SETENV} ${MAKE_ENV} \
 	    ${MODPY_BIN} ${WRKSRC}/x.py
 TEST_BIN = cd ${WRKBUILD} && exec ${SETENV} ${MAKE_ENV} ${TEST_ENV} \
@@ -251,15 +321,26 @@ TEST_BIN = cd ${WRKBUILD} && exec ${SETENV} ${MAKE_ENV} ${TEST_ENV} \
 
 do-build:
 	${BUILD_BIN} dist --jobs=${MAKE_JOBS} \
-		rust-std rustc cargo clippy rustfmt rust-src
+		rust-std rustc cargo clippy rustfmt rust-src 
+
 	rm -rf -- ${WRKBUILD}/build/tmp
 
+.if !${ENABLE_WASM:L:Myes}
 COMPONENTS ?=	rustc-${V}-${TRIPLE_ARCH} \
 		rust-std-${V}-${TRIPLE_ARCH} \
 		cargo-${V}-${TRIPLE_ARCH} \
 		clippy-${V}-${TRIPLE_ARCH} \
 		rustfmt-${V}-${TRIPLE_ARCH} \
-		rust-src-${V}
+		rust-src-${V} 
+.else
+COMPONENTS ?=	rustc-${V}-${TRIPLE_ARCH} \
+		rust-std-${V}-${TRIPLE_ARCH} \
+		cargo-${V}-${TRIPLE_ARCH} \
+		clippy-${V}-${TRIPLE_ARCH} \
+		rustfmt-${V}-${TRIPLE_ARCH} \
+		rust-src-${V} \
+		rust-std-${V}-wasm32-unknown-unknown  
+.endif
 
 do-install:
 	rm -rf ${WRKBUILD}/_extractdist
@@ -284,6 +365,12 @@ do-install:
 		${TRIPLE_ARCH} \
 		${LIBRUST_HASH} \
 		${LIBRUST_REHASH}
+.if ${ENABLE_WASM:L:Myes}
+	cd ${PREFIX} && ${MODPY_BIN} "${.CURDIR}/files/rehash.py" \
+		wasm32-unknown-unknown \
+		${LIBRUST_HASH_WASM32} \
+		${LIBRUST_REHASH_WASM32}
+.endif
 	# replace libraries by link
 	for lib in ${PREFIX}/lib/lib*.* ; do \
 		libname=$${lib##*/} ; \
diff --git a/lang/rust/files/rehash.py b/lang/rust/files/rehash.py
index c4ad0373f42..8f049a07793 100644
--- a/lang/rust/files/rehash.py
+++ b/lang/rust/files/rehash.py
@@ -138,10 +138,16 @@ if __name__ == '__main__':
     register_newhashes(base_hash, liblist)
 
     # list of directories containing files to rehash
-    dirlist = [
-        "lib",
-        "lib/rustlib/{:s}/lib".format(triple_arch),
-    ]
+    if triple_arch == "wasm32_unknown_unknown":
+        dirlist = [
+            "lib/rustlib/{:s}/lib".format(triple_arch),
+        ]
+    else:
+        dirlist = [
+            "lib",
+            "lib/rustlib/{:s}/lib".format(triple_arch),
+        ]
+
 
     # register oldhashes by walking directories
     for dirname in dirlist:
diff --git a/lang/rust/pkg/DESCR-wasm32 b/lang/rust/pkg/DESCR-wasm32
new file mode 100644
index 00000000000..dfe5768daae
--- /dev/null
+++ b/lang/rust/pkg/DESCR-wasm32
@@ -0,0 +1 @@
+Provides WebAssembly toolchain (wasm32-unknown-unknown target)
diff --git a/lang/rust/pkg/PLIST-wasm32 b/lang/rust/pkg/PLIST-wasm32
new file mode 100644
index 00000000000..7501a81d099
--- /dev/null
+++ b/lang/rust/pkg/PLIST-wasm32
@@ -0,0 +1,30 @@
+lib/rustlib/
+lib/rustlib/wasm32-unknown-unknown/
+lib/rustlib/wasm32-unknown-unknown/lib/
+lib/rustlib/wasm32-unknown-unknown/lib/libaddr2line-${LIBRUST_HASH_WASM32}00.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libadler-${LIBRUST_HASH_WASM32}01.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/liballoc-${LIBRUST_HASH_WASM32}02.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libcfg_if-${LIBRUST_HASH_WASM32}03.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libcompiler_builtins-${LIBRUST_HASH_WASM32}04.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libcore-${LIBRUST_HASH_WASM32}05.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libdlmalloc-${LIBRUST_HASH_WASM32}06.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libgetopts-${LIBRUST_HASH_WASM32}07.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libgimli-${LIBRUST_HASH_WASM32}08.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libhashbrown-${LIBRUST_HASH_WASM32}09.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/liblibc-${LIBRUST_HASH_WASM32}0a.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libmemchr-${LIBRUST_HASH_WASM32}0b.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libminiz_oxide-${LIBRUST_HASH_WASM32}0c.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libobject-${LIBRUST_HASH_WASM32}0d.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libpanic_abort-${LIBRUST_HASH_WASM32}0e.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libpanic_unwind-${LIBRUST_HASH_WASM32}0f.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libproc_macro-${LIBRUST_HASH_WASM32}10.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/librustc_demangle-${LIBRUST_HASH_WASM32}11.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/librustc_std_workspace_alloc-${LIBRUST_HASH_WASM32}12.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/librustc_std_workspace_core-${LIBRUST_HASH_WASM32}13.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/librustc_std_workspace_std-${LIBRUST_HASH_WASM32}14.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libstd-${LIBRUST_HASH_WASM32}15.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libstd_detect-${LIBRUST_HASH_WASM32}16.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libsysroot-${LIBRUST_HASH_WASM32}17.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libtest-${LIBRUST_HASH_WASM32}18.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libunicode_width-${LIBRUST_HASH_WASM32}19.rlib
+lib/rustlib/wasm32-unknown-unknown/lib/libunwind-${LIBRUST_HASH_WASM32}1a.rlib
