routeros-quickchr

Solid

Ground RouterOS config/scripts/API code against a REAL router using quickchr (@tikoci/quickchr) — a CLI + Bun/TS library that downloads, boots, and manages MikroTik CHR VMs on QEMU. Use when: validating generated RouterOS config or scripts against real RouterOS before trusting them; spinning up a disposable CHR for REST/CLI/API iteration; writing integration/lab tests against CHR; needing host↔guest networking for a CHR (port-forward, L2/MNDP capture, guest→host UDP); driving an external RouterOS tool against a live CHR. For raw QEMU/CHR boot mechanics (VirtIO, UEFI vs SeaBIOS, acceleration) without quickchr, use routeros-qemu-chr instead.

API & Backend 40 stars 9 forks Updated 1 weeks ago MIT

Install

View on GitHub

Quality Score: 82/100

Stars 20%
54
Recency 20%
90
Frontmatter 20%
70
Documentation 15%
100
Issue Health 10%
50
License 10%
100
Description 5%
100

Skill Content

# Grounding RouterOS with quickchr ## What this is for The reliable way to know whether a RouterOS config, script, or API call actually works is to run it against **real RouterOS** — not to guess from docs. quickchr ([`@tikoci/quickchr`](https://github.com/tikoci/quickchr), npm, MIT, public) makes that a few lines: it downloads a MikroTik **CHR** (Cloud Hosted Router) image, boots it under QEMU, provisions it, and hands you a REST/SSH/exec handle. The free CHR license (1 Mbps, no signup) is enough for config validation, API iteration, and test grounding. **Reach for quickchr when** you want to apply config and read it back, iterate on REST/scripting against a live box, or run integration tests against CHR. **Don't reach for it** when you only need documentation (use the `rosetta` MCP / the `routeros-fundamentals` skill), or you're flashing physical hardware (use the `routeros-netinstall` skill). For raw QEMU boot internals without the quickchr wrapper, see the `routeros-qemu-chr` skill. ## The grounding loop (core pattern) ```ts import { QuickCHR } from "@tikoci/quickchr"; const chr = await QuickCHR.start({ name: "lab", channel: "stable" }); // start() resolves REST-READY — provisioning is already done. No second wait needed // in normal background/library use; waitForBoot() is only a belt-and-suspenders check. await chr.exec("/ip/firewall/address-list/add list=blocked address=10.9.9.9"); const list = await chr.rest("/ip/firewall/address-list"); // structured read-b...

Details

Author
tikoci
Repository
tikoci/routeros-skills
Created
4 months ago
Last Updated
1 weeks ago
Language
Shell
License
MIT

Similar Skills

Semantically similar based on skill content — not just same category