Skip to main content

Modern Python cli toolkit for network device automation

Project description


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.

Python 3.11+ Platform License: Apache-2.0 Code style: ruff Type checked with mypy Docs

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 with the help of agentic-AI with humans in the loop, this started as an experiment that turned into something genuinely useful.


The Networka Monologue

“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)

Getting Started

Networka Setup Demo

Networka setup and command execution demo

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
  • CLI session management: Direct CLI 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.

# 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
    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 ensurepath and restart the terminal

More → PATH troubleshooting: https://narrowin.github.io/networka/troubleshooting/#path-nw-not-found

Upgrade & Remove

# 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):

# 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:

# 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.

# 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

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

CLI overview

Community & support

Contributing

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.

See contribution guide →

Documentation

License

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.

Acknowledgments

  • 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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

networka-0.1.13.tar.gz (7.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

networka-0.1.13-py3-none-any.whl (224.9 kB view details)

Uploaded Python 3

File details

Details for the file networka-0.1.13.tar.gz.

File metadata

  • Download URL: networka-0.1.13.tar.gz
  • Upload date:
  • Size: 7.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.8

File hashes

Hashes for networka-0.1.13.tar.gz
Algorithm Hash digest
SHA256 68ee864049b3360e84e87673fd9b86f66281563c812dbe107b2308e4fe71279a
MD5 010f3c377858cf2490435d9380f77966
BLAKE2b-256 8eff82cf538b9fa98f25db5b444439c877fbd1450040f9148775c07688e5a0a8

See more details on using hashes here.

File details

Details for the file networka-0.1.13-py3-none-any.whl.

File metadata

  • Download URL: networka-0.1.13-py3-none-any.whl
  • Upload date:
  • Size: 224.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.8

File hashes

Hashes for networka-0.1.13-py3-none-any.whl
Algorithm Hash digest
SHA256 3c53c415d6a7b6f3b6abbc2e7f1b6a60ef5355cd6ddbc41cf3927a143e37ba3f
MD5 a1e5ebb4107153ef00f46c2c2c3b0e05
BLAKE2b-256 bf52b4439cc170d983cb9cba200f2b05acec123927b6f7a1d8ef2bc2d742df5b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page