diff --git a/Examples/ActorOnWebWorker/Sources/MyApp.swift b/Examples/ActorOnWebWorker/Sources/MyApp.swift
index 771915d4..357956a7 100644
--- a/Examples/ActorOnWebWorker/Sources/MyApp.swift
+++ b/Examples/ActorOnWebWorker/Sources/MyApp.swift
@@ -120,13 +120,13 @@ final class App {
     private let alert = JSObject.global.alert.function!
 
     // UI elements
-    private var container: JSValue
-    private var urlInput: JSValue
-    private var indexButton: JSValue
-    private var searchInput: JSValue
-    private var searchButton: JSValue
-    private var statusElement: JSValue
-    private var resultsElement: JSValue
+    private let container: JSValue
+    private let urlInput: JSValue
+    private let indexButton: JSValue
+    private let searchInput: JSValue
+    private let searchButton: JSValue
+    private let statusElement: JSValue
+    private let resultsElement: JSValue
 
     // Search service
     private let service: SearchService
@@ -214,13 +214,13 @@ final class App {
         resultsElement.innerHTML = .string("")
 
         if results.isEmpty {
-            var noResults = document.createElement("p")
+            let noResults = document.createElement("p")
             noResults.innerText = .string("No results found.")
             _ = resultsElement.appendChild(noResults)
         } else {
             // Display up to 10 results
             for (index, result) in results.prefix(10).enumerated() {
-                var resultItem = document.createElement("div")
+                let resultItem = document.createElement("div")
                 resultItem.style = .string(
                     "padding: 10px; margin: 5px 0; background: #f5f5f5; border-left: 3px solid blue;"
                 )
diff --git a/Examples/Basic/Sources/main.swift b/Examples/Basic/Sources/main.swift
index 8fa9c956..7ea9231e 100644
--- a/Examples/Basic/Sources/main.swift
+++ b/Examples/Basic/Sources/main.swift
@@ -4,11 +4,11 @@ import JavaScriptKit
 let alert = JSObject.global.alert.function!
 let document = JSObject.global.document
 
-var divElement = document.createElement("div")
+let divElement = document.createElement("div")
 divElement.innerText = "Hello, world"
 _ = document.body.appendChild(divElement)
 
-var buttonElement = document.createElement("button")
+let buttonElement = document.createElement("button")
 buttonElement.innerText = "Alert demo"
 buttonElement.onclick = .object(
     JSClosure { _ in
@@ -30,7 +30,7 @@ struct Response: Decodable {
     let uuid: String
 }
 
-var asyncButtonElement = document.createElement("button")
+let asyncButtonElement = document.createElement("button")
 asyncButtonElement.innerText = "Fetch UUID demo"
 asyncButtonElement.onclick = .object(
     JSClosure { _ in
diff --git a/Examples/Embedded/Sources/EmbeddedApp/main.swift b/Examples/Embedded/Sources/EmbeddedApp/main.swift
index 37b2334b..61047132 100644
--- a/Examples/Embedded/Sources/EmbeddedApp/main.swift
+++ b/Examples/Embedded/Sources/EmbeddedApp/main.swift
@@ -7,11 +7,11 @@ print("Hello from WASM, document title: \(document.title.string ?? "")")
 
 var count = 0
 
-var divElement = document.createElement("div")
+let divElement = document.createElement("div")
 divElement.innerText = .string("Count \(count)")
 _ = document.body.appendChild(divElement)
 
-var clickMeElement = document.createElement("button")
+let clickMeElement = document.createElement("button")
 clickMeElement.innerText = "Click me"
 clickMeElement.onclick = JSValue.object(
     JSClosure { _ in
@@ -22,8 +22,8 @@ clickMeElement.onclick = JSValue.object(
 )
 _ = document.body.appendChild(clickMeElement)
 
-var encodeResultElement = document.createElement("pre")
-var textInputElement = document.createElement("input")
+let encodeResultElement = document.createElement("pre")
+let textInputElement = document.createElement("input")
 textInputElement.type = "text"
 textInputElement.placeholder = "Enter text to encode to UTF-8"
 textInputElement.oninput = JSValue.object(
diff --git a/Sources/JavaScriptKit/JSValue.swift b/Sources/JavaScriptKit/JSValue.swift
index 8c605530..b9f8dd4a 100644
--- a/Sources/JavaScriptKit/JSValue.swift
+++ b/Sources/JavaScriptKit/JSValue.swift
@@ -120,14 +120,14 @@ extension JSValue {
     /// - Precondition: `self` must be a JavaScript Object.
     public subscript(dynamicMember name: String) -> JSValue {
         get { self.object![name] }
-        set { self.object![name] = newValue }
+        nonmutating set { self.object![name] = newValue }
     }
 
     /// An unsafe convenience method of `JSObject.subscript(_ index: Int) -> JSValue`
     /// - Precondition: `self` must be a JavaScript Object.
     public subscript(_ index: Int) -> JSValue {
         get { object![index] }
-        set { object![index] = newValue }
+        nonmutating set { object![index] = newValue }
     }
 }
 
diff --git a/Tests/JavaScriptKitTests/JavaScriptKitTests.swift b/Tests/JavaScriptKitTests/JavaScriptKitTests.swift
index d7911feb..246df522 100644
--- a/Tests/JavaScriptKitTests/JavaScriptKitTests.swift
+++ b/Tests/JavaScriptKitTests/JavaScriptKitTests.swift
@@ -494,7 +494,7 @@ class JavaScriptKitTests: XCTestCase {
     }
 
     func testJSValueAccessor() {
-        var globalObject1 = JSObject.global.globalObject1
+        let globalObject1 = JSObject.global.globalObject1
         XCTAssertEqual(globalObject1.prop_1.nested_prop, .number(1))
         XCTAssertEqual(globalObject1.object!.prop_1.object!.nested_prop, .number(1))