├── .gitignore ├── Cargo.toml ├── README.md ├── const_str_slice_concat ├── Cargo.toml └── src │ └── lib.rs ├── examples ├── gtk │ ├── Cargo.toml │ └── src │ │ ├── main.rs │ │ └── tachygtk.rs ├── hackernews │ ├── .cargo │ │ └── config.toml │ ├── Cargo.toml │ ├── LICENSE │ ├── Makefile.toml │ ├── README.md │ ├── index.html │ ├── public │ │ └── favicon.ico │ ├── src │ │ ├── api.rs │ │ ├── lib.rs │ │ ├── main.rs │ │ ├── routes.rs │ │ └── routes │ │ │ ├── nav.rs │ │ │ ├── stories.rs │ │ │ ├── story.rs │ │ │ └── users.rs │ └── style.css ├── hackernews_islands_axum │ ├── .cargo │ │ └── config.wasm.toml │ ├── .dockerignore │ ├── .gitignore │ ├── Cargo.toml │ ├── Dockerfile │ ├── LICENSE │ ├── Makefile.toml │ ├── README.md │ ├── build-front.sh │ ├── public │ │ └── favicon.ico │ └── src │ │ ├── api.rs │ │ ├── fallback.rs │ │ ├── lib.rs │ │ ├── main.rs │ │ ├── routes.rs │ │ └── routes │ │ ├── nav.rs │ │ ├── stories.rs │ │ ├── story.rs │ │ └── users.rs ├── hydration │ ├── .cargo │ │ └── config.toml │ ├── .gitignore │ ├── Cargo.toml │ ├── LICENSE │ ├── README.md │ ├── assets │ │ └── favicon.ico │ ├── end2end │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── playwright.config.ts │ │ └── tests │ │ │ └── example.spec.ts │ ├── rust-toolchain.toml │ ├── src │ │ ├── app.rs │ │ ├── lib.rs │ │ ├── main.rs │ │ └── shell.html │ └── style │ │ └── main.scss └── playground │ ├── .cargo │ └── config.toml │ ├── .gitignore │ ├── Cargo.toml │ ├── index.html │ └── src │ └── main.rs ├── next_tuple ├── Cargo.toml └── src │ └── lib.rs ├── rustfmt.toml ├── tachy_maccy ├── Cargo.toml └── src │ ├── component.rs │ ├── lib.rs │ └── view │ ├── component_builder.rs │ └── mod.rs ├── tachy_reaccy ├── Cargo.toml ├── src │ ├── arena.rs │ ├── async_signal │ │ ├── derived.rs │ │ ├── mod.rs │ │ └── resource.rs │ ├── context.rs │ ├── effect.rs │ ├── lib.rs │ ├── memo.rs │ ├── notify.rs │ ├── render_effect.rs │ ├── selector.rs │ ├── serde.rs │ ├── serialization.rs │ ├── shared_context │ │ ├── hydrate.rs │ │ ├── mod.rs │ │ └── ssr.rs │ ├── signal │ │ ├── arc_signal.rs │ │ ├── mod.rs │ │ ├── read.rs │ │ ├── trigger.rs │ │ └── write.rs │ ├── signal_traits.rs │ ├── source.rs │ ├── spawn.rs │ └── store │ │ ├── indexed.rs │ │ ├── keyed.rs │ │ ├── mod.rs │ │ ├── path.rs │ │ └── stored.rs └── tests │ ├── effect.rs │ ├── memo.rs │ └── signal.rs ├── tachy_reaccy_macro ├── Cargo.toml └── src │ └── lib.rs ├── tachy_route ├── Cargo.toml └── src │ ├── generate_route_list.rs │ ├── lib.rs │ ├── location │ ├── mod.rs │ └── state.rs │ ├── matching │ ├── mod.rs │ ├── param_segments.rs │ └── static_segment.rs │ ├── reactive │ └── mod.rs │ ├── render_mode.rs │ ├── route │ ├── method.rs │ ├── mod.rs │ └── route_child.rs │ ├── router.rs │ └── static_render.rs ├── tachydom ├── Cargo.toml ├── TODO.md └── src │ ├── async_views │ └── mod.rs │ ├── dom.rs │ ├── error.rs │ ├── html │ ├── attribute │ │ ├── aria.rs │ │ ├── custom.rs │ │ ├── global.rs │ │ ├── key.rs │ │ ├── mod.rs │ │ └── value.rs │ ├── class.rs │ ├── element │ │ ├── custom.rs │ │ ├── elements.rs │ │ ├── inner_html.rs │ │ └── mod.rs │ ├── event.rs │ ├── islands.rs │ ├── mod.rs │ ├── node_ref.rs │ ├── property.rs │ └── style.rs │ ├── hydration.rs │ ├── leptos │ ├── class.rs │ ├── mod.rs │ └── style.rs │ ├── lib.rs │ ├── mathml │ └── mod.rs │ ├── renderer │ ├── dom.rs │ ├── mock_dom.rs │ └── mod.rs │ ├── spawner │ └── mod.rs │ ├── ssr │ └── mod.rs │ ├── svg │ └── mod.rs │ ├── tachy_reaccy │ ├── class.rs │ ├── mod.rs │ ├── node_ref.rs │ └── style.rs │ └── view │ ├── any_view.rs │ ├── dynamic.rs │ ├── either.rs │ ├── error_boundary.rs │ ├── iterators.rs │ ├── keyed.rs │ ├── mod.rs │ ├── primitives.rs │ ├── static_types.rs │ ├── strings.rs │ ├── template.rs │ └── tuples.rs └── tachys ├── Cargo.toml └── src ├── children.rs ├── component.rs ├── for_loop.rs ├── hydration_scripts ├── hydration_script.js ├── island_script.js ├── mod.rs └── reload_script.js ├── lib.rs └── show.rs /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | debug/ 4 | target/ 5 | dist/ 6 | 7 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries 8 | # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html 9 | Cargo.lock 10 | 11 | # These are backup files generated by rustfmt 12 | **/*.rs.bk 13 | 14 | # MSVC Windows builds of rustc generate these, which store debugging information 15 | *.pdb 16 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | resolver = "2" 3 | members = [ 4 | "const_str_slice_concat", 5 | "next_tuple", 6 | "tachys", 7 | "tachydom", 8 | "tachy_maccy", 9 | "tachy_reaccy", 10 | "tachy_reaccy_macro", 11 | "tachy_route", 12 | ] 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **Work on this repo has moved into [the `leptos_0.7` branch of the main Leptos repository](https://github.com/leptos-rs/leptos/tree/leptos_0.7).** 2 | 3 | # tachys 4 | ### Experimental web UI library for Rust. 5 | 6 | This is a playground and exploration space for the future development of a new renderer Leptos 0.6. It uses the concept of a statically-typed view tree, similar to SwiftUI and introduced to the Rust UI space by [Xilem](https://github.com/linebender/xilem) and [Concoct](https://github.com/concoct-rs/concoct/). 7 | 8 | This has some *serious* advantages that have not been explored by these other libraries with regard to server-side HTML rendering and extremely efficient and robust hydration, as well as compile-time `