Obsi Inventory adds a few fields to item definitions: rarity, throwing, unique serials, mini stashes, backpacks, clothing, armour plates and weapon tints.
This page lists them all, plus how rarity drives item discovery.

## Item fields

Add the fields in `data/items.lua`, or set them on the admin **Items** page.

```lua title="data/items.lua"
['water'] = {
    label = 'Water', weight = 500,
    rarity = 'common',              -- common / uncommon / rare / epic / legendary / mythic
    throwable = true,               -- can be thrown, the weight decides the distance
    prop = 'prop_ld_flow_bottle',   -- world prop for throws and drops
    unique = true,                  -- never stacks, gets a serial number
},
['toolbox'] = {
    label = 'Toolbox', weight = 1500,
    isStash = { slots = 6, maxWeight = 8000, whitelist = { 'screwdriver', 'wrench' } },
},
['plate_heavy'] = { label = 'Heavy plate', weight = 3000, plate = { armor = 100 } },
['tint_1'] = { label = 'Green tint', weight = 50, tint = 1 },
```

| Field | Type | Meaning |
| --- | --- | --- |
| `rarity` | string | Rarity name. `metadata.rarity` overrides it per item |
| `throwable` | boolean | `false` means the item can never be thrown |
| `prop` | string | World prop used for throws and drops |
| `unique` | boolean | Never stacks; each item gets `metadata.serial` |
| `isStash` | table | Makes the item a mini stash: `slots`, `maxWeight`, optional `whitelist` |
| `backpack` | table | Worn in the bag slot: `slots`, `weight`. See [Slots and backpacks](/inventory/features/slots-and-backpacks) |
| `clothing` | table | A wearable piece. See [Clothing](/inventory/features/clothing) |
| `plate` | table | An armour plate: `armor` points |
| `tint` | number | A weapon tint item (tint index) |
| `hanger` | boolean | An outfit hanger |

## Rarity

Every slot carries a coloured stripe for the item's rarity, and the tooltip shows a matching chip.

| Rarity | Colour | Discovery time |
| --- | --- | --- |
| Common | `#8B9096` | 0 s |
| Uncommon | `#5FB878` | 2 s |
| Rare | `#4F8FD8` | 4 s |
| Epic | `#A273D6` | 6 s |
| Legendary | `#F2A541` | 8 s |
| Mythic | `#E05A4F` | 10 s |

The defaults live in `data/obsi/rarity.lua`.
Names, colours and times can be changed on the admin **Edit Rarity** page; those edits are stored in the database and replace the file values.

:::frame{caption="Edit Rarity: colour, discovery time and a live preview"}
![Edit rarity](/media/inventory/admin-rarity.webp)
:::

## Item discovery

Items in someone else's inventory are hidden until you have searched long enough.
Each item reveals itself after its rarity's discovery time, with a countdown on the slot.

:::frame{caption="An evidence locker while two items are still being searched"}
![Item discovery](/media/inventory/discovery.webp)
:::

| Setting in `discovery` (`data/obsi/interact.lua`) | Default | Meaning |
| --- | --- | --- |
| `types` | `player, drop, stash, trunk, glovebox` | Inventory types that hide their items |
| `skipOwned` | `true` | Your own personal stashes are never hidden |
| `memory` | `600` | Seconds the server remembers what a player already revealed |

## Mini stashes

An item with `isStash` opens as a small container in the right column.
Hover it to see what is inside and take items out straight from the tooltip.

## Armour plates

The `armor_vest` item (and any item worn as clothing component 9) is a plate carrier.
Drag up to **3** plates into it from the context menu:

| Plate | Armour |
| --- | --- |
| `plate_light` | 25 |
| `plate_medium` | 50 |
| `plate_heavy` | 100 |

A plate keeps its remaining armour in `metadata.armor`, and the vest keeps its plates in `metadata.plates`, so a damaged plate stays damaged when you take it out.

## Weapon tints

Weapon tints are items: `tint_1` to `tint_7`.
Apply them in the [weapon attachments](/inventory/features/weapon-attachments) view like any other component.

## Renaming and descriptions

Players can give an item their own name and description from the context menu.
They are stored in `metadata.label` and `metadata.description`, up to 32 and 160 characters (`item.renameMax`, `item.describeMax`).
