diff --git a/examples/every_option.rs b/examples/every_option.rs
index 1e1d6aa4e1428ba2673cf560e7322cb6b12b0a23..c64e133a1d8debda4edb13a9a155e71887a29d11 100644
--- a/examples/every_option.rs
+++ b/examples/every_option.rs
@@ -18,14 +18,14 @@ fn setup(mut commands: Commands, mut font_system: ResMut<CosmicFontSystem>) {
             ),
             cursor_color: CursorColor(Color::GREEN),
             selection_color: SelectionColor(Color::PINK),
-            fill_color: FillColor(Color::YELLOW_GREEN),
+            fill_color: CosmicBackgroundColor(Color::YELLOW_GREEN),
             x_offset: XOffset::default(),
-            text_position: CosmicTextPosition::default(),
-            background_image: CosmicBackground::default(),
+            text_position: CosmicTextAlign::default(),
+            background_image: CosmicBackgroundImage::default(),
             default_attrs: DefaultAttrs(AttrsOwned::new(attrs)),
-            max_chars: CosmicMaxChars(15),
-            max_lines: CosmicMaxLines(1),
-            mode: CosmicMode::Wrap,
+            max_chars: MaxChars(15),
+            max_lines: MaxLines(1),
+            mode: CosmicWrap::Wrap,
             // CosmicEdit draws to this spritebundle
             sprite_bundle: SpriteBundle {
                 sprite: Sprite {
diff --git a/examples/image_background.rs b/examples/image_background.rs
index 48152788956371873d2c1501b42c343e26ce9259..c80bc8f29e294e970d3f6f688ec4fe8d1ab1cf57 100644
--- a/examples/image_background.rs
+++ b/examples/image_background.rs
@@ -11,7 +11,7 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
             default_attrs: DefaultAttrs(AttrsOwned::new(
                 Attrs::new().color(bevy_color_to_cosmic(Color::GREEN)),
             )),
-            background_image: CosmicBackground(Some(bg_image_handle)),
+            background_image: CosmicBackgroundImage(Some(bg_image_handle)),
             ..default()
         })
         .id();
