# gideonlegrange/mikrotik-java architecture

> Architecture diagram of the GitHub repository gideonlegrange/mikrotik-java, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/gideonlegrange/mikrotik-java
- Repository: https://github.com/gideonlegrange/mikrotik-java

## Overview

mikrotik-java is a Java client for connecting to MikroTik RouterOS and issuing API commands. The main workflow is to open a socket-backed connection, log in, send a command, and receive result maps or asynchronous listener callbacks; commands support parameters, filtering, and selected return fields, while the API also supports configuration changes, cancellation, and TLS via a caller-supplied socket factory. The implementation excerpts show parsing, wire encoding/decoding, and response dispatch. Some connection-processing code was omitted, so internal response links are limited to documented or visible behavior.

Main entry points: [`src/main/java/me/legrange/mikrotik/impl/ApiConnectionImpl.java`](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/ApiConnectionImpl.java) (Connection implementation), [`src/main/java/me/legrange/mikrotik/ApiConnection.java`](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/ApiConnection.java) (Connection API), [`src/main/java/me/legrange/mikrotik/impl/Parser.java`](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Parser.java) (Command parser), [`src/main/java/me/legrange/mikrotik/impl/Util.java`](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Util.java) (Wire codec)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client API"]
  node_api["Connection API<br/>[ApiConnection.java]"]
  node_baseerror["API exceptions"]
end

subgraph group_commands["Command Processing"]
  node_scanner["Command scanner<br/>[Scanner.java]"]
  node_parser["Command parser<br/>[Parser.java]"]
  node_command["Command model<br/>[Command.java]"]
end

subgraph group_transport["RouterOS Transport"]
  node_impl["Connection implementation"]
  node_codec["Wire codec<br/>[Util.java]"]
end

subgraph group_responses["Results and Errors"]
  node_listener["Result listener"]
  node_result["Result map<br/>[Result.java]"]
  node_apierror["Command error"]
end

node_user(("Java application"))
node_router(("RouterOS router"))

node_user -->|"opens and invokes"| node_api
node_api -->|"delegates connection"| node_impl
node_impl -->|"connects and sends"| node_router
node_router -->|"returns sentences"| node_impl
node_impl -->|"parses commands"| node_parser
node_parser -->|"requests tokens"| node_scanner
node_parser -->|"builds command"| node_command
node_impl -->|"encodes commands"| node_codec
node_codec -->|"writes protocol data"| node_router
node_impl -->|"decodes input"| node_codec
node_impl -->|"dispatches updates"| node_listener
node_impl -->|"assembles result maps"| node_result
node_impl -->|"wraps router errors"| node_apierror
node_apierror -->|"extends"| node_baseerror
node_impl -->|"returns results"| node_api
node_api -->|"returns or reports"| node_user

click node_api "https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/ApiConnection.java"
click node_impl "https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/ApiConnectionImpl.java"
click node_scanner "https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Scanner.java"
click node_parser "https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Parser.java"
click node_command "https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Command.java"
click node_codec "https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Util.java"
click node_listener "https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/ResultListener.java"
click node_result "https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Result.java"
click node_apierror "https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/ApiCommandException.java"
click node_baseerror "https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/MikrotikApiException.java"

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_api,node_baseerror toneBlue
class node_scanner,node_parser,node_command toneAmber
class node_impl,node_codec,node_router toneMint
class node_listener,node_result,node_apierror toneRose
class node_user toneIndigo
```

## Components

### Client API

- [Connection API](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/ApiConnection.java): `src/main/java/me/legrange/mikrotik/ApiConnection.java`
- [API exceptions](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/MikrotikApiException.java): `src/main/java/me/legrange/mikrotik/MikrotikApiException.java`

### Command Processing

- [Command scanner](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Scanner.java): `src/main/java/me/legrange/mikrotik/impl/Scanner.java`
- [Command parser](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Parser.java): `src/main/java/me/legrange/mikrotik/impl/Parser.java`
- [Command model](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Command.java): `src/main/java/me/legrange/mikrotik/impl/Command.java`

### RouterOS Transport

- [Connection implementation](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/ApiConnectionImpl.java): `src/main/java/me/legrange/mikrotik/impl/ApiConnectionImpl.java`
- [Wire codec](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Util.java): `src/main/java/me/legrange/mikrotik/impl/Util.java`

### Results and Errors

- [Result listener](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/ResultListener.java): `src/main/java/me/legrange/mikrotik/ResultListener.java`
- [Result map](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/Result.java): `src/main/java/me/legrange/mikrotik/impl/Result.java`
- [Command error](https://github.com/gideonlegrange/mikrotik-java/blob/master/src/main/java/me/legrange/mikrotik/impl/ApiCommandException.java): `src/main/java/me/legrange/mikrotik/impl/ApiCommandException.java`

### Other components

- **Java application**
- **RouterOS router**

## Connections

- Java application → Connection API: opens and invokes
- Connection API → Connection implementation: delegates connection
- Connection implementation → RouterOS router: connects and sends
- RouterOS router → Connection implementation: returns sentences
- Connection implementation → Command parser: parses commands
- Command parser → Command scanner: requests tokens
- Command parser → Command model: builds command
- Connection implementation → Wire codec: encodes commands
- Wire codec → RouterOS router: writes protocol data
- Connection implementation → Wire codec: decodes input
- Connection implementation → Result listener: dispatches updates
- Connection implementation → Result map: assembles result maps
- Connection implementation → Command error: wraps router errors
- Command error → API exceptions: extends
- Connection implementation → Connection API: returns results
- Connection API → Java application: returns or reports
