# Bevy Data Resources

Place Bevy 0.20 gameplay data on a Component or a Resource.

- Repository: https://github.com/thedivergentai/Game-Dev-Agentic-Skills (917 stars)
- Category: Engineering
- License: LGPL-3.0
- Last updated: 2026-10-16
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add thedivergentai/Game-Dev-Agentic-Skills --skill bevy-data-resources -g -a claude-code -y`
Codex: `npx skills add thedivergentai/Game-Dev-Agentic-Skills --skill bevy-data-resources -g -a codex -y`
Cursor: `npx skills add thedivergentai/Game-Dev-Agentic-Skills --skill bevy-data-resources -g -a cursor -y`
Gemini CLI: `npx skills add thedivergentai/Game-Dev-Agentic-Skills --skill bevy-data-resources -g -a gemini-cli -y`

## Description

Place Bevy 0.20 gameplay data on a Component or a Resource. Use when choosing Query versus Res/ResMut, insert_resource, Time and Timer, or a RON/asset handle stored once for the app. Keywords: Bevy, Resource, Res, ResMut, Component, Timer, AssetServer.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Bevy data resources

## When to use

Load this when you are deciding where a piece of data lives: on many entities, or once for the whole app. The Resources page and the ECS page are the source for the names below.

## ECS shape

- **Components** are for data you query across entities (`Component`, `Query`). Use them when many things carry the same kind of fields.
- **Resources** are globally unique data (`Resource`). The Resources page names elapsed time, asset collections, and renderers as examples. Access them with `Res<T>` (read) and `ResMut<T>` (write).
- **Insert.** `insert_resource` places a resource on the `App`. The page's sample derives `Resource` on `GreetTimer(Timer)` and inserts `Timer::from_seconds(2.0, TimerMode::Repeating)`.
- **Time.** `Time` is inserted by `add_plugins(DefaultPlugins)`. `time.delta()` is the elapsed time since the last update. `Timer::tick` and `just_finished` are the page's timer methods.
- **Schedule:** The sample reads `Res<Time>` and `ResMut<GreetTimer>` inside an `Update` system. Startup versus update is on the ECS page.

A resource can hold asset handles loaded through `AssetServer`. The handles are data; the loader stays on the asset server.

## Where data lives

| Need | Bevy idiom |
| --- | --- |
| Data on one gameplay thing | A `Component` |
| One copy for the whole app | A `Resource` inserted with `insert_resource` |
| Shared clock | `Time` from `DefaultPlugins`, or your own `Resource` |
| Authored data file | `serde` plus `ron::from_str` into a `Resource`, or `Handle<Mesh>` from `AssetServer` |

## Scope

- Handles, RON tables, and plugin `insert_resource` calls are in the examples below.
- Per-entity data files and save blobs are out of scope. See bevy-save-load.

```toml
[package]
name = "data-resources"
version = "0.1.0"
edition = "2021"

[dependencies]
bevy = "0.20"
serde = { version = "1", features = ["derive"] }
ron = "0.10"
```

One greet timer resource, ticked from `Time` on `Update`.

The rest: https://github.com/thedivergentai/Game-Dev-Agentic-Skills/blob/HEAD/skills/bevy-data-resources/SKILL.md
