> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nonefivem.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Integrations

> Create your own integrations for no-camera.

You can create your own custom integrations to extend no-camera functionality. Integration files are not encrypted and can be used as reference for building your own.

## Getting Started

1. Create a new Lua file in `no-camera/integrations/` folder
2. Use the available [events](/scripts/no-camera/api/client-events) and [exports](/scripts/no-camera/api/client-exports) to hook into camera functionality
3. Reference existing integrations like `lb-phone.lua` for examples

<Note>
  Integration files run on both client and server. Use the `_IS_SERVER` global to
  determine the current environment.
</Note>

```lua theme={null}
if _IS_SERVER then
  -- Server-side code
  AddEventHandler("no-camera:gallery:photo:created", function(photo)
    -- Handle server-side logic
  end)
else
  -- Client-side code
  AddEventHandler("no-camera:camera_manager:photo_complete", function(success)
    -- Handle client-side logic
  end)
end
```

## Available Hooks

### Client Events

Use client events to react to camera state changes, photo captures, and UI interactions. See the full list in [Client Events](/scripts/no-camera/api/client-events).

### Server Events

Use server events to react to gallery changes like photo creation, deletion, and sharing. See the full list in [Server Events](/scripts/no-camera/api/server-events).

### Exports

Use exports to programmatically control camera functionality. See [Client Exports](/scripts/no-camera/api/client-exports) and [Server Exports](/scripts/no-camera/api/server-exports).

## Tips

* Look at existing third-party integrations in the `integrations` folder for reference
* Keep your integration modular and self-contained
* Use the configuration pattern from other integrations (`Config.Integrations.YourIntegration.enabled`)
* Check if required resources exist before initializing your integration
