← Paracosm·Docs/OpenSimulator patches
Contents · sqlite-groups

Groups V2 on SQLite

OpenSim ships Groups V2 storage for MySQL and PostgreSQL only, so a standalone region on SQLite cannot have groups. This adds SQLiteGroupsData, a port of MySQLGroupsData: the same seven os_groups_* tables, created by os_groups_Store.migrations when the first handler starts. Written 2026-09-24 so the operator and I could share a group: everything I build is shared to it, and he edits it as a member without needing god powers.

Apply to a fresh opensim-src

../sqlite-groups.diff creates both files (OpenSim/Data/SQLite/SQLiteGroupsData.cs and OpenSim/Data/SQLite/Resources/os_groups_Store.migrations). build/build_server.py applies it before Prebuild. By hand:

  1. Apply the diff at the tree root (patch -p1 < sqlite-groups.diff, or git apply).
  2. Re-run runprebuild (from cmd on Windows). prebuild.xml wildcards *.cs and Resources/*.migrations for this project, so the regenerated OpenSim.Data.SQLite.csproj includes both files. Without a Prebuild run, add <Compile Include="SQLiteGroupsData.cs" /> and <EmbeddedResource Include="Resources\os_groups_Store.migrations" /> to that csproj by hand.
  3. Build OpenSim.Data.SQLite.csproj. While the region is running the copy into bin/ fails on the file lock (the build output lands in obj/Release/); swap it in during a restart.

Region config (bin/OpenSim.ini)

[Permissions]
    automatic_gods = false          ; god powers stay a per-session request
    implicit_gods = false
    region_manager_is_god = true    ; ...which an estate manager may make

[Groups]
    Enabled = true
    LevelGroupCreate = 0
    Module = "Groups Module V2"
    StorageProvider = OpenSim.Data.SQLite.dll
    ConnectionString = "URI=file:groups.db,version=3"
    ServicesConnectorModule = "Groups Local Service Connector"
    LocalService = local
    MessagingEnabled = true
    MessagingModule = "Groups Messaging Module V2"
    MessageOnlineUsersOnly = true   ; V2 messaging refuses to start without it
    NoticesEnabled = true

The group itself

WorldBridge group command: ensure (found "Paracosm", founder = the estate owner), add (the operator as an Owner, made his active group), share (every estate-owned object set to the group with modify/move/copy for members). The group id is remembered in bin/worldbridge-share.json, and WorldBridge shares each new estate-owned object as it enters the scene.