# emir-isroilov/osmon-source architecture

> Architecture diagram of the GitHub repository emir-isroilov/osmon-source, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/emir-isroilov/osmon-source
- Repository: https://github.com/emir-isroilov/osmon-source

## Overview

Osmon is a desktop GIS for viewing and editing vector and raster data, running geoprocessing, and collaborating through internet or local-network projects. The main user journey is to open a project and layers, inspect them on the map, make edits or run tools, then save or export results. Other documented capabilities include online data, an action-oriented chatbot, print layouts, and shared-server collaboration. The graph reflects sampled code and explicit README capabilities; some subsystem links remain unverified because their implementation was not sampled.

Main entry points: [`osmon_qt/workspace.py`](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/workspace.py) (Project workspace), [`osmon_core/server_db.py`](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/server_db.py) (Shared server database), [`osmon_core/vector_data.py`](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/vector_data.py) (Vector data), [`processing.py`](https://github.com/emir-isroilov/osmon-source/blob/main/processing.py) (Processing toolbox)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["GIS workspace"]
  node_app["Osmon desktop<br/>[Osmon.py]"]
  node_workspace["Project workspace<br/>[workspace.py]"]
  node_project["Project handling<br/>[project.py]"]
  node_map["Map canvas<br/>[map_canvas.py]"]
end

subgraph group_data["GIS data and editing"]
  node_vector[("Vector data<br/>[vector_data.py]")]
  node_render["Vector rendering<br/>[vector_item.py]"]
  node_edit_session["Edit session<br/>[edit_session.py]"]
  node_edit_ops["Edit operations<br/>[edit_ops.py]"]
  node_attribute_table["Attribute table<br/>[attribute_table.py]"]
end

subgraph group_tools["Analysis and data access"]
  node_processing["Processing toolbox<br/>[processing.py]"]
  node_geoprocess["Vector geoprocessing<br/>[geoprocess.py]"]
  node_raster_tools["Raster tools<br/>[raster_tools.py]"]
  node_online["Online data<br/>[online.py]"]
  node_chat["Chatbot actions<br/>[chatbot.py]"]
  node_chat_jobs["Background chat jobs<br/>[chat_jobs.py]"]
end

subgraph group_collab["Accounts and collaboration"]
  node_auth_ui["Account interface<br/>[auth_ui.py]"]
  node_auth["Account services<br/>[auth.py]"]
  node_server_db[("Shared server database<br/>[server_db.py]")]
  node_lan_server["LAN server<br/>[lan_server.py]"]
end

subgraph group_presentation["Output and interaction"]
  node_chat_ui["Chat interface<br/>[chat_exec.py]"]
  node_layout["Print layout<br/>[print_layout.py]"]
end

node_user(("GIS user"))
node_supabase[("Supabase services")]
node_local_files[("GIS files")]

node_user -.->|"uses"| node_app
node_app -.->|"opens workspace"| node_workspace
node_workspace -.->|"uses project handling"| node_project
node_workspace -.->|"presents map"| node_map
node_map -->|"loads data"| node_vector
node_map -->|"builds vector view"| node_render
node_render -->|"reads layer data"| node_vector
node_edit_session -->|"changes layer data"| node_vector
node_edit_session -.->|"uses edit operations"| node_edit_ops
node_attribute_table -.->|"edits attributes"| node_edit_session
node_vector -.->|"reads and writes"| node_local_files
node_processing -->|"registers tools"| node_geoprocess
node_processing -.->|"registers tools"| node_raster_tools
node_processing -.->|"produces outputs"| node_local_files
node_user -.->|"gets open data"| node_online
node_chat_ui -->|"dispatches requests"| node_chat
node_chat -->|"runs background jobs"| node_chat_jobs
node_chat_jobs -->|"fetches online data"| node_online
node_user -.->|"creates map output"| node_layout
node_auth_ui -->|"calls account logic"| node_auth
node_auth -.->|"authenticates"| node_supabase
node_server_db -->|"uses account session"| node_auth
node_server_db -.->|"accesses shared data"| node_supabase
node_lan_server -->|"uses server database"| node_server_db
node_workspace -.->|"opens shared layers"| node_server_db
node_user -.->|"hosts LAN project"| node_lan_server

click node_app "https://github.com/emir-isroilov/osmon-source/blob/main/Osmon.py"
click node_workspace "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/workspace.py"
click node_project "https://github.com/emir-isroilov/osmon-source/blob/main/project.py"
click node_map "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/map_canvas.py"
click node_vector "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/vector_data.py"
click node_render "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/vector_item.py"
click node_edit_session "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/edit_session.py"
click node_edit_ops "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/edit_ops.py"
click node_attribute_table "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/attribute_table.py"
click node_processing "https://github.com/emir-isroilov/osmon-source/blob/main/processing.py"
click node_geoprocess "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/geoprocess.py"
click node_raster_tools "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/raster_tools.py"
click node_online "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/online.py"
click node_chat_ui "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/chat_exec.py"
click node_chat "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/chatbot.py"
click node_chat_jobs "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/chat_jobs.py"
click node_layout "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/print_layout.py"
click node_auth_ui "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/auth_ui.py"
click node_auth "https://github.com/emir-isroilov/osmon-source/blob/main/auth.py"
click node_server_db "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/server_db.py"
click node_lan_server "https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/lan_server.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_workspace,node_project,node_map,node_user toneBlue
class node_vector,node_render,node_edit_session,node_edit_ops,node_attribute_table,node_supabase,node_local_files toneAmber
class node_processing,node_geoprocess,node_raster_tools,node_online,node_chat,node_chat_jobs toneMint
class node_auth_ui,node_auth,node_server_db,node_lan_server toneRose
class node_chat_ui,node_layout toneIndigo
```

## Components

### GIS workspace

- [Osmon desktop](https://github.com/emir-isroilov/osmon-source/blob/main/Osmon.py): `Osmon.py`
- [Project workspace](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/workspace.py): `osmon_qt/workspace.py`
- [Project handling](https://github.com/emir-isroilov/osmon-source/blob/main/project.py): `project.py`
- [Map canvas](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/map_canvas.py): `osmon_qt/map_canvas.py`

### GIS data and editing

- [Vector data](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/vector_data.py): `osmon_core/vector_data.py`
- [Vector rendering](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/vector_item.py): `osmon_qt/vector_item.py`
- [Edit session](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/edit_session.py): `osmon_qt/edit_session.py`
- [Edit operations](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/edit_ops.py): `osmon_core/edit_ops.py`
- [Attribute table](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/attribute_table.py): `osmon_qt/attribute_table.py`

### Analysis and data access

- [Processing toolbox](https://github.com/emir-isroilov/osmon-source/blob/main/processing.py): `processing.py`
- [Vector geoprocessing](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/geoprocess.py): `osmon_core/geoprocess.py`
- [Raster tools](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/raster_tools.py): `osmon_core/raster_tools.py`
- [Online data](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/online.py): `osmon_core/online.py`
- [Chatbot actions](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/chatbot.py): `osmon_core/chatbot.py`
- [Background chat jobs](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/chat_jobs.py): `osmon_core/chat_jobs.py`

### Accounts and collaboration

- [Account interface](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/auth_ui.py): `osmon_qt/auth_ui.py`
- [Account services](https://github.com/emir-isroilov/osmon-source/blob/main/auth.py): `auth.py`
- [Shared server database](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/server_db.py): `osmon_core/server_db.py`
- [LAN server](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_core/lan_server.py): `osmon_core/lan_server.py`

### Output and interaction

- [Chat interface](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/chat_exec.py): `osmon_qt/chat_exec.py`
- [Print layout](https://github.com/emir-isroilov/osmon-source/blob/main/osmon_qt/print_layout.py): `osmon_qt/print_layout.py`

### Other components

- **GIS user**
- **Supabase services**
- **GIS files**

## Connections

- GIS user → Osmon desktop: uses
- Osmon desktop → Project workspace: opens workspace
- Project workspace → Project handling: uses project handling (evidence: `osmon_qt/workspace.py`)
- Project workspace → Map canvas: presents map (evidence: `osmon_qt/workspace.py`)
- Map canvas → Vector data: loads data (evidence: `osmon_qt/map_canvas.py`)
- Map canvas → Vector rendering: builds vector view (evidence: `osmon_qt/map_canvas.py`)
- Vector rendering → Vector data: reads layer data (evidence: `osmon_qt/vector_item.py`)
- Edit session → Vector data: changes layer data (evidence: `osmon_qt/edit_session.py`)
- Edit session → Edit operations: uses edit operations
- Attribute table → Edit session: edits attributes
- Vector data → GIS files: reads and writes
- Processing toolbox → Vector geoprocessing: registers tools (evidence: `processing.py`)
- Processing toolbox → Raster tools: registers tools (evidence: `processing.py`)
- Processing toolbox → GIS files: produces outputs (evidence: `processing.py`)
- GIS user → Online data: gets open data
- Chat interface → Chatbot actions: dispatches requests (evidence: `osmon_qt/chat_exec.py`)
- Chatbot actions → Background chat jobs: runs background jobs (evidence: `osmon_core/chatbot.py`)
- Background chat jobs → Online data: fetches online data (evidence: `osmon_core/chat_jobs.py`)
- GIS user → Print layout: creates map output
- Account interface → Account services: calls account logic (evidence: `osmon_qt/auth_ui.py`)
- Account services → Supabase services: authenticates (evidence: `auth.py`)
- Shared server database → Account services: uses account session (evidence: `osmon_core/server_db.py`)
- Shared server database → Supabase services: accesses shared data (evidence: `osmon_core/server_db.py`)
- LAN server → Shared server database: uses server database (evidence: `osmon_core/lan_server.py`)
- Project workspace → Shared server database: opens shared layers (evidence: `osmon_qt/workspace.py`)
- GIS user → LAN server: hosts LAN project
