- Move view.rs from sycamore-macro into sycamore-view-parser codegen.rs by @davidon-top in #762
- Bump dawidd6/action-download-artifact from 2 to 6 in /.github/workflows by @dependabot[bot] in #763
- Fix some typos by @AMNRG in #765
- head should be html by @phocks in #767
- owned String required .into() or .to_string() by @phocks in #768
- signal instead of value name of var by @phocks in #769
- Update
refsyntax tor#refin doc comments by @AMNRG in #771 - Fix view update handling for dynamic field bases by @AMNRG in #773
- Fix context not removed when node is rerun by @lukechu10 in #775
- guide: fix a minor typo by @tguichaoua in #779
- Update resources-and-suspense.md by @humb1t in #780
- Fix typo in js-interop.md by @alexmccartneymoore in #782
- Fix
unexpected_cfgsin the crates and add a troubleshooting note by @tguichaoua in #783 - Fix lint warnings by @tguichaoua in #784
- Update bench.yml by @ZAZPRO in #786
- Fix missing deref in adding-state.md example by @ZAZPRO in #787
- Update router documentation by @lukeh990 in #788
- Fix typo in rendering-lists.md by @JoeriDamme in #791
- Fix bug where the stop function in
create_raf_loopwas not actually being called by @lukechu10 in #793 - fix reconcile_fragments bug by @acheul in #796
- Enforce minimum supported Rust version by @Vectornaut in #797
- Reimplement
is_ssr!andis_not_ssr!macros to not trigger unknown cfg warning by @lukechu10 in #798 - Fix new clippy warnings by @lukechu10 in #799
- Update LICENSE year to 2025 by @lukechu10 in #800
- Fix
#[cfg_ssr]and#[cfg_not_ssr]to useis_ssr!andis_not_ssr!macros. by @lukechu10 in #801 - Disable publishing in Cargo.toml for examples by @lukechu10 in #803
- Add main packages as default members for the virtual workspace by @lukechu10 in #804
- Fix typo in release post by @lukechu10 in #748
- Router example by @davidon-top in #749
- Allow adding derives to generated prop type for
inline_propsby @davidon-top in #750 - Router refresh by @davidon-top in #751
- Forward attributes on function parameters to generated prop struct in
inline_propsby @lukechu10 in #753 - Update README.md with new details by @lukechu10 in #754
- Update trunk to v0.21.1 in GitHub Actions workflows by @lukechu10 in #756
- Support query parameters in routes by @davidon-top in #752
- Simplify navigate functions in router by @lukechu10 in #759
- Properly support patterns in inline_props by @lukechu10 in #760
Release Post: https://sycamore.dev/post/announcing-v0-9-0
Migration Guide: https://sycamore.dev/book/migration/0-8-to-0-9
- Change NAME_SPACE to NAMESPACE by @sokratisvas in #482
- Improve binding ergonomics for
RcSignalby @danielalvsaaker in #489 - Use fully qualified method calls in macro for bound signals by @danielalvsaaker in #499
- fix(bug): #500 fix and #501 fix by @danielnehrig in #502
- Rename derive proc-macro
ProptoPropsby @alexisfontaine in #503 - Fix MDN documentation link of SVG elements by @alexisfontaine in #505
- Rename the derive macro helper attribute
buildertopropby @alexisfontaine in #504 - Make
NodeRefReactive by @wainwrightmark in #508 - Add data binding for valueAsNumber property by @wainwrightmark in #511
- Fix js-framework-benchmark CI by @lukechu10 in #520
- Fix mismatched link in examples by @nthnd in #524
- Simplify the TodoMVC example code by @lukechu10 in #526
- adding
set_fnandset_fn_silentby @blainehansen in #529 - Remove redundant set_value in todomvc example in #530
- Make
create_refonly allowT: 'staticby @lukechu10 in #519 - Update dependencies to latest by @lukechu10 in #510
GenericNodev2 by @lukechu10 in #521- Remove legacy component syntax and introduce
Componenttrait by @lukechu10 in #533 - Change CSS
color-schemewith dark mode is toggled on website by @lukechu10 in #534 - Prevent re-running effects inside themselves by @lukechu10 in #539
- (Runtime) Templates by @lukechu10 in #536
- Make
Option<T>prop fields optional by default by @danielalvsaaker in #531 - Implement ToView manually for types by @lukechu10 in #541
- Fix missing
View::new_dyn_scopedcheck at the root by @lukechu10 in #549 - Rename css.md to styling.md and add info on integrations with CSS frameworks by @lukechu10 in #550
- Adopt a logo! by @lukechu10 in #551
- Typed event data + async event handlers by @lukechu10 in #553
- Replace context
HashMapwithVecand add benchmark by @lukechu10 in #555 - Allow passing through attributes on components by @wingertge in #548
- Wasm bindgen example by @wa1aric in #558
- Add unique ID generation hook by @wingertge in #565
- fixes bind macro problem by @blainehansen in #569
- API docs correction for Functions hydrate_to: "use hydrate_to" can now read and link as "use hydrate". by @StarSapien in #579
- chore: fix formatting and clippy lints by @lukechu10 in #582
- Update render util tests and add nested dyn test by @lukechu10 in #583
- Fix Issue #572 by @wingertge in #573
- Centered badges by @simonhyll in #589
- Add signal equivalent of
create_ref_unsafeby @wingertge in #586 - Do not add values to the arena drop list if not necessary by @lukechu10 in #552
- Avoid exponential blowup in size of Builder type by @sapphire-arches in #591
- Update syn to v2 by @lukechu10 in #593
- Prepare v0.9.0-beta.1 by @lukechu10 in #594
- Fix builder
bind_valueandbind_checkedcalling wasm functions in SSR by @lukechu10 in #608 - Fix #562 / ignore the query parameters when matching a path to a route by @Miroito in #575
- Fix navigating to an anchor and route matching with hash parameters by @lukechu10 in #610
- Update Trunk, NodeJS, and MSRV to 1.65 by @lukechu10 in #611
- Update routing.md by @jhutchins in #613
- fix view! parser to handle dashed attributes with Rust keywords (#620) by @mekanoe in #624
- Update MSRV to 1.72 by @lukechu10 in #625
- Reactivity v3! (Part 1) 🎉 by @lukechu10 in #612
- fix typos & small grammatical errors by @iiiii7d in #627
- Reactivity v3 (Part 2) by @lukechu10 in #626
- Update README.md example with new reactivity system] by @lukechu10 in #629
- Bump postcss from 8.4.23 to 8.4.31 in /website by @dependabot in #628
- Dont suggest wee-alloc in docs by @lukechu10 in #630
- Make batch affect both memos and effects by @lukechu10 in #631
- Repace the
Memostruct withReadSignalby @lukechu10 in #632 - Update all dependencies by @lukechu10 in #633
- v0.9.0-beta.2 by @lukechu10 in #634
- Run everything through prettier by @lukechu10 in #635
- Update components documentation for v0.9 by @brynnjmccormick in #637
- Add a CONTRIBUTING.md and remove old contributing docs by @lukechu10 in #636
- Fix panic about current not being a child of parent in clean_children by @lukechu10 in #639
- Re-export
wasm-bindgen,js-sys, and event types fromweb-sysby @lukechu10 in #642 - Add missing docs and more doctests by @lukechu10 in #643
- Move web-sys features from sycamore to sycamore-web by @lukechu10 in #644
- Update Router example to use non-referenced ReadSignal by @noxxxxxious in #647
- Refactor view! by extracting parsing logic from codegen into a new crate by @lukechu10 in #649
- Improve generation of HTML for the hydrate example. by @lukechu10 in #657
- Add underline and bold for navigation improvements by @Hmikihiro in #660
- Temporary fix for book broken navigation by @Hmikihiro in #661
- Update MSRV to 1.73.0 by @lukechu10 in #663
- Remove deploy draft workflow by @lukechu10 in #664
- Update trunk to v0.19.1 and disable minification for hydrate example by @lukechu10 in #665
- Maintenance: fix all the new clippy warnings by @lukechu10 in #666
- Add
track_callerattribute toprovide_context*anduse_contextfunctions by @lukechu10 in #667 - Add 'SubmitEvent' to re-exported events from web_sys crate by @dyanechi in #668
- Replace CountAPI as it got taken down. by @JasonLovesDoggo in #674
- Bump braces from 3.0.2 to 3.0.3 in /website by @dependabot in #675
- Rename the tag type alias by @mtshr in #677
- View Backend v2! (Attempt 2) by @lukechu10 in #679
- Remove
target_wasm32folder by @lukechu10 in #680 - Update some old docs by @lukechu10 in #681
- Fix
set_fnto not be silent by @lukechu10 in #682 - v0.9.0-beta.3 by @lukechu10 in #683
- Fix missing version in dependency by @lukechu10 in #684
- fixup: missing keys in Cargo.toml by @lukechu10 in #685
- Update codecov action by @lukechu10 in #686
- fixup: wrong version in docs by @lukechu10 in #687
- Make
ViewHtmlNodemethods useCow<'static, str>instead of&'static strby @lukechu10 in #688 - Make
HtmlNodeintopubby @lukechu10 in #689 - Fix
NoHydrateshould render if not hydrating by @lukechu10 in #690 - Remove
nomdependency and replace with hand written parser by @lukechu10 in #691 - Reorganize
sycamore-webby @lukechu10 in #692 - Move
MaybeDynto new file and add some impls by @lukechu10 in #693 - Reimplement attribute passthrough, without
attr:xyz! by @lukechu10 in #694 - Fix suspense rendering async shell during fallback by @lukechu10 in #695
- SSR Streaming by @lukechu10 in #696
- Remove Gitpod by @lukechu10 in #697
- v0.9.0-beta.4 by @lukechu10 in #698
- Fix router on different pathname and hash triggers hard refresh by @lukechu10 in #700
- Fix suspense should create context in global scope by @lukechu10 in #701
- Add umami analytics to website by @lukechu10 in #702
- Update branch name from
mastertomainby @lukechu10 in #706 - Allow attribute names by using string literal by @Kromgart in #707
- Move
MaybeDyntosycamore-reactiveby @lukechu10 in #705 - Add re-exports back to
sycamore-webby @lukechu10 in #708 - Cleanup some example dependencies by @lukechu10 in #709
- Add missing feature to serde in
http-request(-builder)examples by @lukechu10 in #710 - Fix #704 - Updating the check whether a view must be dynamic. by @Kromgart in #711
- Support
MaybeDyn<Option<Cow<'static, str>>>and make some impls more flexible by @lukechu10 in #713 - Remove
tracingfromsycamore-webby @lukechu10 in #715 - Support optional attributes by @lukechu10 in #714
- Update faq.md, rust is the 2023-most-desired-language by @liigo in #716
- Transitions v2 + Resources API by @lukechu10 in #719
- cargo fmt by @lukechu10 in #722
- Fix macro hygiene for
console_{log, warn, error, dbg}!by @lukechu10 in #723 - Update old website to migrate to sycamore.dev by @lukechu10 in #724
- Force redirect home page to new website by @lukechu10 in #725
- Remove old website code by @lukechu10 in #726
- Create SECURITY.md by @lukechu10 in #727
- Update docs to test workflow by @lukechu10 in #728
- Fix build examples workflow by @lukechu10 in #730
- Fix build example workflow again by @lukechu10 in #731
- Implement
Into<View>for signal like types by @lukechu10 in #732 - New docs for Sycamore v0.9 by @lukechu10 in #729
- Fix hydration mismatch when using
render_to_string_await_suspenseby @lukechu10 in #733 - Fix broken expect test by @lukechu10 in #734
- Fix condition in
Suspenseis not reactive breaking hydration by @lukechu10 in #735 - Fix SSR blocking mode removing suspended content after load by @lukechu10 in #736
- Make
SsrNodeautomatically create reactive nodes by default by @lukechu10 in #737 - Reimplement SSR streaming with
FuturesUnorderedby @lukechu10 in #738 - Do not track callback in
onfunction callback by @lukechu10 in #740 - Fix do not track nested reactivity in
map_keyed/map_indexedby @lukechu10 in #742 - Slightly better error messages for read/updating a signal while updating/reading by @lukechu10 in #745
- Support
impl Traitsyntax withinline_propsby @davidon-top in #746
Release post: https://sycamore-rs.netlify.app/news/announcing-v0.8.0
-
- Add
.map()utility toSignal. - Reactive Primitives v2 🎉! Read the blog post for more information.
- Suspense and async components.
- Async transitions.
- Type-checked HTML element tags.
- Builder API v2!
- SVG support.
- Implement
AddAssignand friends forSignal. - Add
Signal::modifyto mutate signal. - Add
NoHydrateandNoSsrutility components. - Add
from_web_sysfunction. - Add
prop:directive toview! - Add
dangerously_set_inner_htmlto the builder API. - Print hydration key for hydration mismatch.
- New view syntax for components. Unifies the syntax used for setting attributes/props in elements and components.
- Add
-
- Make
SsrNodeattribute order stable. - Call cleanup callbacks in
map_keyedandmap_indexed - Create a nested reactive scope if
cxis used inside dyn expression. - Fix and simplify
SsrNodeandHydrateNodecodegen inview!. - Fix hydration for top-level dynamic views.
- Fix setting
classon SVG elements. - Fix parsing of legacy components in child views.
- Fix destructuring in async component props.
- Add the
<body>tag to the HTML elements list. - Fix
scope_depthto return0for root scope. - Fix removing old nodes from parent.
- Remove Unit
()implementation ofProp. - Add
Debugimplementations to all public items. - Fix boolean attribute list.
- Allow fragments and dynamic views in
Router. - Fix hydration error for
Router.
- Make
-
- Update license to 2022.
- Make website responsive and mobile-friendly.
- Use in-tree
js-framework-benchmarkimplementation for benchmarking. - Split the
sycamorecrate intosycamore-coreandsycamore-web. - Simplify
reconcile_fragmentsimplementation. - Update MSRV to 1.63 and remove some
unsafes fromsycamore-reactive.
Release post: https://sycamore-rs.netlify.app/news/announcing-v0.7.0
-
- Implement
TryFromSegmentsforT: Route. This allows the creation of nested routers. See the docs for more information about usage. - Make parenthesis optional in
cloned!macro. The following syntax is now accepted, in addition to the old syntax:// Before cloned!((my, variables, to, clone) => move || { ... }) // After cloned!(my, variables, to, clone => move || { ... })
- Builder API. Check out the
hello-builderexample for more usage details. - Make
wasm-bindgen-interninga feature. This feature is enabled by default but can be opted-out which would disablewasm-bindgen/enable-interning. Opting-out can lead to a slight decrease in binary size at the cost of performance. - Introduce
render_get_scopefunction. This allows accessing (and disposing of) theReactiveScopecreated by the render function. - Hydration support. To enable hydration,
replace calls to
renderandrender_towithhydrateandhydrate_to. - Add
#[track_caller]touse_context. This makes it much easier to debug the"context not found for type"error. - Better debugging utilities for inspecting the
ReactiveScopehierarchy.
- Implement
-
- Prevent data binding from panicking when not in browser.
- Extend
ReactiveScopeinto scopes that are siblings. - Fix
Lerpimplementation for integers. - Fix context API not working through
IndexedandKeyed. - Update TodoMVC example to use context API.
- Remove
autocompletefrom the list of boolean attributes for codegen. - Fix parenthesizing of expressions in
view!macro interpolation syntax. - Fix context API when effects are re-executed.
- Allow constant generics to be used with
#[component]macro.
-
- Refactor
GenericNodeand introduceHtmltrait. AddIS_BROWSERconstant toHtml.. For projects that target HTML, it is recommended to use theHtmltrait instead ofGenericNode. This will ensure that it cannot be used on rendering backends that are not for HTML. To check if code is executing on the browser, access theHtml::IS_BROWSERconstant on the generic rendering backend. This also slightly changes theGenericNodeinterface which is why it is a breaking change but would most likely not influence you. - Make
GenericNodegeneric over the event type. The event type is now an associated type to allow rendering backends to use another type fromweb_sys::Event. - Rename
TemplatetoViewandtemplate!toview!. For most cases, a simple search-and-replace will suffice, replacing all instances ofTemplatetoViewand all instances oftemplate!toview!. - Rename
StateHandletoReadSignal. The old name was somewhat confusing and did not reflect thatStateHandlewas just a read-only signal.
- Refactor
-
- Do not strip leading
/from pathname. This fixes an issue with the router on Firefox when navigating to the index page.
- Do not strip leading
-
- Disable
fullfeature onsynto reduce compile times. - Use a global
HashSetfor void elements lookup in SSR. - Remove part of formatting machinery from
sycamoreandsycamore-reactiveto reduce binary size. - Fix panic on updating dynamic node inside a template fragment.
- Implement
DefaultforSignal. - Implement
DefaultforStateHandle.
- Disable
Release post: https://sycamore-rs.netlify.app/news/announcing-v0.6.0
-
- Add integrations for
sycamore-router. - Added
dangerously_set_inner_htmlspecial attribute to html elements. This allows directly setting an element's inner html without going through aNodeRefand manually calling.set_inner_html(). - Implement
Portals. Portals allow adding nodes to elements that are in another tree. - Allow instantiating components with the
Componenttrait. You can now also create components that are generic over another component. This pattern can be seen in thehigher-order-componentsexample. - Respect base html tag in router.
- Dark mode on website!
create_reducerhook. Thecreate_reducerhook is an alternative toSignal::new. It allows you to use a reducer function to get the next state from the previous state.enum Msg { Increment, Decrement, } let (state, dispatch) = create_reducer(0, |state, msg: Msg| match msg { Msg::Increment => *state + 1, Msg::Decrement => *state - 1, });
- Opt out of router by using
rel="external"on an anchor tag. Addingrel="external"to an anchor tag will use the browser's default navigation behavior.template! { a(href="path", rel="external") { "Link" } }
- Add integrations for
-
- Fix logic error in
reconcile_fragments. - Fix grammar on website index page.
- Scroll to top when navigating to a page.
- Use
ahashinstead of default SipHash for better performance. - Explicitly define MSRV to 1.53 and run CI in a matrix.
- Remove inline JS snippet. This removes the need to load an extra JS file before Sycamore can start.
- Add some UI tests for
#[component]attribute macro. - Generate a
sitemap.xmlfor the website. - Fix broken link to the reactivity page on the website index page.
- Explain that Trunk needs a
index.htmlfile in Hello World docs. - Remove internal
RcfromDomNode. This significantly improves performance and memory usage. See the PR for benchmarks. - Optimize the website with
wasm-optto reduce binary size. - Optimize
create_effect. - Fix
SsrNode's implementation ofremove_childremoving two children instead of just one. - Hold a backlink for each
ReactiveScopeto its parent scope. This fixes a bug whereuse_contextcould only access the context on the first render and would panic on subsequent accesses. - Remove dependency on
chrono. This was replaced with direct access to browser APIs to reduce the number of dependencies and thus to improve build times. - Replace internal usage of
.unwrap()with.unwrap_throw(). Slightly improves binary sizes. - Derive
Cloneforsycamore_routerpath types. - Update
todomvcexample with latest features. - Fix router not actually parsing identifiers. Fixes a bug where a dynamic parameter followed by a dynamic segment would parse as a single segment.
- Build rustdocs in CI. The API documentation
for the
masterbranch is available at sycamore-rs.netlify.app/api. - Reorganize documentation a bit.
- Fix logic error in
-
- Extract reactive primitives into separate crate
sycamore-reactive. Reactive primitives are now re-exported in thesycamorecrate to avoid adding new dependencies to your project. It is also now possible to use reactive primitives without usingsycamoreby directly depending onsycamore-reactive. - Rename sub-module
sycamore::rxtosycamore::reactive.rxmight be ambiguous with Rx family of libraries. Renaming toreactivemakes it clear that it works differently from Rx libraries. - Refactored router with new API. See the new documentation for more details.
- Support boolean attributes. Some attributes
now expect a
boolinstead ofimpl ToString. This also fixes an issue where previously, attributes couldn't be removed directly from thetemplate!macro.// Before template! { input(type="checkbox", checked="") { "Checkbox" } } // After template! { input(type="checkbox", checked=true) { "Checkbox" } }
- Extract reactive primitives into separate crate
-
- Context API: introducing
ContextProvideranduse_context[@lukechu10, #169]
- Context API: introducing
-
- Router should not prevent default if meta keys are held down [@baile320, #165]
- Remove some
optionaltags on dependencies [@lukechu10, #167] - Explicitly enable
stdfeature inindexmapto prevent compile error [@Gearme, #170] - Do not panic when
map_keyedis updated with same data in debug mode [@lukechu10, #173]
-
- Add some integration tests for
StaticRouter[@lukechu10, #168] - Fix intra-doc link [@tshepang, #162]
- Refactor
sycamore-macrostatic text and splices [@lukechu10, #175]
- Add some integration tests for
-
- Simplify cargo command in documentation [@tshepang, #163]
- Fix link to book in website version selector [@lukechu10, #166]
-
- Performance tweaks [@lukechu10, #171]
-
- Remove
Hashtrait bound fromTinKeyed[@lukechu10, #148]
- Remove
-
- Add news section to website with v0.5.0 release post [@lukechu10, #149, #149]
- Fix typo in v0.5.0 release post [@tshepang, #156]
- Add versioned docs to website [@lukechu10, #160]
-
- Reduce allocations when creating
Templates [@lukechu10, #143] - Do not create effects when splice is static (using simple heuristic) [@lukechu10, #155]
- Set
classNamedirectly instead of callingsetAttribute[@lukechu10, #157] - Optimize
create_effect[@lukechu10, #159]
- Reduce allocations when creating
Release post: https://sycamore-rs.netlify.app/news/announcing-v0.5.0
-
- Tweened signals [@lukechu10, #86]
- Add more easing functions [@tmpr, #90]
- Document fragments in the
template!macro.template!can now accept the following input:template! { p { "First" } p { "Second" } }
[@lukechu10, #89]template! {} // empty template
- 2-way data binding for certain supported props [@lukechu10, #93]
- Allow generic component's type parameters to be inferred from context [@lukechu10, #100]
- Refactored
Template(renamed fromTemplateResult) to allow make the template system more flexible. It is now possible to imperatively constructTemplates from raw dom nodes,Vecs, and closures [@lukechu10, #104] - Sycamore router [@lukechu10, #118]
- Temporary "fake" hydration [@lukechu10, #101]
- Router use anchor tags (
<a>) instead ofLinkcomponents [@lukechu10, #128] - Reactive scope dependency count utility function [@lukechu10, #144]
-
- Implement missing operations on
SsrNode[@lukechu10, #82, #138] - Remove warning when effects are created outside of a reactive scope [@JuanMarchetto, #95]
- Do not assume
Signalis valid for entire duration of the effect and make effect triggers deterministic (outer effects rerun first) [@lukechu10, #145] - Eagerly evaluate dynamic
Templates withcreate_memo[@lukechu10, #146]
- Implement missing operations on
-
- Host documentation on website [@lukechu10, #83]
- Write documentation [@lukechu10, #87, #111, #133]
- Fix
CHANGELOG.mdtypo [@Riey, #102] - Style documentation website with TailwindCSS [@lukechu10, #117]
- Use router for documentation website header [@lukechu10, #132]
- Extract outline from markdown and new index page [@lukechu10, #134]
- Move documentation under
/docs/*path [@lukechu10, #139]
-
- Build website in GitHub Actions [@lukechu10, #84]
- Run unit tests in Miri to catch memory errors [@lukechu10, #91]
- Update Trunk to v0.11.0 [@lukechu10, #96]
- Improve documentation website lighthouse score [@lukechu10, #97]
- Setup gitpod.io configuration to make it easier to contribute [@lukechu10, #98]
- Update
wasm-bindgento v0.2.74 in.gitpod.Dockerfile[@lukechu10, #108] - Update links to git repository to point to
sycamore-rs/sycamore[@lukechu10, #110] - Add micro-benchmarks for
map_indexedandmap_keyed[@lukechu10, #115] - Run js-framework-benchmark in GitHub
Actions. Pull requests with the
performancetag will automatically trigger a benchmark run [@lukechu10, #114] - Fix branch naming to work with continuous benchmark [@lukechu10, #116]
- Various performance improvements [@lukechu10, #126]
- Google search console verification file [@lukechu10, #135]
- Get
NodeIdforDomNodelazily to improve performance whenHashis not used [@lukechu10, #136] - Do not insert unnecessary marker nodes [@lukechu10, #137]
- Remove unnecessary
Rc<RefCell<_>>s [@lukechu10, #141] - Cache
window.documentsince it is frequently used to prevent going through JS interop [@lukechu10, #142]
-
- Abstraction over rendering backend! This introduces the concept of
GenericNodewhich is a trait to access the underlying rendering backend. Currently, Sycamore ships withDomNodeandSsrNodeout-of-the-box for rendering the the browser DOM and to a static string respectively. Components should now be generic overG: GenericNodeto be able to render to multiple backends [@lights0123, #67] - Require using the
#[component(_)]attribute macro for defining components. This changes the component syntax to:The#[component(MyComponent<G>)] fn my_component() -> Template<G> { todo!() }
#[component(_)]macro generates astructunder the hood that implements theComponenttrait for improved type safety. This also means that you no longer need#[allow(non_snake_case)]in your code! [@lukechu10, #70] #92] - Rename
OwnertoReactiveScope[@lukechu10, #99] - Renamed crate from
maple-coretosycamoreandmaple-core-macrotosycamore-macro. Also renamed all instances of "Maple" to "Sycamore" [@lukechu10, #109] - Rename
TemplateResulttoTemplate[@lukechu10, #112] - Rename
reactivesub-module torx[@lukechu10, #113] - Remove render functions (
render,render_to,render_to_string, etc...) fromprelude. These functions are generally only called once in a Sycamore app so they do not belong in the prelude [@lukechu10, #140]
- Abstraction over rendering backend! This introduces the concept of
-
- Support
'-'in attribute names. This makes the following syntax valid:[@lukechu10, #79]template! { button(aria-hidden="true") }
- Support
-
- Delete removed nodes in
Keyedfirst before adding new nodes and moving existing nodes [@lukechu10, #77]
- Delete removed nodes in
-
- Fix
Keyediteration (hopefully for the last time) when moving nodes already inserted [@lukechu10, #75]
- Fix
-
- Fix
Keyediteration (swapping and inserting not at the end) [@lukechu10, #73]
- Fix
-
- Fix typo in
README.md[@iwburns, #64]] - Add discord server link to issue template [@lukechu10, #68]
- Fix typo in
-
- Fix filter links in TodoMVC example [@lukechu10, #65]
-
- Iteration using
SignalVec. This is more of an experiment and there are some bugs. This will most likely be removed in a future version [@lukechu10, #49] - Keyed iteration using
Keyedand non-keyed iteration usingIndexedwhich can iterate over aSignal<Vec>. This is the recommended way to iterate over a list of values [@lukechu10, #51, #53 and #54] - Node references. Use the
refattribute to bind an HTML element to aNodeRef[@lukechu10, #57]
- Iteration using
-
- Fix debug assertions in
Keyed[@lukechu10, #53]
- Fix debug assertions in
-
- Setup integration tests [@lukechu10, #51]
-
- Complete spec conforming TodoMVC implementation [@lukechu10, #60]
-
- More types in
template!macro.template!can now be nested [@lukechu10, #45] - Component lifecycle using
on_cleanup[@lukechu10, #24]
- More types in
-
- Add some badges to
README.md[@lukechu10, #44 and #48]
- Add some badges to
-
- Nested effects. Inner effects are destroyed and recreated when outer effects re-run [@lukechu10, #29]
cloned!macro for making it easier to clone items into a new scope [@lukechu10, #34]- Effects are created inside a reactivity root (using
create_root). When the rootOwneris dropped, all effects are also destroyed [@lukechu10, 37] - Nested templates. Using this, it is also possible to build simple
if/elsecontrol flow although there will be a more polished version [@lukechu10, #41]
-
- Parse html root as an
HtmlTree[@lukechu10, #25] - Recreate effect dependencies on each re-run [@lukechu10, #29]
- Parse html root as an
-
- Remove double boxing of
Computation[@Kestrer, #31] - Create
CODE_OF_CONDUCT.md[@lukechu10, #33] - Add some preliminary benchmarks for signals and effects [@lukechu10, #35]
- Add clippy to CI workflow [@Kestrer, #42]
- Remove double boxing of
-
- New documentation website: https://sycamore-rs.netlify.app/ [@lukechu10, #26 and #40]
-
- The
template!macro now returns aTemplateResultinstead of raw DOM nodes for increased type safety [#10]
- The
-
- New
untrackedutility for explicitly opting out of automatic dependency detection in reactive contexts [#8]
- New
-
- Only subscribe to a dependency once in an effect, even if it is called multiple times [#7]
-
- Initial release!
- Added
template!macro. - Added reactivity primitives.