{"name":"@jennifer/routeros","description":"A thick, friendly layer over the MikroTik RouterOS API","versions":{"0.1.0":{"version":"0.1.0","kind":"git","url":"https://github.com/deckyard/deck-routeros.git","ref":"0.1.0","commit":"46ad273e73be821c1d7b1d717f9a041f7a46bb36","checksum":"","yanked":true,"license":"LGPL-3.0-only","requires":{},"engines":{"jennifer":"\u003e=0.25.0"},"capabilities":["net"],"keywords":["routeros","mikrotik","network","router","api"],"description":"A thick, friendly layer over the MikroTik RouterOS API","publishedAt":"1793218475","repoId":1311339307,"repoOwnerId":346943577,"repoOwner":"deckyard"}},"readme":"# routeros\n\n[![test](https://github.com/jennifer-language/deck-routeros/actions/workflows/test.yml/badge.svg)](https://github.com/jennifer-language/deck-routeros/actions/workflows/test.yml)\n[![Documentation](https://img.shields.io/badge/docs-github%20pages-blue)](https://jennifer-language.github.io/deck-routeros/)\n[![release](https://img.shields.io/github/v/release/jennifer-language/deck-routeros)](https://github.com/jennifer-language/deck-routeros/releases/latest)\n\nA **thick layer over the MikroTik RouterOS API** for the\n[Jennifer](https://jennifer-lang.dev/) language.\n\nThe bundled `mikrotik` module speaks the raw binary API: command paths,\n`=key=value` words, reply sentences. routeros wraps that in plain verbs and\ntyped structs so you can configure interfaces, bridges, and the firewall\nwithout knowing RouterOS internals. All input is validated before it touches\nthe wire; every failure is an `Error{kind: \"routeros\"}` (or\n`kind: \"mikrotik\"` from the transport) with a human-readable message.\n\n## Usage\n\n```jennifer\nimport \"@jennifer/routeros/\" as mt;\n\ndef c as mt.Client init mt.connect(\"192.168.88.1\", \"admin\", \"secret\");\n\n# see what gets sent (credentials are redacted); MT_VERBOSE=1 does the same\n$c = mt.setVerbose($c, true);\n\n# bridges\nmt.addBridge($c, \"brlan\");\nmt.addBridgePort($c, \"brlan\", \"ether2\");\n\n# interfaces\nmt.disableInterface($c, \"ether5\");\nmt.commentInterface($c, \"ether1\", \"uplink\");\n\n# firewall\nmt.allowService($c, \"tcp\", 22, \"ssh management\");\nmt.blockAddress($c, \"203.0.113.7\", \"known scanner\");\n\ndef r as mt.FirewallRule init mt.firewallRule(mt.CHAIN_FORWARD, mt.ACTION_DROP);\n$r = mt.withProtocol($r, \"tcp\");\n$r = mt.withDstPort($r, \"445\");\n$r = mt.withComment($r, \"no smb forwarding\");\nmt.addFirewallRule($c, $r);\n\nmt.disconnect($c);\n```\n\nSee [`examples/`](examples/) for one runnable example per topic, e.g.\n`MT_HOST=... MT_USER=... MT_PASSWORD=... jennifer run examples/firewall.j`.\n\n## Documentation\n\n- [docs/cheatsheet.md](docs/cheatsheet.md) - the full API surface, project layout, tests, requirements\n- [docs/index.md](docs/index.md) - per-topic guides with background and worked examples\n- [examples/](examples/) - one runnable, read-only example per topic (`examples/\u003ctopic\u003e.j`)\n- [RouterOS documentation](https://help.mikrotik.com/docs/) - MikroTik's official reference for\n  everything behind the paths this module wraps\n\n## Disclaimer\n\nMikroTik and RouterOS are trademarks of SIA Mikrotīkls. This project is\nan independent, community-written client library; it is **not\naffiliated with, endorsed, or supported by SIA Mikrotīkls**. It\nconfigures live network equipment - review what a call does before\npointing it at production hardware. **Use at your own risk**; no\nwarranty of any kind.\n\n## License\n\nLicensed under the **GNU LGPL v3.0 only** - see [LICENSE](LICENSE).\nCopyright © 2026 mplx \u0026lt;jennifer@mplx.dev\u0026gt;. Every source file carries\nan `SPDX-License-Identifier: LGPL-3.0-only` header.\n"}