Network automation CLI. Apache 2.0 licensed. Fully open-source. Originally developed at narrowin, now community maintained.
Networka: Eierlegende Wollmilchsau of network operations — optimized for your daily workflows.
Networka is a modern CLI tool for automating network devices across multiple vendors. Designed for network engineers who want fast, scalable automation with full cross-platform support.
“People ask the question…
what’s a Networka?
And I tell 'em —
it's not about cables, configs, and pings.
Oh no.
There’s more to it than that, my friend.
We all like a bit of the good life —
some the uptime, some the security,
others the automation, the visibility, or the compliance.
But a Networka, oh, they're different.
Why?
Because a real Networka wants the f*ing lot.”
(inspired by: RockNRolla)
- Installation: see the docs → https://narrowin.github.io/networka/getting-started/
- Platform compatibility → https://narrowin.github.io/networka/platform-compatibility/
- Shell completion → https://narrowin.github.io/networka/shell-completion/
- CLI reference → https://narrowin.github.io/networka/reference/cli/
- API reference → https://narrowin.github.io/networka/reference/api/
| Networka | Ansible | Nornir | |
|---|---|---|---|
| Primary interface | CLI commands | YAML playbooks | Python scripts |
| Time to first command | Seconds after install | After writing playbook + inventory | After writing Python script |
| Learning curve | Familiar CLI patterns | YAML, Jinja2, modules | Python programming |
| Execution | Concurrent by default | Sequential by default | Depends on implementation |
| Best for | Daily operations, ad-hoc commands | Infrastructure-as-code, compliance | Custom automation frameworks |
Networka is built for network engineers who want to run commands now. Ansible excels at declarative infrastructure-as-code. Nornir shines when you need full Python programmability. Different tools, each great at what they do.
- Multi-vendor network automation: Native support for MikroTik RouterOS, Cisco IOS/IOS-XE/NX-OS, Arista EOS, Juniper JunOS, and more
- Scalable device management: Execute commands across individual devices or groups
- Cross-platform compatibility: Full support for Linux, macOS, and Windows environments
- Flexible configuration: YAML and CSV configuration options with powerful device tagging and grouping
- Command execution: Run single commands or predefined sequences across devices and groups
- File management: Upload/download files to/from network devices with verification and error handling
- Device backup: Automated configuration and comprehensive backups with vendor-specific implementations
- Firmware management: Upgrade, downgrade, and BIOS operations with platform validation
- CLI session management: Direct CLI access with tmux integration for interactive sessions
- Intelligent completions: Context-aware shell completions for devices, groups, and sequences
- Vendor-aware sequences: Predefined command sets optimized for different network platforms
- Results management: Organized storage with multiple output formats and automatic timestamping
- Configuration validation: Schema-based validation with detailed error reporting
- Credential management: Secure credential handling via environment variables with device-specific overrides
- Type safety: Full mypy type checking for reliability and maintainability
- Modern architecture: Built with scalable scrapli and nornir support
- Extensible design: Plugin-friendly architecture for adding new vendors and operations
- Rich output: Professional CLI interface with color coding and structured information display
- Operating System: Linux, macOS, or Windows
- Network Access: SSH connectivity to target devices
- Package Manager: uv (recommended) or pip
- tmux for
nw cli: Install tmux to use the multi-pane CLI command (brew install tmuxon macOS,apt install tmuxon Debian/Ubuntu). libtmux is installed automatically with Networka.
Install from PyPI using an isolated tool installer.
# Recommended (isolated, user-wide)
uv tool install networka
# Alternative
pipx install networka
# Verify installation
nw --help- Check:
command -v nw(Linux/macOS) orwhere nw(Windows) - If using pipx: ensure PATH is set, then reload shell
pipx ensurepath exec $SHELL
- Linux/macOS: add user bin to PATH if needed
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc # or ~/.zshrc exec $SHELL
- Windows (native, best-effort): prefer WSL2; if native, run
pipx ensurepathand restart the terminal
More → PATH troubleshooting: https://narrowin.github.io/networka/troubleshooting/#path-nw-not-found
# Upgrade to latest version
uv tool upgrade networka
# or
pipx upgrade networka
# Remove installation
uv tool uninstall networka
# or
pipx uninstall networkaLinux/macOS: No additional dependencies required
Windows: Scrapli (the default transport) does not officially support native Windows. While it may work with Paramiko or ssh2-python drivers, the recommended approach is to run Networka on WSL2 (Ubuntu) for a fully supported POSIX environment. Native Windows usage is best-effort.
WSL2 quickstart (recommended):
# In Ubuntu on WSL2
curl -LsSf https://astral.sh/uv/install.sh | sh
exec $SHELL
uv tool install networka
nw --helpDetails → https://narrowin.github.io/networka/platform-compatibility/#wsl2-quickstart-recommended
Get up and running with config init command:
# Initialize in default location with interactive prompts
nw config init
Use Networka programmatically in your Python applications:
from network_toolkit import NetworkaClient, DeviceSession
client = NetworkaClient()
with DeviceSession("router1", client.config) as session:
output = session.execute_command("show version")
print(output)See the Library Documentation for:
- Multi-command workflows with persistent sessions
- Ad-hoc IP targeting without configuration files
- Credential handling patterns
- Integration recipes
Run directly against an IP without creating files. --platform selects the network OS driver; --interactive-auth prompts for credentials.
# MikroTik RouterOS
nw run --platform mikrotik_routeros 192.0.2.10 "/system/identity/print" --interactive-auth# Cisco IOS-XE
nw run --platform cisco_iosxe 198.51.100.20 "show version" --interactive-auth- device_type: Network OS driver used for connections and commands (Scrapli "platform"). Examples: mikrotik_routeros, cisco_iosxe, arista_eos, juniper_junos.
- platform (hardware/firmware): Hardware architecture used for firmware-related operations (x86, x86_64, arm, mipsbe, tile).
- transport: Connection backend. Default is scrapli.
Note: When targeting IPs directly, --platform refers to the network driver (device_type), not hardware architecture.
- Getting started → https://narrowin.github.io/networka/getting-started/
- Running commands → https://narrowin.github.io/networka/running-commands/
- Configuration → https://narrowin.github.io/networka/configuration/
- Environment variables → https://narrowin.github.io/networka/environment-variables/
- Results → https://narrowin.github.io/networka/results/
- Output modes → https://narrowin.github.io/networka/output-modes/
- Backups → https://narrowin.github.io/networka/backups/
- CLI reference → https://narrowin.github.io/networka/reference/cli/
- API reference → https://narrowin.github.io/networka/reference/api/
- For current usage and commands, see the CLI reference:
- https://narrowin.github.io/networka/reference/cli/
- Quick checks:
nw --helpandnw --version
- Visit our documentation for detailed guides and examples
- Create GitHub Issues for bug reports and feature requests
- See CONTRIBUTING.md for contribution guidelines
- Check SECURITY.md for security policy and reporting vulnerabilities
Have a look through existing Issues and Pull Requests that you could help with. If you'd like to request a feature or report a bug, please create a GitHub Issue using one of the templates provided.
- Docs Home → https://narrowin.github.io/networka/
- Platform Compatibility → https://narrowin.github.io/networka/platform-compatibility/
- Development Guide → https://narrowin.github.io/networka/development/
- Multi-Vendor Support → https://narrowin.github.io/networka/multi-vendor-support/
- IP Address Support → https://narrowin.github.io/networka/ip-address-support/
- Transport Selection → https://narrowin.github.io/networka/transport/
- Environment Variables → https://narrowin.github.io/networka/environment-variables/
- File Upload Guide → https://narrowin.github.io/networka/file_upload/
- Interactive Credentials → https://narrowin.github.io/networka/interactive-credentials/
Apache License 2.0 - Free for commercial and personal use. No paid tiers, no enterprise versions, no licensing restrictions.
Community-driven project with contributions from narrowin and network engineers worldwide. See GOVERNANCE.md for maintenance and decision-making model.
- Scrapli - Network device connections
- Nornir - Network automation framework
- Netmiko - Multi-vendor CLI connections to network devices
- Typer - CLI framework
- Pydantic - Data validation
- Rich - Terminal formatting
Built for network engineers who value clean, reliable automation

