You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+17-4Lines changed: 17 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,11 +4,20 @@ Create client-side web apps in Swift that weigh less than 200 kB.
4
4
5
5
**[Check out the "Swiftle" demo app!](/Examples/Swiftle/)**
6
6
7
-
## 🚧 Experimental 🚧
7
+
## 🚧 Work In Progress 🚧
8
8
Based on the [swift.org WebAssembly SDKs](https://forums.swift.org/t/swift-sdks-for-webassembly-now-available-on-swift-org/80405), [JavaScriptKit](https://github.com/swiftwasm/JavaScriptKit), and [Elementary](https://github.com/sliemeobn/elementary).
9
9
10
10
For embedded builds, a recent main or 6.2 snapshot with matching *Swift SDKs for WebAssembly* from [swift.org](https://www.swift.org/install) is required.
11
11
12
+
> [!IMPORTANT]
13
+
> ElementaryDOM is a passion project under active development.\
14
+
> Expect sharp edges, APIs may change, and things may break while I balance performance, ergonomics, and feature set.
15
+
>
16
+
> Nothing is stopping us from having a viable, fully featured, client-side web frontend library powered by Swift.
17
+
>
18
+
> If you want to see this come to life, sponsorship is sincerely appreciated 🙏\
@@ -19,16 +28,20 @@ For embedded builds, a recent main or 6.2 snapshot with matching *Swift SDKs for
19
28
-~~dependencies on versioned packages (i.e., build without unsafe flags)~~
20
29
-~~fix DOM not child-diffing to preserve animations/nodes (the current solution based on `replaceChildren` will not work, it seems)~~
21
30
- "model-bindings" for inputs (i.e., bind a @Binding<String> to a text box, or bind a @Binding<Bool> to a checkbox)
31
+
- transitions and animations (ideally CSS-based, probably svelte-like custom easing functions applied through WAAPI)
32
+
- proper unit testing (once APIs firm up a bit more)
33
+
- split out JavaScriptKit stuff in separate module to contain spread, maybe one day we can switch to faster interop somehow
34
+
- add basic docs, a good intro readme, and push a 0.1 out the door! (probably best to wait for Swift 6.2 to drop)
35
+
- a router implementation (probably in extra module?)
22
36
- maybe conditionally support @Observable for non-embedded builds?
23
-
- transitions and animations (CSS-based)
24
37
- figure out why `@Environment` with optional `ReactiveObject` does not build in embedded
25
-
- proper unit testing (once APIs firm up a bit more)
26
38
- preference system (i.e., bubbling up values)
27
39
- embedded-friendly Browser APIs (Storage, History, maybe in swiftwasm package with new JavaScriptKit macros)
28
40
-~~think about how to deal with the lack of `Codable` in embedded (wait for new serialization macros)~~
29
41
-~~make printing work without WASI (maybe pipe putchar through to JavaScript?)~~
30
-
- isolation and @MainActor stuff for reusable types (server-side-rendering and client apps)
42
+
- isolation and @MainActor stuff for reusable types (server-siderendering and client apps - probably never quite possible to have same types render "multi-threaded" server side and stay single-threaded client side....)
31
43
-~~decide whether the current idea of `Views` flattening themselves into renderable types is even necessary, or if views should just "apply" themselves into the reconciler - might be a bit messier, but maybe faster and more flexible~~
44
+
- move all elementary repos under one project roof and use a traits-based, single "ElementaryUI" top-level package (or similar)
0 commit comments