> For the complete documentation index, see [llms.txt](https://corex-zombies.gitbook.io/corex-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://corex-zombies.gitbook.io/corex-docs/build/first-resource.md).

# Build your first resource

This tutorial creates `/corex_hello`. It reads the player's name and displays a notification. It does not grant money or items, so running it repeatedly cannot create rewards.

## 1. Create the files <a href="#id-1-create-the-files" id="id-1-create-the-files"></a>

Create `resources/[local]/corex-hello/` with these two files. Keep the resource folder name exactly `corex-hello`.

**fxmanifest.lua**

```lua
fx_version 'cerulean'
game 'gta5'

dependency 'corex-core'
server_script 'server.lua'
```

**server.lua**

```lua
RegisterCommand('corex_hello', function(src)
    if src == 0 then
        print('[corex-hello] Join the server, then run /corex_hello in chat.')
        return
    end

    local player = exports['corex-core']:GetPlayer(src)
    if not player then return end
    TriggerClientEvent('corex:notify', src,
        ('Hello, %s. CoreX player data is ready.'):format(player.name),
        'info', 4000)
end, false)
```

## 2. Start it after CoreX <a href="#id-2-start-it-after-corex" id="id-2-start-it-after-corex"></a>

Add this after your CoreX startup section:

```cfg
ensure corex-hello
```

For a newly added folder on an already-running development server, run `refresh` and then `ensure corex-hello` in the server console. Have `corex-notify` started for the normal notification UI.

## 3. Try it <a href="#id-3-try-it" id="id-3-try-it"></a>

Join, finish character loading and enter `/corex_hello` in chat. Expect a greeting containing the character's CoreX name. Running `corex_hello` in the server console prints the join instruction instead.

If nothing appears, check the first server/F8 error, the resource folder, the notification resource and whether the player is loaded. `GetPlayer` can legitimately return `nil` before loading completes.

This exact two-file example is included in the documentation examples and its server handler is tested with a simulated CoreX export boundary. The visible notification still requires a connected client to verify.

Next: [Player data and lifecycle](/corex-docs/build/players.md) or [add an existing resource](/corex-docs/start-here/add-a-resource.md).
