<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://osimdev.org/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenSimulator_Internals%2FData_Dictionaries</id>
	<title>OpenSimulator Internals/Data Dictionaries - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://osimdev.org/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenSimulator_Internals%2FData_Dictionaries"/>
	<link rel="alternate" type="text/html" href="http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Data_Dictionaries&amp;action=history"/>
	<updated>2026-08-04T14:49:10Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Data_Dictionaries&amp;diff=4&amp;oldid=prev</id>
		<title>Jwbshaw: First</title>
		<link rel="alternate" type="text/html" href="http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Data_Dictionaries&amp;diff=4&amp;oldid=prev"/>
		<updated>2026-06-20T16:26:27Z</updated>

		<summary type="html">&lt;p&gt;First&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= OpenSimulator Internals/Data Dictionaries =&lt;br /&gt;
&lt;br /&gt;
ROBUST and region databases share the same database server instance as separate databases.&lt;br /&gt;
&lt;br /&gt;
All tables verified against source code and MySQL migration files. Where the existing wiki disagrees with source, source takes priority. Discrepancies are noted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== assets ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! Notesid-name-description-assetType-local-temporary-data-create_time-access_time-asset_flags-CreatorID-sha1}&lt;br /&gt;
&lt;br /&gt;
Assets are immutable by design -- no updates, only inserts. No built-in garbage collection.&lt;br /&gt;
&lt;br /&gt;
When an object is rezzed on a foreign HyperGrid grid, assets are copied to that grid&amp;#039;s asset table -- same UUID, separate copy, no link between them, no cleanup on either end.&lt;br /&gt;
&lt;br /&gt;
=== AssetFlags enum (asset_flags column) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Value !! Name !! Notes0-1-2-4}&lt;br /&gt;
&lt;br /&gt;
=== Asset type classification (computed, not stored) ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
IsBinaryAsset: Animation, Gesture, Simstate, Unknown, Object, Sound, SoundWAV, Texture, TextureTGA, Folder, ImageJPEG, ImageTGA, Mesh, LSLBytecode&lt;br /&gt;
IsTextualAsset: everything else&lt;br /&gt;
ContainsReferences: textual assets excluding Notecard, CallingCard, LSLText, Landmark&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== InventoryService ==&lt;br /&gt;
&lt;br /&gt;
Unlike AssetService, the xinventory service is an RPC interface exposing a single URI (e.g. http://localhost:8003/xinventory). Different operations (add item, get item, etc.) are controlled via a METHOD parameter.&lt;br /&gt;
&lt;br /&gt;
=== Inventory Item ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesID-Name-Description-AssetID-AssetType-InvType-Folder-Owner-CreatorId-CreatorData-CreationDate-BasePermissions-CurrentPermissions-NextPermissions-EveryOnePermissions-GroupPermissions-GroupID-GroupOwned-Flags-SalePrice-SaleType}&lt;br /&gt;
&lt;br /&gt;
=== Inventory Folder ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesID-Name-Owner-ParentID-Type-Version}&lt;br /&gt;
&lt;br /&gt;
Note: where multiple folders are returned, the folder element may have an underscore and index appended (e.g. folder_0). This is for historical reasons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== inventoryfolders ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesfolderID-agentID-parentFolderID-folderName-type-version}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== inventoryitems ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesinventoryID-assetID-assetType-invType-inventoryName-inventoryDescription-creatorID-avatarID-parentFolderID-groupID-groupOwned-inventoryBasePermissions-inventoryCurrentPermissions-inventoryNextPermissions-inventoryEveryOnePermissions-inventoryGroupPermissions-salePrice-saleType-creationDate-flags}&lt;br /&gt;
&lt;br /&gt;
Permissions live here, not in the asset table. The same underlying asset UUID can exist in multiple users&amp;#039; inventories with different permissions on each copy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== auth ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesUUID-passwordHash-passwordSalt-webLoginKey-accountType}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== tokens ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesUUID-token-validity}&lt;br /&gt;
&lt;br /&gt;
Confirmed unused per wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== regions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! Notesuuid-regionHandle-regionName-serverIP-serverPort-serverHttpPort-serverURI-locX-locY-locZ-sizeX-sizeY-ScopeID-owner_uuid-PrincipalID-Token-access-flags-last_seen-regionMapTexture-parcelMapTexture-originUUID-eastOverrideHandle-westOverrideHandle-southOverrideHandle-northOverrideHandle-regionRecvKey-regionSendKey-regionSecret-regionDataURI-regionAssetURI-regionAssetRecvKey-regionAssetSendKey-regionUserURI-regionUserRecvKey-regionUserSendKey-serverRemotingPort}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PresenceService ==&lt;br /&gt;
&lt;br /&gt;
RPC interface. Operations controlled via METHOD parameter.&lt;br /&gt;
&lt;br /&gt;
=== getagents request ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! Notesuuids[]-METHOD}&lt;br /&gt;
&lt;br /&gt;
If no online users are found, an empty result is returned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Presence ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesUserID-RegionID-SessionID-SecureSessionID-LastSeen}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UserAccountService ==&lt;br /&gt;
&lt;br /&gt;
=== Account fields ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesPrincipalID-FirstName-LastName-Email-ScopeID-Created-UserLevel-UserFlags-UserTitle-LocalToGrid-ServiceURLs}&lt;br /&gt;
&lt;br /&gt;
Note: where multiple accounts are returned, the account element may have an underscore and index appended. Historical reasons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UserAccounts ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesPrincipalID-ScopeID-FirstName-LastName-Email-ServiceURLs-Created-UserLevel-UserFlags-UserTitle-active}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GridUser ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesUserID-HomeRegionID-HomePosition-HomeLookAt-LastRegionID-LastPosition-LastLookAt-Online-Login-Logout}&lt;br /&gt;
&lt;br /&gt;
Records are added on first login but never removed. Online status less accurate than Presence table. Service ignores users marked online for more than 5 days.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== hg_traveling_data ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesSessionID-UserID-GridExternalName-ServiceToken-ClientIPAddress-MyIPAddress-TMStamp}&lt;br /&gt;
&lt;br /&gt;
DeleteOld() called on UserAgentService startup -- one of the few places active cleanup occurs in the codebase.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Friends ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesPrincipalID-Friend-Flags-Offered}&lt;br /&gt;
&lt;br /&gt;
TheirFlags is not stored -- computed at query time via self-join. Returns -1 if reverse friendship record does not exist (friendship not yet reciprocated).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Avatars ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesPrincipalID-Name-Value}&lt;br /&gt;
&lt;br /&gt;
No fixed columns -- all appearance data stored as named key-value pairs. Each appearance attribute is a separate row. Schema is open-ended by design.&lt;br /&gt;
&lt;br /&gt;
Ghost fields in API responses (OpenSimulator 0.7.4 and before): MAXVERSION, MINVERSION, METHOD, and UserID were accidentally serialized into responses and may appear in data from old servers. All can be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Known attribute names (Name column values) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Name !! Value format !! NotesAvatarHeight-AvatarType-Serial-VisualParams-Wearable &amp;lt;p&amp;gt;:&amp;lt;n&amp;gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GroupsService ==&lt;br /&gt;
&lt;br /&gt;
Core groups service is not enabled by default. The external XmlRpc/Flotsam groups service is the common alternative.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesGroupID-GroupName-Charter-FounderID-FounderUUI-InsigniaID-MembershipFee-OpenEnrollment-OwnerRoleID-AllowPublish-MaturePublish-ShownInList-ServiceLocation-MembershipCount-RoleCount}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== os_groups_groups ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesGroupID-Name-Charter-Location-InsigniaID-FounderID-MembershipFee-OpenEnrollment-ShowInList-AllowPublish-MaturePublish-OwnerRoleID}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== os_groups_membership ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesGroupID-PrincipalID-SelectedRoleID-Contribution-ListInProfile-AcceptNotices-AccessToken}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== os_groups_roles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesGroupID-RoleID-Name-Description-Title-Powers}&lt;br /&gt;
&lt;br /&gt;
Default role power sets:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Everyone: AllowSetHome, Accountable, JoinChat, AllowVoiceChat, ReceiveNotices, StartProposal, VoteOnProposal&lt;br /&gt;
Officers: Everyone powers plus land, object, and member management powers&lt;br /&gt;
Owners: Officer powers plus CreateRole, DeleteRole, AssignMember, RemoveMember, GroupBanAccess, and others&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== os_groups_rolemembership ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesGroupID-RoleID-PrincipalID}&lt;br /&gt;
&lt;br /&gt;
Junction table only. Links principals to roles within a group.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== os_groups_invites ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesInviteID-GroupID-RoleID-PrincipalID-TMStamp}&lt;br /&gt;
&lt;br /&gt;
A user can only have one pending invite per group at a time (GroupID+PrincipalID unique key).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== os_groups_notices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesNoticeID-GroupID-TMStamp-FromName-Subject-Message-HasAttachment-AttachmentType-AttachmentName-AttachmentItemID-AttachmentOwnerID}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== os_groups_principals ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Field !! Type !! NotesPrincipalID-ActiveGroupID}&lt;br /&gt;
&lt;br /&gt;
Originally from Diva Distro (diva_groups_* tables). Migrated to os_groups_* in version 2 of the migration file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Filesystem Storage ==&lt;br /&gt;
&lt;br /&gt;
=== MapImageService ===&lt;br /&gt;
&lt;br /&gt;
Not stored in the database. All map tiles are JPEG files on the filesystem.&lt;br /&gt;
&lt;br /&gt;
Config key: TilesStoragePath in [MapImageService] section. Defaults to maptiles/&lt;br /&gt;
&lt;br /&gt;
Directory structure: maptiles/{scopeID}/&lt;br /&gt;
&lt;br /&gt;
File naming: map-{zoomLevel}-{x}-{y}-objects.jpg&lt;br /&gt;
&lt;br /&gt;
Zoom levels: 8 levels. Level 1 is full resolution (256x256 pixels). Levels 2-8 generated automatically by downsampling 4 adjacent tiles into 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multi-resolution tile generation is queued and asynchronous. Waits 60 seconds after a tile arrives before building zoom levels.&lt;br /&gt;
Missing tile returns a pre-cached water-coloured JPEG (RGB 29, 72, 96) rather than an error.&lt;br /&gt;
All file I/O uses a single mutex. Thread safe but potentially a bottleneck on busy grids.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Simulator Services ==&lt;br /&gt;
&lt;br /&gt;
These are OpenSimulator internal services, not Second Life or viewer-facing services. Run per-simulator, not on ROBUST. All interfaces in OpenSim.Services.Interfaces.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Service !! DescriptionLand-Library-Simulation}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Simulator Database ==&lt;br /&gt;
&lt;br /&gt;
Run per-simulator. Not yet fully documented.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Table !! Descriptionland-landaccesslist-primitems-prims-primshapes-regionban-regionsettings-regionwindlight-terrain}&lt;br /&gt;
&lt;br /&gt;
== Estate Database ==&lt;br /&gt;
&lt;br /&gt;
Run per-simulator. Not yet fully documented.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
! Table !! Descriptionestate_groups-estate_managers-estate_map-estate_settings-estate_users-estateban}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[OpenSimulator Internals/ROBUST Services]]&lt;br /&gt;
[[OpenSimulator Internals/GridService]]&lt;/div&gt;</summary>
		<author><name>Jwbshaw</name></author>
	</entry>
</feed>