# `PhoenixKit.Migrations.Postgres.V12`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.87/lib/phoenix_kit/migrations/postgres/v12.ex#L1)

PhoenixKit V12 Migration: JSON Settings Support

This migration adds JSONB support to the settings system, enabling storage
of complex structured data alongside traditional string-based settings.

## Changes

### Settings Table Enhancement
- Adds value_json column to phoenix_kit_settings table
- Uses PostgreSQL JSONB type for optimal performance and indexing
- Nullable field maintains backward compatibility
- Supports complex configuration objects and arrays

### New Features
- **JSON Data Storage**: Store complex objects, arrays, and nested data
- **Native JSONB Performance**: PostgreSQL's optimized JSONB operations
- **Backward Compatible**: Existing string settings continue to work
- **Dual Storage Model**: Settings can use either string OR JSON values
- **Cache Integration**: JSON data cached efficiently with existing system

## PostgreSQL Support
- Leverages PostgreSQL's native JSONB data type
- Supports prefix for schema isolation
- Optimal storage and query performance for JSON data
- Safe nullable field addition (no data migration required)

## Usage Examples

    # Traditional string setting (unchanged)
    PhoenixKit.Settings.update_setting("theme", "dark")

    # New JSON setting
    config = %{
      "colors" => %{"primary" => "#3b82f6", "secondary" => "#64748b"},
      "features" => ["dark_mode", "notifications"],
      "limits" => %{"max_users" => 1000, "storage_gb" => 100}
    }
    PhoenixKit.Settings.update_json_setting("app_config", config)

# `down`

Rollback the V12 migration.

# `up`

Run the V12 migration to add JSON support to settings.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
