diff --git a/examples/bevy_state.rs b/examples/bevy_state.rs
index 74089492e41470b96027271ca07c72da832d681c..9b62fd574ffc94467438dae7b052438b4d7a9d61 100644
--- a/examples/bevy_state.rs
+++ b/examples/bevy_state.rs
@@ -5,7 +5,7 @@ use bevy::{
 };
 use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle};
 use kayak_ui::core::{
-    render, rsx, widget, Event, EventType, Index, KayakContextRef, KeyCode, OnEvent, WidgetProps,
+    render, rsx, widget, Event, EventType, Index, KayakContextRef, KeyCode, OnEvent,
 };
 use kayak_ui::widgets::{App, Text};
 
@@ -36,11 +36,9 @@ fn handle_input(context: &mut KayakContextRef, event: &mut Event) {
         _ => {}
     };
 }
-#[derive(WidgetProps, Default, Debug, PartialEq, Clone)]
-pub struct StateSwitcherProps;
 
 #[widget]
-fn StateSwitcher(props: StateSwitcherProps) {
+fn StateSwitcher() {
     rsx! {
         <Text content={"Press space to switch states!".to_string()} size={32.0} />
     }
diff --git a/examples/counter.rs b/examples/counter.rs
index 303de77da4e2aaa56dd365f66d18c15e095bcb8a..da41c1105208517b91074b895dd9d7e9cc8cd760 100644
--- a/examples/counter.rs
+++ b/examples/counter.rs
@@ -7,15 +7,12 @@ use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle
 use kayak_ui::core::{
     render, rsx,
     styles::{Style, StyleProp, Units},
-    use_state, widget, EventType, Index, OnEvent, WidgetProps,
+    use_state, widget, EventType, Index, OnEvent,
 };
 use kayak_ui::widgets::{App, Button, Text, Window};
 
-#[derive(WidgetProps, Default, Debug, PartialEq, Clone)]
-pub struct CounterProps {}
-
 #[widget]
-fn Counter(props: CounterProps) {
+fn Counter() {
     let text_styles = Style {
         bottom: StyleProp::Value(Units::Stretch(1.0)),
         left: StyleProp::Value(Units::Stretch(0.1)),
diff --git a/examples/fold.rs b/examples/fold.rs
index 4fce8f540c9e60df946995ff292212c5e5b0d574..1e0a1bee8d538b5b35bb25d991063ab2e086eb62 100644
--- a/examples/fold.rs
+++ b/examples/fold.rs
@@ -9,14 +9,11 @@ use kayak_ui::{
     core::{
         render, rsx,
         styles::{Style, StyleProp, Units},
-        use_state, widget, Color, EventType, Handler, Index, OnEvent, WidgetProps,
+        use_state, widget, Color, EventType, Handler, Index, OnEvent,
     },
     widgets::{App, Background, Button, Fold, If, Text, Window},
 };
 
-#[derive(WidgetProps, Clone, Debug, Default, PartialEq)]
-struct FolderTreeProps {}
-
 #[widget]
 fn FolderTree(props: FolderTreeProps) {
     let button_text_styles = Style {
diff --git a/examples/global_counter.rs b/examples/global_counter.rs
index 12f757ba0a554f38d948bad62d0c349f8fa3aa21..09b9cb028fc65953c931b9f7efecdde7986cd938 100644
--- a/examples/global_counter.rs
+++ b/examples/global_counter.rs
@@ -4,17 +4,14 @@ use bevy::{
     DefaultPlugins,
 };
 use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle};
-use kayak_ui::core::{bind, render, rsx, widget, Binding, Bound, Index, MutableBound, WidgetProps};
+use kayak_ui::core::{bind, render, rsx, widget, Binding, Bound, Index, MutableBound};
 use kayak_ui::widgets::{App, Text, Window};
 
 #[derive(Clone, PartialEq)]
 struct GlobalCount(pub u32);
 
-#[derive(WidgetProps, Clone, Debug, Default, PartialEq)]
-struct CounterProps {}
-
 #[widget]
-fn Counter(props: CounterProps) {
+fn Counter() {
     let global_count = context
         .query_world::<Res<Binding<GlobalCount>>, _, _>(move |global_count| global_count.clone());
 
diff --git a/examples/hooks.rs b/examples/hooks.rs
index 72b5fb49aef3a22a32705e75793d5a2d592f72b4..00e294aab7b3335669927cf2917ac37002f2d6a0 100644
--- a/examples/hooks.rs
+++ b/examples/hooks.rs
@@ -16,13 +16,10 @@ use bevy::{
 };
 use kayak_ui::{
     bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle},
-    core::{render, rsx, use_effect, use_state, widget, EventType, Index, OnEvent, WidgetProps},
+    core::{render, rsx, use_effect, use_state, widget, EventType, Index, OnEvent},
     widgets::{App, Button, Text, Window},
 };
 
-#[derive(WidgetProps, Clone, Debug, Default, PartialEq)]
-struct StateCounterProps {}
-
 /// A simple widget that tracks how many times a button is clicked using simple state data
 #[widget]
 fn StateCounter(props: StateCounterProps) {
@@ -56,12 +53,9 @@ fn StateCounter(props: StateCounterProps) {
     }
 }
 
-#[derive(WidgetProps, Clone, Debug, Default, PartialEq)]
-struct EffectCounterProps {}
-
 /// Another widget that tracks how many times a button is clicked using side-effects
 #[widget]
-fn EffectCounter(props: EffectCounterProps) {
+fn EffectCounter() {
     // In this widget, we're going to implement another counter, but this time using side-effects.
     // To put it very simply, a side-effect is when something happens in response to something else happening.
     // In our case, we want to create a side-effect that updates a counter when another state is updated.
diff --git a/examples/if.rs b/examples/if.rs
index b123b26ace252ecccedf57ecd418f644d811ad10..165bcfff341adbfc4aa18ca6fa83a5e28f10de7c 100644
--- a/examples/if.rs
+++ b/examples/if.rs
@@ -7,15 +7,12 @@ use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle
 use kayak_ui::core::{
     render, rsx,
     styles::{Style, StyleProp, Units},
-    widget, Bound, EventType, Index, MutableBound, OnEvent, WidgetProps,
+    widget, Bound, EventType, Index, MutableBound, OnEvent,
 };
 use kayak_ui::widgets::{App, Button, If, Text, Window};
 
-#[derive(WidgetProps, Clone, Debug, Default, PartialEq)]
-struct RemovalProps {}
-
 #[widget]
-fn Removal(props: RemovalProps) {
+fn Removal() {
     let text_styles = Style {
         bottom: StyleProp::Value(Units::Stretch(1.0)),
         left: StyleProp::Value(Units::Stretch(0.1)),
diff --git a/examples/provider.rs b/examples/provider.rs
index 97afd7c5c22ec025439a221a97cec6aa743cfb6b..6bbc0e7aaa13b7643c35190f1e634ae06691c2d7 100644
--- a/examples/provider.rs
+++ b/examples/provider.rs
@@ -138,14 +138,11 @@ fn ThemeButton(props: ThemeButtonProps) {
     }
 }
 
-#[derive(WidgetProps, Clone, Debug, Default, PartialEq)]
-struct ThemeSelectorProps {}
-
 /// A widget displaying a set of [ThemeButton] widgets
 ///
 /// This is just an abstracted container. Not much to see here...
 #[widget]
-fn ThemeSelector(props: ThemeSelectorProps) {
+fn ThemeSelector() {
     let vampire_theme = Theme::vampire();
     let solar_theme = Theme::solar();
     let vector_theme = Theme::vector();
diff --git a/examples/tabs/tabs.rs b/examples/tabs/tabs.rs
index 7fd216c9dd0711c22b46da1e4fbb02f410fa4d40..fdf67e49d48d00ec4e48ce8a7bb69c75deab5d7e 100644
--- a/examples/tabs/tabs.rs
+++ b/examples/tabs/tabs.rs
@@ -15,7 +15,7 @@ use kayak_ui::{
     core::{
         constructor, render, rsx,
         styles::{Style, StyleProp, Units},
-        widget, Color, Index, WidgetProps,
+        widget, Color, Index,
     },
     widgets::{App, Text, Window},
 };
@@ -30,11 +30,8 @@ mod tab_box;
 mod tab_content;
 mod theming;
 
-#[derive(WidgetProps, Default, Debug, PartialEq, Clone)]
-pub struct TabDemoProps {}
-
 #[widget]
-fn TabDemo(props: TabDemoProps) {
+fn TabDemo() {
     let text_style = Style {
         width: StyleProp::Value(Units::Percentage(75.0)),
         top: StyleProp::Value(Units::Stretch(0.5)),
diff --git a/examples/text_box.rs b/examples/text_box.rs
index c98a8a426063e3b9b90884d60e6c237fba694eea..bb74ca48a564b35f280fb974168d56092b22306c 100644
--- a/examples/text_box.rs
+++ b/examples/text_box.rs
@@ -9,15 +9,12 @@ use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle
 use kayak_ui::core::{
     render, rsx,
     styles::{Style, StyleProp, Units},
-    widget, Index, WidgetProps,
+    widget, Index,
 };
 use kayak_ui::widgets::{App, OnChange, TextBox, Window};
 
-#[derive(WidgetProps, Clone, Debug, Default, PartialEq)]
-struct TextBoxExampleProps {}
-
 #[widget]
-fn TextBoxExample(props: TextBoxExampleProps) {
+fn TextBoxExample() {
     let (value, set_value, _) = use_state!("I started with a value!".to_string());
     let (empty_value, set_empty_value, _) = use_state!("".to_string());
     let (red_value, set_red_value, _) = use_state!("This text is red".to_string());
diff --git a/examples/todo/todo.rs b/examples/todo/todo.rs
index 10ee013d744fd03d1ed0a33efbdce7887cd6443f..fea3f1e36eebc6f3be6151a5302f6a39b963ccab 100644
--- a/examples/todo/todo.rs
+++ b/examples/todo/todo.rs
@@ -7,7 +7,7 @@ use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle
 use kayak_ui::core::{
     render, rsx,
     styles::{LayoutType, Style, StyleProp, Units},
-    use_state, widget, EventType, Handler, Index, OnEvent, WidgetProps,
+    use_state, widget, EventType, Handler, Index, OnEvent,
 };
 use kayak_ui::widgets::{App, Element, OnChange, TextBox, Window};
 
@@ -23,11 +23,8 @@ pub struct Todo {
     name: String,
 }
 
-#[derive(WidgetProps, Clone, Debug, Default, PartialEq)]
-struct TodoAppProps {}
-
 #[widget]
-fn TodoApp(props: TodoAppProps) {
+fn TodoApp() {
     let (todos, set_todos, ..) = use_state!(vec![
         Todo {
             name: "Use bevy to make a game!".to_string(),
diff --git a/examples/windows.rs b/examples/windows.rs
index ca2520486b7e60a63cf598e2576e0117af1d3f8d..331152a21a3c07a505ca4fb3fd444639448da49b 100644
--- a/examples/windows.rs
+++ b/examples/windows.rs
@@ -5,15 +5,11 @@ use bevy::{
 };
 use kayak_ui::bevy::{BevyContext, BevyKayakUIPlugin, FontMapping, UICameraBundle};
 use kayak_ui::core::Index;
-use kayak_ui::core::WidgetProps;
 use kayak_ui::core::{render, rsx, widget};
 use kayak_ui::widgets::{App, Inspector, Window};
 
-#[derive(WidgetProps, Default, Debug, PartialEq, Clone)]
-pub struct Props {}
-
 #[widget]
-fn CustomWidget(props: Props) {
+fn CustomWidget() {
     rsx! {
         <>
             <Window draggable={true} position={(50.0, 50.0)} size={(300.0, 300.0)} title={"Window 1".to_string()}>
diff --git a/examples/world_interaction.rs b/examples/world_interaction.rs
index 44a1f1408ca0137b4fc74da2cd9c1c96e3b9e26c..d1d3992ba870172ff4c5076ae4b3fa1b9f64570b 100644
--- a/examples/world_interaction.rs
+++ b/examples/world_interaction.rs
@@ -20,7 +20,7 @@ use kayak_ui::{
     core::{
         render, rsx,
         styles::{Style, StyleProp, Units},
-        use_state, widget, EventType, Index, OnEvent, WidgetProps,
+        use_state, widget, EventType, Index, OnEvent,
     },
     widgets::{App, Button, Text, Window},
 };
@@ -65,11 +65,8 @@ fn set_active_tile_target(
     tile.target = tile_pos;
 }
 
-#[derive(WidgetProps, Default, Debug, PartialEq, Clone)]
-pub struct ControlPanelProps {}
-
 #[widget]
-fn ControlPanel(props: ControlPanelProps) {
+fn ControlPanel() {
     let text_styles = Style {
         left: StyleProp::Value(Units::Stretch(1.0)),
         right: StyleProp::Value(Units::Stretch(1.0)),