<div align="center"><img src="https://raw.githubusercontent.com/narrowin/networka/main/docs/assets/images/networka.png" alt="Networka Logo" width="320"/>
<p><a href="https://narrowin.github.io/networka/">Full documentation →</a></p>
</div>
<br/>
**Networka: `Eierlegende Wollmilchsau` of network operations — optimized for your daily workflows.**
[](https://www.python.org/downloads/)
[](https://github.com/narrowin/networka)
[](https://www.apache.org/licenses/LICENSE-2.0)
[](https://github.com/astral-sh/ruff)
[](http://mypy-lang.org/)
[](https://github.com/narrowin/networka/actions/workflows/ci.yml)
[](https://narrowin.github.io/networka/)
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.
Built entirely with Sonett 4 and GPT-5, this is an agent-mode experiment that turned into something genuinely useful.
---
## _The Networka Monologue_
_“People ask the question…_ <br>
**what’s a Networka?** <br>
And I tell 'em — <br>
it's **not** about cables, configs, and pings. <br>
_Oh no._ <br>
There’s more to it than that, my friend. <br>
We all like a bit of the good life — <br>
some the uptime, some the security, <br>
others the automation, the visibility, or the compliance. <br>
But a **Networka**, oh, they're different. <br>
Why? <br>
Because a real **Networka** wants the f\*ing lot.”<br><br>
(inspired by: [RockNRolla](https://www.youtube.com/watch?v=s4YLBqMJYOo))
## Getting Started
- 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/
## Features
### **Core Capabilities**
- **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
### **Operational Features**
- **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
- **SSH session management**: Direct SSH access with tmux integration for interactive sessions
### **Advanced Features**
- **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
### **Developer & Integration Features**
- **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
## Installation
### System Requirements
- **Operating System**: Linux, macOS, or Windows
- **Python**: 3.11, 3.12, or 3.13
- **Network Access**: SSH connectivity to target devices
- **Package Manager**: uv (recommended) or pip
### Quick Install (recommended)
Not on PyPI yet — install from GitHub.
```bash
# Recommended (isolated, user-wide)
uv tool install git+https://github.com/narrowin/networka.git
# Alternative
pipx install git+https://github.com/narrowin/networka.git
# Verify installation
nw --help
```
#### If `nw` is not found
- Check: `command -v nw` (Linux/macOS) or `where nw` (Windows)
- If using pipx: ensure PATH is set, then reload shell
```bash
pipx ensurepath
exec $SHELL
```
- Linux/macOS: add user bin to PATH if needed
```bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc # or ~/.zshrc
exec $SHELL
```
- Windows (native, best-effort): prefer WSL2; if native, run `pipx ensurepath` and restart the terminal
More → PATH troubleshooting: https://narrowin.github.io/networka/troubleshooting/#path-nw-not-found
### Upgrade & Remove
```bash
# Upgrade to latest version (from GitHub)
uv tool install --force git+https://github.com/narrowin/networka.git
# or
pipx install --force git+https://github.com/narrowin/networka.git
# Remove installation
uv tool uninstall nw
# or
pipx uninstall networka
```
### Platform-Specific Notes
**Linux/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):
```bash
# In Ubuntu on WSL2
curl -LsSf https://astral.sh/uv/install.sh | sh
exec $SHELL
uv tool install git+https://github.com/narrowin/networka.git
nw --help
```
Details → https://narrowin.github.io/networka/platform-compatibility/#wsl2-quickstart-recommended
## Quick Start
Get up and running with config init command:
```bash
# Initialize in default location with interactive prompts
nw config init
```
### One-liners (no config)
Run directly against an IP without creating files. `--platform` selects the network OS driver; `--interactive-auth` prompts for credentials.
```bash
# MikroTik RouterOS
nw run --platform mikrotik_routeros 192.0.2.10 "/system/identity/print" --interactive-auth
```
```bash
# Cisco IOS-XE
nw run --platform cisco_iosxe 198.51.100.20 "show version" --interactive-auth
```
## Terminology: device_type vs hardware platform vs transport
- 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.
## Quick links
- 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/
## CLI overview
- For current usage and commands, see the CLI reference:
- https://narrowin.github.io/networka/reference/cli/
- Quick checks: `nw --help` and `nw --version`
## Community & support
- Visit our [documentation](https://narrowin.github.io/networka/) for detailed guides and examples
- Create [GitHub Issues](https://github.com/narrowin/networka/issues) for bug reports and feature requests
- See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines
- Check [SECURITY.md](SECURITY.md) for security policy and reporting vulnerabilities
## Contributing
Have a look through existing [Issues](https://github.com/narrowin/networka/issues) and [Pull Requests](https://github.com/narrowin/networka/pulls) 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.
[See contribution guide →](CONTRIBUTING.md)
## Documentation
- 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/
## License
This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.
## Acknowledgments
- [Scrapli](https://github.com/carlmontanari/scrapli) - Network device connections
- [Nornir](https://github.com/nornir-automation/nornir) - Network automation framework
- [Netmiko](https://github.com/ktbyers/netmiko) - Multi-vendor CLI connections to network devices
- [Typer](https://github.com/tiangolo/typer) - CLI framework
- [Pydantic](https://github.com/pydantic/pydantic) - Data validation
- [Rich](https://github.com/Textualize/rich) - Terminal formatting
---
_Built for network engineers who value clean, reliable automation_
Raw data
{
"_id": null,
"home_page": null,
"name": "networka",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": "narrowin <contact@narrowin.com>",
"keywords": "async, automation, cli, infrastructure, mikrotik, narrowin, network, networking, routeros",
"author": null,
"author_email": "narrowin <contact@narrowin.com>",
"download_url": "https://files.pythonhosted.org/packages/cf/39/0f074992be5f0758d21b62c3ee5e68fe768a66ae6ee0d5f29ba4b5d6861d/networka-0.1.10.tar.gz",
"platform": null,
"description": "<div align=\"center\"><img src=\"https://raw.githubusercontent.com/narrowin/networka/main/docs/assets/images/networka.png\" alt=\"Networka Logo\" width=\"320\"/>\n\n <p><a href=\"https://narrowin.github.io/networka/\">Full documentation \u2192</a></p>\n</div>\n\n<br/>\n\n**Networka: `Eierlegende Wollmilchsau` of network operations \u2014 optimized for your daily workflows.**\n\n[](https://www.python.org/downloads/)\n[](https://github.com/narrowin/networka)\n[](https://www.apache.org/licenses/LICENSE-2.0)\n[](https://github.com/astral-sh/ruff)\n[](http://mypy-lang.org/)\n[](https://github.com/narrowin/networka/actions/workflows/ci.yml)\n[](https://narrowin.github.io/networka/)\n\nNetworka 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.\n\nBuilt entirely with Sonett 4 and GPT-5, this is an agent-mode experiment that turned into something genuinely useful.\n\n---\n\n## _The Networka Monologue_\n\n_\u201cPeople ask the question\u2026_ <br>\n**what\u2019s a Networka?** <br>\n\nAnd I tell 'em \u2014 <br>\nit's **not** about cables, configs, and pings. <br>\n_Oh no._ <br>\nThere\u2019s more to it than that, my friend. <br>\n\nWe all like a bit of the good life \u2014 <br>\nsome the uptime, some the security, <br>\nothers the automation, the visibility, or the compliance. <br>\n\nBut a **Networka**, oh, they're different. <br>\nWhy? <br>\nBecause a real **Networka** wants the f\\*ing lot.\u201d<br><br>\n(inspired by: [RockNRolla](https://www.youtube.com/watch?v=s4YLBqMJYOo))\n\n## Getting Started\n\n- Installation: see the docs \u2192 https://narrowin.github.io/networka/getting-started/\n- Platform compatibility \u2192 https://narrowin.github.io/networka/platform-compatibility/\n- Shell completion \u2192 https://narrowin.github.io/networka/shell-completion/\n- CLI reference \u2192 https://narrowin.github.io/networka/reference/cli/\n- API reference \u2192 https://narrowin.github.io/networka/reference/api/\n\n## Features\n\n### **Core Capabilities**\n\n- **Multi-vendor network automation**: Native support for MikroTik RouterOS, Cisco IOS/IOS-XE/NX-OS, Arista EOS, Juniper JunOS, and more\n- **Scalable device management**: Execute commands across individual devices or groups\n- **Cross-platform compatibility**: Full support for Linux, macOS, and Windows environments\n- **Flexible configuration**: YAML and CSV configuration options with powerful device tagging and grouping\n\n### **Operational Features**\n\n- **Command execution**: Run single commands or predefined sequences across devices and groups\n- **File management**: Upload/download files to/from network devices with verification and error handling\n- **Device backup**: Automated configuration and comprehensive backups with vendor-specific implementations\n- **Firmware management**: Upgrade, downgrade, and BIOS operations with platform validation\n- **SSH session management**: Direct SSH access with tmux integration for interactive sessions\n\n### **Advanced Features**\n\n- **Intelligent completions**: Context-aware shell completions for devices, groups, and sequences\n- **Vendor-aware sequences**: Predefined command sets optimized for different network platforms\n- **Results management**: Organized storage with multiple output formats and automatic timestamping\n- **Configuration validation**: Schema-based validation with detailed error reporting\n- **Credential management**: Secure credential handling via environment variables with device-specific overrides\n\n### **Developer & Integration Features**\n\n- **Type safety**: Full mypy type checking for reliability and maintainability\n- **Modern architecture**: Built with scalable scrapli and nornir support\n- **Extensible design**: Plugin-friendly architecture for adding new vendors and operations\n- **Rich output**: Professional CLI interface with color coding and structured information display\n\n## Installation\n\n### System Requirements\n\n- **Operating System**: Linux, macOS, or Windows\n- **Python**: 3.11, 3.12, or 3.13\n- **Network Access**: SSH connectivity to target devices\n- **Package Manager**: uv (recommended) or pip\n\n### Quick Install (recommended)\n\nNot on PyPI yet \u2014 install from GitHub.\n\n```bash\n# Recommended (isolated, user-wide)\nuv tool install git+https://github.com/narrowin/networka.git\n\n# Alternative\npipx install git+https://github.com/narrowin/networka.git\n\n# Verify installation\nnw --help\n```\n\n#### If `nw` is not found\n\n- Check: `command -v nw` (Linux/macOS) or `where nw` (Windows)\n- If using pipx: ensure PATH is set, then reload shell\n ```bash\n pipx ensurepath\n exec $SHELL\n ```\n- Linux/macOS: add user bin to PATH if needed\n ```bash\n echo 'export PATH=\"$HOME/.local/bin:$PATH\"' >> ~/.bashrc # or ~/.zshrc\n exec $SHELL\n ```\n- Windows (native, best-effort): prefer WSL2; if native, run `pipx ensurepath` and restart the terminal\n\nMore \u2192 PATH troubleshooting: https://narrowin.github.io/networka/troubleshooting/#path-nw-not-found\n\n### Upgrade & Remove\n\n```bash\n# Upgrade to latest version (from GitHub)\nuv tool install --force git+https://github.com/narrowin/networka.git\n# or\npipx install --force git+https://github.com/narrowin/networka.git\n\n# Remove installation\nuv tool uninstall nw\n# or\npipx uninstall networka\n```\n\n### Platform-Specific Notes\n\n**Linux/macOS**: No additional dependencies required\n\n**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.\n\nWSL2 quickstart (recommended):\n\n```bash\n# In Ubuntu on WSL2\ncurl -LsSf https://astral.sh/uv/install.sh | sh\nexec $SHELL\nuv tool install git+https://github.com/narrowin/networka.git\nnw --help\n```\n\nDetails \u2192 https://narrowin.github.io/networka/platform-compatibility/#wsl2-quickstart-recommended\n\n## Quick Start\n\nGet up and running with config init command:\n\n```bash\n# Initialize in default location with interactive prompts\nnw config init\n\n```\n\n### One-liners (no config)\n\nRun directly against an IP without creating files. `--platform` selects the network OS driver; `--interactive-auth` prompts for credentials.\n\n```bash\n# MikroTik RouterOS\nnw run --platform mikrotik_routeros 192.0.2.10 \"/system/identity/print\" --interactive-auth\n```\n\n```bash\n# Cisco IOS-XE\nnw run --platform cisco_iosxe 198.51.100.20 \"show version\" --interactive-auth\n```\n\n## Terminology: device_type vs hardware platform vs transport\n\n- device_type: Network OS driver used for connections and commands (Scrapli \"platform\"). Examples: mikrotik_routeros, cisco_iosxe, arista_eos, juniper_junos.\n- platform (hardware/firmware): Hardware architecture used for firmware-related operations (x86, x86_64, arm, mipsbe, tile).\n- transport: Connection backend. Default is scrapli.\n\nNote: When targeting IPs directly, `--platform` refers to the network driver (device_type), not hardware architecture.\n\n## Quick links\n\n- Getting started \u2192 https://narrowin.github.io/networka/getting-started/\n- Running commands \u2192 https://narrowin.github.io/networka/running-commands/\n- Configuration \u2192 https://narrowin.github.io/networka/configuration/\n- Environment variables \u2192 https://narrowin.github.io/networka/environment-variables/\n- Results \u2192 https://narrowin.github.io/networka/results/\n- Output modes \u2192 https://narrowin.github.io/networka/output-modes/\n- Backups \u2192 https://narrowin.github.io/networka/backups/\n- CLI reference \u2192 https://narrowin.github.io/networka/reference/cli/\n- API reference \u2192 https://narrowin.github.io/networka/reference/api/\n\n## CLI overview\n\n- For current usage and commands, see the CLI reference:\n - https://narrowin.github.io/networka/reference/cli/\n - Quick checks: `nw --help` and `nw --version`\n\n## Community & support\n\n- Visit our [documentation](https://narrowin.github.io/networka/) for detailed guides and examples\n- Create [GitHub Issues](https://github.com/narrowin/networka/issues) for bug reports and feature requests\n- See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines\n- Check [SECURITY.md](SECURITY.md) for security policy and reporting vulnerabilities\n\n## Contributing\n\nHave a look through existing [Issues](https://github.com/narrowin/networka/issues) and [Pull Requests](https://github.com/narrowin/networka/pulls) 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.\n\n[See contribution guide \u2192](CONTRIBUTING.md)\n\n## Documentation\n\n- Docs Home \u2192 https://narrowin.github.io/networka/\n- Platform Compatibility \u2192 https://narrowin.github.io/networka/platform-compatibility/\n- Development Guide \u2192 https://narrowin.github.io/networka/development/\n- Multi-Vendor Support \u2192 https://narrowin.github.io/networka/multi-vendor-support/\n- IP Address Support \u2192 https://narrowin.github.io/networka/ip-address-support/\n- Transport Selection \u2192 https://narrowin.github.io/networka/transport/\n- Environment Variables \u2192 https://narrowin.github.io/networka/environment-variables/\n- File Upload Guide \u2192 https://narrowin.github.io/networka/file_upload/\n- Interactive Credentials \u2192 https://narrowin.github.io/networka/interactive-credentials/\n\n## License\n\nThis project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.\n\n## Acknowledgments\n\n- [Scrapli](https://github.com/carlmontanari/scrapli) - Network device connections\n- [Nornir](https://github.com/nornir-automation/nornir) - Network automation framework\n- [Netmiko](https://github.com/ktbyers/netmiko) - Multi-vendor CLI connections to network devices\n- [Typer](https://github.com/tiangolo/typer) - CLI framework\n- [Pydantic](https://github.com/pydantic/pydantic) - Data validation\n- [Rich](https://github.com/Textualize/rich) - Terminal formatting\n\n---\n\n_Built for network engineers who value clean, reliable automation_\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Modern Python cli toolkit for network device automation",
"version": "0.1.10",
"project_urls": {
"Bug Tracker": "https://github.com/narrowin/networka/issues",
"CI/CD": "https://github.com/narrowin/networka/actions",
"Changelog": "https://github.com/narrowin/networka/blob/main/CHANGELOG.md",
"Documentation": "https://narrowin.github.io/networka/",
"Homepage": "https://github.com/narrowin/networka",
"Repository": "https://github.com/narrowin/networka.git",
"Source Code": "https://github.com/narrowin/networka"
},
"split_keywords": [
"async",
" automation",
" cli",
" infrastructure",
" mikrotik",
" narrowin",
" network",
" networking",
" routeros"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "d64781631bc8fc76a7b482747c721ee9d9ac200b263aa6b6c0aa1550ce060fec",
"md5": "ae8b6420b7617b39bae42f68d245aeaf",
"sha256": "d3143d800388a26bc72b28edf112a6bd776298fb5cc9d22ec52d05bfd8c09b6d"
},
"downloads": -1,
"filename": "networka-0.1.10-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ae8b6420b7617b39bae42f68d245aeaf",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 207524,
"upload_time": "2025-09-01T08:46:37",
"upload_time_iso_8601": "2025-09-01T08:46:37.800505Z",
"url": "https://files.pythonhosted.org/packages/d6/47/81631bc8fc76a7b482747c721ee9d9ac200b263aa6b6c0aa1550ce060fec/networka-0.1.10-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cf390f074992be5f0758d21b62c3ee5e68fe768a66ae6ee0d5f29ba4b5d6861d",
"md5": "22a8074a4855940252f9f98e082b708a",
"sha256": "10256c78d80c4e9a9fc31eb93101986b28ff4340041a083149efe1f6c65aaa8d"
},
"downloads": -1,
"filename": "networka-0.1.10.tar.gz",
"has_sig": false,
"md5_digest": "22a8074a4855940252f9f98e082b708a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 553769,
"upload_time": "2025-09-01T08:46:40",
"upload_time_iso_8601": "2025-09-01T08:46:40.585043Z",
"url": "https://files.pythonhosted.org/packages/cf/39/0f074992be5f0758d21b62c3ee5e68fe768a66ae6ee0d5f29ba4b5d6861d/networka-0.1.10.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-01 08:46:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "narrowin",
"github_project": "networka",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "networka"
}