diff --git a/examples/multiple_sprites.rs b/examples/multiple_sprites.rs
index e5cdb5098ff9937382ec04625e808f01f10c0eb3..2bca069215945b0bd56b129c129e53c67a54f216 100644
--- a/examples/multiple_sprites.rs
+++ b/examples/multiple_sprites.rs
@@ -21,7 +21,7 @@ fn setup(
     attrs = attrs.color(bevy_color_to_cosmic(Color::PURPLE));
 
     commands.spawn(CosmicEditBundle {
-        fill_color: FillColor(Color::ALICE_BLUE),
+        fill_color: CosmicBackgroundColor(Color::ALICE_BLUE),
         buffer: CosmicBuffer::new(&mut font_system, Metrics::new(14., 18.)).with_text(
             &mut font_system,
             "馃榾馃榾馃榾 x => y",
@@ -42,7 +42,7 @@ fn setup(
     });
 
     commands.spawn(CosmicEditBundle {
-        fill_color: FillColor(Color::GRAY.with_a(0.5)),
+        fill_color: CosmicBackgroundColor(Color::GRAY.with_a(0.5)),
         buffer: CosmicBuffer::new(&mut font_system, Metrics::new(14., 18.)).with_text(
             &mut font_system,
             "Widget_2. Click on me",
diff --git a/examples/password.rs b/examples/password.rs
index 4314c464ae098b9d823f36738c6f139f95b5a2a8..75bfac024f3cd96cd5f746e1ef203c6c817d0e1c 100644
--- a/examples/password.rs
+++ b/examples/password.rs
@@ -7,8 +7,8 @@ fn setup(mut commands: Commands) {
     // Sprite editor
     commands.spawn((
         CosmicEditBundle {
-            max_lines: CosmicMaxLines(1),
-            mode: CosmicMode::InfiniteLine,
+            max_lines: MaxLines(1),
+            mode: CosmicWrap::InfiniteLine,
             sprite_bundle: SpriteBundle {
                 // Sets size of text box
                 sprite: Sprite {
diff --git a/examples/sprite_and_ui_clickable.rs b/examples/sprite_and_ui_clickable.rs
index 68d87e407c25fc7b6ec89f4d8ddd7ee5871da6be..1d1325387c93402057a03a7a327e3198cc47b594 100644
--- a/examples/sprite_and_ui_clickable.rs
+++ b/examples/sprite_and_ui_clickable.rs
@@ -10,9 +10,9 @@ fn setup(mut commands: Commands) {
             default_attrs: DefaultAttrs(AttrsOwned::new(
                 Attrs::new().color(bevy_color_to_cosmic(Color::GREEN)),
             )),
-            max_lines: CosmicMaxLines(1),
-            mode: CosmicMode::InfiniteLine,
-            text_position: CosmicTextPosition::Left { padding: 5 },
+            max_lines: MaxLines(1),
+            mode: CosmicWrap::InfiniteLine,
+            text_position: CosmicTextAlign::Left { padding: 5 },
             ..default()
         })
         .id();
@@ -33,8 +33,8 @@ fn setup(mut commands: Commands) {
 
     // Sprite editor
     commands.spawn((CosmicEditBundle {
-        max_lines: CosmicMaxLines(1),
-        mode: CosmicMode::InfiniteLine,
+        max_lines: MaxLines(1),
+        mode: CosmicWrap::InfiniteLine,
         sprite_bundle: SpriteBundle {
             // Sets size of text box
             sprite: Sprite {
diff --git a/src/buffer.rs b/src/buffer.rs
index 422c6050d047575da35068474728f86916350c7a..e38326d4dade2b481797d04e006f5951838b1b59 100644
--- a/src/buffer.rs
+++ b/src/buffer.rs
@@ -1,6 +1,7 @@
 use crate::*;
 use bevy::{prelude::*, window::PrimaryWindow};
 
+/// Set of all buffer setup functions. Runs in `First`
 #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
 pub struct BufferSet;
 
@@ -62,11 +63,13 @@ impl Default for CosmicBuffer {
 }
 
 impl<'s, 'r> CosmicBuffer {
+    /// Create a new buffer with a font system
     pub fn new(font_system: &mut FontSystem, metrics: Metrics) -> Self {
         Self(Buffer::new(font_system, metrics))
     }
 
     // Das a lotta boilerplate just to hide the shaping argument
+    /// Add text to a newly created `CosmicBuffer`
     pub fn with_text(
         mut self,
         font_system: &mut FontSystem,
@@ -77,6 +80,9 @@ impl<'s, 'r> CosmicBuffer {
         self
     }
 
+    /// Add rich text to a newly created `CosmicBuffer`
+    ///
+    /// Rich text is an iterable of `(&'s str, Attrs<'r>)
     pub fn with_rich_text<I>(
         mut self,
         font_system: &mut FontSystem,
@@ -91,6 +97,7 @@ impl<'s, 'r> CosmicBuffer {
         self
     }
 
+    /// Replace buffer text
     pub fn set_text(
         &mut self,
         font_system: &mut FontSystem,
@@ -102,6 +109,9 @@ impl<'s, 'r> CosmicBuffer {
         self
     }
 
+    /// Replace buffer text with rich text
+    ///
+    /// Rich text is an iterable of `(&'s str, Attrs<'r>)
     pub fn set_rich_text<I>(
         &mut self,
         font_system: &mut FontSystem,
@@ -158,6 +168,7 @@ impl<'s, 'r> CosmicBuffer {
     }
 }
 
+/// Adds a `FontSystem` to a newly created `CosmicBuffer` if one was not provided
 pub fn add_font_system(
     mut font_system: ResMut<CosmicFontSystem>,
     mut q: Query<&mut CosmicBuffer, Added<CosmicBuffer>>,
@@ -171,6 +182,7 @@ pub fn add_font_system(
     }
 }
 
+/// Initialises `CosmicBuffer` scale factor
 pub fn set_initial_scale(
     window_q: Query<&Window, With<PrimaryWindow>>,
     mut cosmic_query: Query<&mut CosmicBuffer, Added<CosmicBuffer>>,
@@ -184,19 +196,22 @@ pub fn set_initial_scale(
     }
 }
 
+/// Initialises new `CosmicBuffer` redraw flag to true
 pub fn set_redraw(mut q: Query<&mut CosmicBuffer, Added<CosmicBuffer>>) {
     for mut b in q.iter_mut() {
         b.set_redraw(true);
     }
 }
 
+/// Initialises new `CosmicEditor` redraw flag to true
 pub fn set_editor_redraw(mut q: Query<&mut CosmicEditor, Added<CosmicEditor>>) {
     for mut b in q.iter_mut() {
         b.set_redraw(true);
     }
 }
 
-pub(crate) fn swap_target_handle(
+/// Sets image of UI elements to the `CosmicBuffer` output
+pub fn swap_target_handle(
     source_q: Query<&Handle<Image>, With<CosmicBuffer>>,
     mut dest_q: Query<
         (
diff --git a/src/cosmic_edit.rs b/src/cosmic_edit.rs
index ab13543341355ba1e778e7277f7509e68be6a6d1..3b8a085b069e9a37bbb0e511fa9b532be9e36227 100644
--- a/src/cosmic_edit.rs
+++ b/src/cosmic_edit.rs
@@ -1,36 +1,41 @@
 use crate::*;
 use bevy::prelude::*;
 
+/// Enum representing text wrapping in a cosmic `Buffer`
 #[derive(Clone, Component, PartialEq, Default)]
-pub enum CosmicMode {
+pub enum CosmicWrap {
     InfiniteLine,
     #[default]
     Wrap,
 }
 
-/// Enum representing the position of the cosmic text.
+/// Enum representing the text alignment in a cosmic `Buffer`
 #[derive(Clone, Component)]
-pub enum CosmicTextPosition {
+pub enum CosmicTextAlign {
     Center { padding: i32 },
     TopLeft { padding: i32 },
     Left { padding: i32 },
 }
 
-impl Default for CosmicTextPosition {
+impl Default for CosmicTextAlign {
     fn default() -> Self {
-        CosmicTextPosition::Center { padding: 5 }
+        CosmicTextAlign::Center { padding: 5 }
     }
 }
 
+/// Tag component to disable writing to a `CosmicBuffer`
+// TODO: Code example
 #[derive(Component)]
 pub struct ReadOnly; // tag component
 
+/// Internal value used to decide what section of a `Buffer` to render
 #[derive(Component, Debug, Default)]
 pub struct XOffset {
     pub left: f32,
     pub width: f32,
 }
 
+/// Default text attributes to be used on a `CosmicBuffer`
 #[derive(Component, Deref, DerefMut)]
 pub struct DefaultAttrs(pub AttrsOwned);
 
@@ -40,45 +45,70 @@ impl Default for DefaultAttrs {
     }
 }
 
+/// Image to be used as a buffer's background
 #[derive(Component, Default)]
-pub struct CosmicBackground(pub Option<Handle<Image>>);
+pub struct CosmicBackgroundImage(pub Option<Handle<Image>>);
 
+/// Color to be used as a buffer's background
 #[derive(Component, Default, Deref)]
-pub struct FillColor(pub Color);
+pub struct CosmicBackgroundColor(pub Color);
 
+/// Color to be used for the text cursor
 #[derive(Component, Default, Deref)]
 pub struct CursorColor(pub Color);
 
+/// Color to be used as the selected text background
 #[derive(Component, Default, Deref)]
 pub struct SelectionColor(pub Color);
 
+/// Maximum number of lines allowed in a buffer
 #[derive(Component, Default)]
-pub struct CosmicMaxLines(pub usize);
+pub struct MaxLines(pub usize);
 
+/// Maximum number of characters allowed in a buffer
+// TODO: Check this functionality with widechars; Use graphemes to test?
 #[derive(Component, Default)]
-pub struct CosmicMaxChars(pub usize);
+pub struct MaxChars(pub usize);
 
+/// A pointer to an entity with a `CosmicEditBundle`, used to apply cosmic rendering to a UI
+/// element.
+///
+/// TODO code example
+///
 #[derive(Component)]
 pub struct CosmicSource(pub Entity);
 
+/// A bundle containing all the required components for `CosmicBuffer` functionality.
+///
+/// Uses an invisible `SpriteBundle` for rendering by default, so should either be paired with another
+/// entity with a `CosmicSource` pointing to it's entity, or have the sprite set.
+///
+/// ### UI mode
+///
+/// TODO code example
+///
+/// ### Sprite mode
+///
+/// TODO code example
+///
 #[derive(Bundle)]
 pub struct CosmicEditBundle {
     // cosmic bits
     pub buffer: CosmicBuffer,
     // render bits
-    pub fill_color: FillColor,
+    pub fill_color: CosmicBackgroundColor,
     pub cursor_color: CursorColor,
     pub selection_color: SelectionColor,
     pub default_attrs: DefaultAttrs,
-    pub background_image: CosmicBackground,
+    pub background_image: CosmicBackgroundImage,
     pub sprite_bundle: SpriteBundle,
     // restriction bits
-    pub max_lines: CosmicMaxLines,
-    pub max_chars: CosmicMaxChars,
+    pub max_lines: MaxLines,
+    pub max_chars: MaxChars,
     // layout bits
     pub x_offset: XOffset,
-    pub mode: CosmicMode,
-    pub text_position: CosmicTextPosition,
+    pub mode: CosmicWrap,
+    pub text_position: CosmicTextAlign,
     pub padding: CosmicPadding,
     pub widget_size: CosmicWidgetSize,
 }
@@ -111,9 +141,11 @@ impl Default for CosmicEditBundle {
     }
 }
 
+/// Holds the font system used internally by `cosmic_text`
 #[derive(Resource, Deref, DerefMut)]
 pub struct CosmicFontSystem(pub FontSystem);
 
+/// Wrapper component for an `Editor` with a few helpful values for cursor blinking
 #[derive(Component, Deref, DerefMut)]
 pub struct CosmicEditor {
     #[deref]
diff --git a/src/events.rs b/src/events.rs
index 57aa2008ee256b13ccd5312dd1f337b206dfe296..90ee52b8a5fdce526d9e62409b43bcd25ec8946e 100644
--- a/src/events.rs
+++ b/src/events.rs
@@ -2,6 +2,7 @@
 
 use bevy::prelude::*;
 
+/// Registers internal events
 pub struct EventsPlugin;
 
 impl Plugin for EventsPlugin {
@@ -10,5 +11,8 @@ impl Plugin for EventsPlugin {
     }
 }
 
+/// Text change events
+/// Sent when text is changed in a cosmic buffer
+/// Contains the entity on which the text was changed, and the new text as a `String`
 #[derive(Event, Debug)]
 pub struct CosmicTextChanged(pub (Entity, String));
diff --git a/src/focus.rs b/src/focus.rs
index 4f8d5f85347070a6a49b352f7cb984d33c84eb1e..615d2691d5b708be8b7db3278a60fb7ff6cdf4fc 100644
--- a/src/focus.rs
+++ b/src/focus.rs
@@ -2,6 +2,7 @@ use crate::*;
 use bevy::prelude::*;
 use cosmic_text::{Edit, Editor};
 
+/// System set for focus systems. Runs in `PostUpdate`
 #[derive(SystemSet, Debug, Clone, PartialEq, Eq, Hash)]
 pub struct FocusSet;
 
diff --git a/src/input.rs b/src/input.rs
index 6e7ad8f7307c24b65190af510f2b97e74722be9a..d1a738e9efcd41d4304a56379d66475592c9437d 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -61,7 +61,7 @@ pub(crate) fn input_mouse(
     mut editor_q: Query<(
         &mut CosmicEditor,
         &GlobalTransform,
-        &CosmicTextPosition,
+        &CosmicTextAlign,
         Entity,
         &XOffset,
         &mut Sprite,
@@ -134,12 +134,12 @@ pub(crate) fn input_mouse(
         }
 
         let (padding_x, padding_y) = match text_position {
-            CosmicTextPosition::Center { padding: _ } => (
+            CosmicTextAlign::Center { padding: _ } => (
                 get_x_offset_center(width * scale_factor, &buffer),
                 get_y_offset_center(height * scale_factor, &buffer),
             ),
-            CosmicTextPosition::TopLeft { padding } => (*padding, *padding),
-            CosmicTextPosition::Left { padding } => (
+            CosmicTextAlign::TopLeft { padding } => (*padding, *padding),
+            CosmicTextAlign::Left { padding } => (
                 *padding,
                 get_y_offset_center(height * scale_factor, &buffer),
             ),
@@ -392,8 +392,8 @@ pub(crate) fn kb_input_text(
     mut cosmic_edit_query: Query<(
         &mut CosmicEditor,
         &mut CosmicBuffer,
-        &CosmicMaxLines,
-        &CosmicMaxChars,
+        &MaxLines,
+        &MaxChars,
         Entity,
         Option<&ReadOnly>,
     )>,
@@ -501,8 +501,8 @@ pub fn kb_clipboard(
     mut cosmic_edit_query: Query<(
         &mut CosmicEditor,
         &mut CosmicBuffer,
-        &CosmicMaxLines,
-        &CosmicMaxChars,
+        &MaxLines,
+        &MaxChars,
         Entity,
         Option<&ReadOnly>,
     )>,
@@ -650,8 +650,8 @@ pub fn poll_wasm_paste(
             &mut CosmicEditor,
             &mut CosmicBuffer,
             &crate::DefaultAttrs,
-            &CosmicMaxChars,
-            &CosmicMaxChars,
+            &MaxChars,
+            &MaxChars,
         ),
         Without<ReadOnly>,
     >,
diff --git a/src/render.rs b/src/render.rs
index ef9d04d729f65caa90e34c754ae3a8637358200f..e9b9b64f6134497d64be71ea31abec54def054e1 100644
--- a/src/render.rs
+++ b/src/render.rs
@@ -81,8 +81,8 @@ fn render_texture(
         Option<&mut CosmicEditor>,
         &mut CosmicBuffer,
         &DefaultAttrs,
-        &CosmicBackground,
-        &FillColor,
+        &CosmicBackgroundImage,
+        &CosmicBackgroundColor,
         &CursorColor,
         &SelectionColor,
         &Handle<Image>,
@@ -90,7 +90,7 @@ fn render_texture(
         &CosmicPadding,
         &XOffset,
         Option<&ReadOnly>,
-        &CosmicTextPosition,
+        &CosmicTextAlign,
     )>,
     mut font_system: ResMut<CosmicFontSystem>,
     mut images: ResMut<Assets<Image>>,
@@ -149,9 +149,9 @@ fn render_texture(
             .unwrap_or(cosmic_text::Color::rgb(0, 0, 0));
 
         let min_pad = match position {
-            CosmicTextPosition::Center { padding } => *padding as f32,
-            CosmicTextPosition::TopLeft { padding } => *padding as f32,
-            CosmicTextPosition::Left { padding } => *padding as f32,
+            CosmicTextAlign::Center { padding } => *padding as f32,
+            CosmicTextAlign::TopLeft { padding } => *padding as f32,
+            CosmicTextAlign::Left { padding } => *padding as f32,
         };
 
         let draw_closure = |x, y, w, h, color| {
diff --git a/src/widget.rs b/src/widget.rs
index e79ac22f3ff7a01b9bc923592dfcf25899b1b400..3ef917af31d906c569620f4232d40c25038f5603 100644
--- a/src/widget.rs
+++ b/src/widget.rs
@@ -42,14 +42,14 @@ pub fn set_padding(
     mut query: Query<
         (
             &mut CosmicPadding,
-            &CosmicTextPosition,
+            &CosmicTextAlign,
             &CosmicBuffer,
             &CosmicWidgetSize,
             Option<&CosmicEditor>,
         ),
         Or<(
             With<CosmicEditor>,
-            Changed<CosmicTextPosition>,
+            Changed<CosmicTextAlign>,
             Changed<CosmicBuffer>,
             Changed<CosmicWidgetSize>,
         )>,
@@ -68,12 +68,12 @@ pub fn set_padding(
         }
 
         padding.0 = match position {
-            CosmicTextPosition::Center { padding: _ } => Vec2::new(
+            CosmicTextAlign::Center { padding: _ } => Vec2::new(
                 get_x_offset_center(size.0.x, &buffer) as f32,
                 get_y_offset_center(size.0.y, &buffer) as f32,
             ),
-            CosmicTextPosition::TopLeft { padding } => Vec2::new(*padding as f32, *padding as f32),
-            CosmicTextPosition::Left { padding } => Vec2::new(
+            CosmicTextAlign::TopLeft { padding } => Vec2::new(*padding as f32, *padding as f32),
+            CosmicTextAlign::Left { padding } => Vec2::new(
                 *padding as f32,
                 get_y_offset_center(size.0.y, &buffer) as f32,
             ),
@@ -99,28 +99,28 @@ pub fn set_buffer_size(
     mut query: Query<
         (
             &mut CosmicBuffer,
-            &CosmicMode,
+            &CosmicWrap,
             &CosmicWidgetSize,
-            &CosmicTextPosition,
+            &CosmicTextAlign,
         ),
         Or<(
-            Changed<CosmicMode>,
+            Changed<CosmicWrap>,
             Changed<CosmicWidgetSize>,
-            Changed<CosmicTextPosition>,
+            Changed<CosmicTextAlign>,
         )>,
     >,
     mut font_system: ResMut<CosmicFontSystem>,
 ) {
     for (mut buffer, mode, size, position) in query.iter_mut() {
         let padding_x = match position {
-            CosmicTextPosition::Center { padding: _ } => 0.,
-            CosmicTextPosition::TopLeft { padding } => *padding as f32,
-            CosmicTextPosition::Left { padding } => *padding as f32,
+            CosmicTextAlign::Center { padding: _ } => 0.,
+            CosmicTextAlign::TopLeft { padding } => *padding as f32,
+            CosmicTextAlign::Left { padding } => *padding as f32,
         };
 
         let (buffer_width, buffer_height) = match mode {
-            CosmicMode::InfiniteLine => (f32::MAX, size.0.y),
-            CosmicMode::Wrap => (size.0.x - padding_x, size.0.y),
+            CosmicWrap::InfiniteLine => (f32::MAX, size.0.y),
+            CosmicWrap::Wrap => (size.0.x - padding_x, size.0.y),
         };
 
         buffer.set_size(&mut font_system.0, buffer_width, buffer_height);
@@ -139,14 +139,14 @@ pub fn new_image_from_default(
 pub fn set_x_offset(
     mut query: Query<(
         &mut XOffset,
-        &CosmicMode,
+        &CosmicWrap,
         &CosmicEditor,
         &CosmicWidgetSize,
-        &CosmicTextPosition,
+        &CosmicTextAlign,
     )>,
 ) {
     for (mut x_offset, mode, editor, size, position) in query.iter_mut() {
-        if mode != &CosmicMode::InfiniteLine {
+        if mode != &CosmicWrap::InfiniteLine {
             return;
         }
 
@@ -170,9 +170,9 @@ pub fn set_x_offset(
         }
 
         let padding_x = match position {
-            CosmicTextPosition::Center { padding } => *padding as f32,
-            CosmicTextPosition::TopLeft { padding } => *padding as f32,
-            CosmicTextPosition::Left { padding } => *padding as f32,
+            CosmicTextAlign::Center { padding } => *padding as f32,
+            CosmicTextAlign::TopLeft { padding } => *padding as f32,
+            CosmicTextAlign::Left { padding } => *padding as f32,
         };
 
         if x_offset.width == 0. {