SwOS API and Tools
Python library and tools for managing MikroTik SwOS (SwitchOS) and SwOS Lite (SwitchOS Lite) switches.
Components
- swos package: Python library for reading/writing switch configuration
- swos-config: CLI tool for displaying configuration
- swos-export: CLI tool for exporting configurations to Ansible YAML format
- Ansible module: Full-featured Ansible integration for declarative, idempotent switch configuration management
- Supports check mode (dry-run)
- Auto-detects platform (SwOS vs SwOS Lite)
- Manages ports, PoE, VLANs, LAG/LACP, SNMP
- See ANSIBLE.md for complete documentation
Capabilities
Read: System info, ports, PoE, LAG/LACP, per-port VLANs, VLAN table, host table, SFP info, SNMP Write: System settings, port config, PoE settings, LAG/LACP, per-port VLANs, VLAN table, SNMP, admin password Backup/Restore: Download binary backups, restore from backup files SwOS-only: VLAN names, isolation, learning, mirror settings (not available on SwOS Lite) Note: All configuration changes are immediately applied and persisted by the switch.
Requirements
- Python 3.6+
- requests>=2.25.0
Installation
pip install mikrotik-swos
Or for development:
pip install -r requirements.txt
Confirmed Compatibility
-
SwOS 2.17
-
SwOS 2.18
-
SwOS Lite 2.17
-
SwOS Lite 2.18
-
SwOS Lite 2.19
-
SwOS Lite 2.20
-
SwOS Lite 2.21
Tested Hardware
-
CRS305-1G-4S+
-
CRS309-1G-8S+
-
CRS310-8G+2S+
-
CRS326-24S+2Q
-
CSS610-8G-2S+
-
CSS610-8P-2S+
Reported Working
Contributor-reported, not verified against hardware here:
- CSS318-16G-2S+ (SwOS)
- CSS326-24G-2S+ (SwOS)
Note: The model prefix does not indicate the platform. Some CSS models run full SwOS rather than SwOS Lite; the library detects this from the device's own field naming.
Note: Gracefully handles switches without PoE, LAG/LACP, or SFP capabilities.
Quick Start
CLI Tools
swos-config - Display switch configuration:
# Display configuration
swos-config 192.168.88.1 admin ""
# Save to file
swos-config 192.168.88.1 admin "" > backup.txt
swos-export - Export to Ansible YAML format:
# Export all switches from inventory
swos-export -i inventory.yml -o configs/
# Export single switch
swos-export --host 192.168.1.1 --username admin --password "" -o switch.yml
Python API
from swos import get_system_info, set_port_config, get_backup
url = "http://192.168.88.1"
system = get_system_info(url, "admin", "")
print(f"{system['identity']} - {system['model']}")
# Configure a port
set_port_config(url, "admin", "", port_number=1, name="Uplink")
# Create a backup
backup_data = get_backup(url, "admin", "")
with open("switch_backup.swb", "wb") as f:
f.write(backup_data)
See module docstrings for complete API documentation.
Ansible - Infrastructure as Code
Perfect for managing multiple switches declaratively!
Quick Setup:
# Install package
pip install mikrotik-swos
# Copy module to your playbook
mkdir -p library
cp ansible/swos.py library/
Example Playbook:
- name: Configure Switch
hosts: switches
tasks:
- name: Apply configuration
swos:
host: "{{ ansible_host }}"
username: admin
password: ""
config:
system:
identity: "Office-Switch-01"
ports:
- port: 1
name: "Uplink"
enabled: true
- port: 2
name: "Server"
enabled: true
vlans:
- vlan_id: 10
members: [2, 3, 4]
Features:
- Idempotent - only applies changes when needed
- Check mode - preview changes with
--check - Auto-detection - works with both SwOS and SwOS Lite
- Complete validation - catches configuration errors before applying
Full Ansible Documentation - Complete guide with advanced examples
API Functions
Read: get_system_info(), get_links(), get_poe(), get_lag(), get_port_vlans(), get_vlans(), get_hosts(), get_sfp_info(), get_snmp()
Write: set_system(), set_port_config(), set_poe_config(), set_lag_config(), set_port_vlan(), set_vlans(), set_snmp()
Backup/Restore: get_backup(), restore_backup()
All functions take (url, username, password, ...) parameters.
Read functions return lists of dictionaries with configuration data.
Write functions take port_number and optional setting parameters (except set_system(), set_snmp(), and set_vlans() which set global config).
Backup functions work with binary .swb files (encrypted/proprietary MikroTik format).
See docstrings in the swos module for detailed parameters and return values.
Security
- SwOS Lite uses HTTP with Digest Authentication (no HTTPS)
- Use on trusted networks only
- Use Ansible Vault for password storage
Development
Publishing a New Release
-
Create and push a git tag:
git tag v0.2.0 git push origin v0.2.0
-
GitHub Actions automatically builds and publishes to PyPI
Credits
Certain components of this codebase were created with the assistance of AI.
Release files for mikrotik-swos 1.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mikrotik_swos-1.4.0.tar.gz | 147.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mikrotik_swos-1.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 178.4 kB
Release files / mikrotik_swos-1.4.0.tar.gz
| Download URL | mikrotik_swos-1.4.0.tar.gz |
|---|---|
| Size | 147.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
abc476b10e671a8bfa722541b31a24541d2aafa4e8629c448b33f0695f96ea9b
|
|
BLAKE2b-256 checksum How to use checksums |
4eeda09dc7b0a11bca036cd78380fc7d48b9d275886d00652910ef30af94b35e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 6, 2026.
Transparency logRelease files / mikrotik_swos-1.4.0-py3-none-any.whl
| Download URL | mikrotik_swos-1.4.0-py3-none-any.whl |
|---|---|
| Size | 31.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4c58289a6efa49c94755be2ee28e1708c73c4aca122638d976b3b2a8dfad9133
|
|
BLAKE2b-256 checksum How to use checksums |
13108c4dada2d5fbebf23571361f0aa89cd402362f222263cb8e111b891c6912
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 6, 2026.
Transparency log