Metadata-Version: 2.4
Name: gns3-server
Version: 3.1.0a2
Summary: GNS3 graphical interface for the GNS3 server.
Author-email: Jeremy Grossmann <developers@gns3.com>
Project-URL: Homepage, http://gns3.com
Project-URL: Repository, http://github.com/GNS3/gns3-server
Project-URL: Bug tracker, http://github.com/GNS3/gns3-server/issues
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Framework :: FastAPI
Classifier: Intended Audience :: Information Technology
Classifier: Topic :: System :: Networking
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Natural Language :: English
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: Implementation :: CPython
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: uvicorn==0.46.0
Requires-Dist: pydantic==2.13.4
Requires-Dist: fastapi==0.136.1
Requires-Dist: python-multipart==0.0.27
Requires-Dist: websockets==16.0
Requires-Dist: aiohttp<3.14,>=3.13.5
Requires-Dist: aiofiles<26.0,>=25.1.0
Requires-Dist: Jinja2<3.2,>=3.1.6
Requires-Dist: sentry-sdk<3,>=2.59.0
Requires-Dist: psutil>=7.2.2
Requires-Dist: async-timeout<5.1,>=5.0.1; python_version < "3.11"
Requires-Dist: distro>=1.9.0
Requires-Dist: py-cpuinfo<10.0,>=9.0.0
Requires-Dist: greenlet==3.4.0; python_version >= "3.13"
Requires-Dist: sqlalchemy==2.0.49
Requires-Dist: aiosqlite==0.22.1
Requires-Dist: alembic==1.18.4
Requires-Dist: bcrypt==5.0.0
Requires-Dist: joserfc==1.6.4
Requires-Dist: email-validator==2.3.0
Requires-Dist: watchdog==6.0.0
Requires-Dist: zstandard==0.25.0
Requires-Dist: platformdirs<3,>=2.4.0
Requires-Dist: truststore>=0.10.4; python_version >= "3.10"
Requires-Dist: telnetlib3==4.0.2
Requires-Dist: asyncssh<3,>=2.21.0
Requires-Dist: typing-extensions>=4.15.0
Requires-Dist: requests>=2.33.1
Requires-Dist: urllib3>=2.6.2
Provides-Extra: dev
Requires-Dist: pytest==9.0.3; extra == "dev"
Requires-Dist: flake8==7.3.0; extra == "dev"
Requires-Dist: pytest-timeout==2.4.0; extra == "dev"
Requires-Dist: pytest-asyncio==1.2.0; python_version == "3.9" and extra == "dev"
Requires-Dist: pytest-asyncio==1.3.0; python_version >= "3.10" and extra == "dev"
Requires-Dist: httpx==0.28.1; extra == "dev"
Requires-Dist: httpx_ws==0.7.2; extra == "dev"
Provides-Extra: ai-copilot
Requires-Dist: langchain>=1.2.10; extra == "ai-copilot"
Requires-Dist: langchain-core>=1.2.16; extra == "ai-copilot"
Requires-Dist: langgraph>=1.0.9; extra == "ai-copilot"
Requires-Dist: langgraph-checkpoint>=4.0.0; extra == "ai-copilot"
Requires-Dist: langgraph-checkpoint-sqlite>=3.0.3; extra == "ai-copilot"
Requires-Dist: langgraph-checkpoint-postgres>=3.0.4; extra == "ai-copilot"
Requires-Dist: langchain-openai>=1.1.10; extra == "ai-copilot"
Requires-Dist: langchain-anthropic>=1.3.4; extra == "ai-copilot"
Requires-Dist: langchain-google-genai>=4.2.1; extra == "ai-copilot"
Requires-Dist: langchain-aws>=1.3.1; extra == "ai-copilot"
Requires-Dist: langchain-ollama>=1.0.1; extra == "ai-copilot"
Requires-Dist: langchain-deepseek>=1.0.1; extra == "ai-copilot"
Requires-Dist: langchain-xai>=1.2.2; extra == "ai-copilot"
Requires-Dist: tiktoken>=0.8.0; extra == "ai-copilot"
Requires-Dist: langsmith>=0.7.7; extra == "ai-copilot"
Requires-Dist: netmiko>=4.6.0; extra == "ai-copilot"
Requires-Dist: nornir>=3.5.0; extra == "ai-copilot"
Requires-Dist: nornir-netmiko>=1.0.1; extra == "ai-copilot"
Requires-Dist: nornir-utils>=0.2.0; extra == "ai-copilot"
Requires-Dist: nornir-salt>=0.23.0; extra == "ai-copilot"
Requires-Dist: python-dotenv>=1.2.1; extra == "ai-copilot"
Requires-Dist: PyJWT>=2.10.1; extra == "ai-copilot"
Requires-Dist: psycopg-pool>=3.1.0; extra == "ai-copilot"
Requires-Dist: PyYAML>=6.0.0; extra == "ai-copilot"
Requires-Dist: GitPython>=3.1.0; extra == "ai-copilot"
Dynamic: license-file

# GNS3 server repository

[![Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![GitHub Actions tests](https://github.com/GNS3/gns3-server/workflows/testing/badge.svg?branch=3.0)](https://github.com/GNS3/gns3-server/actions?query=workflow%3Atesting+branch%3A3.0)
[![Latest PyPi version](https://img.shields.io/pypi/v/gns3-server.svg)](https://pypi.python.org/pypi/gns3-server)
[![Snyk scanning](https://snyk.io/test/github/GNS3/gns3-server/badge.svg)](https://snyk.io/test/github/GNS3/gns3-server)

The GNS3 server manages emulators and other virtualization software such as Dynamips, Qemu/KVM, Docker, VPCS, VirtualBox and VMware Workstation.
Clients like the [GNS3 GUI](https://github.com/GNS3/gns3-gui/) and the [GNS3 Web UI](https://github.com/GNS3/gns3-web-ui/) control the server using a HTTP REST API.

## Installation

These instructions are for using GNS3, please see below for development.

### Windows & macOS

Please use our [Windows installer or DMG package](https://gns3.com/software/download) to install the stable build along with the GNS3 VM.
Note that as of GNS3 version above 3.0, you must run the server using the GNS3 VM or on a Linux system (remote, cloud or virtual machine).

### Linux

#### Ubuntu based distributions

We build and test packages for actively supported Ubuntu versions.
Other distros based on Ubuntu, like Mint, should also be supported.

Packages can be installed from our Personal Package Archives (PPA) repository:

```shell
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:gns3/ppa
sudo apt update                                
sudo apt install gns3-gui gns3-server
```

#### Other Linux distributions

GNS3 is often packaged for other distributions by third-parties:

* [Gentoo](https://packages.gentoo.org/package/net-misc/gns3-server)
* [Alpine](https://pkgs.alpinelinux.org/package/v3.10/community/x86_64/gns3-server)
* [NixOS](https://search.nixos.org/packages?channel=21.11&from=0&size=50&sort=relevance&type=packages&query=gns3-server)

#### PyPi

You may use PyPi in case no package is provided, or you would like to do a manual installation:

* https://pypi.org/project/gns3-server/
* https://pypi.org/project/gns3-gui/

```shell
python3 -m pip install gns3-gui
python3 -m pip install gns3-server
```

#### Optional Features

GNS3 server supports optional features that can be installed as needed:

**AI Copilot** (Optional):
```shell
python3 -m pip install gns3-server[ai-copilot]
```
AI-powered assistant for network topology design and automation.

**Development** (For contributors):
```shell
python3 -m pip install gns3-server[dev]
```

**Web Wireshark** (Optional):
```shell
pip install gns3-server && gns3server-web-wireshark-setup
```
Browser-based packet capture analysis using Wireshark in a Docker container.

**Combination Installation**:
You can install multiple optional features together:
```shell
python3 -m pip install gns3-server[ai-copilot,dev]
```

**Why optional?**
- Reduces installation size for users who don't need specific features
- Supports restricted environments (government, education, corporate) where certain libraries may not be allowed
- Faster installation for basic GNS3 usage
- Allows users to choose only the features they need

**Note:** If you install without optional extras, the server will work normally but optional features will be disabled. You can add features later by running the appropriate install command.

**Uninstalling AI Copilot:**

To remove AI Copilot dependencies:

```shell
gns3server-uninstall-ai-copilot
```

This will remove all AI Copilot dependencies while keeping the core functionality intact. The server will continue to work, but AI features will return a 501 (Not Implemented) status code.

The downside of this method is you will have to manually install all dependencies (see below).

Please see our [documentation](https://docs.gns3.com/docs/getting-started/installation/linux) for more details.

### Software dependencies

In addition to Python dependencies, other software may be required, recommended or optional.

* [uBridge](https://github.com/GNS3/ubridge/) is required, it interconnects the nodes.
* [Dynamips](https://github.com/GNS3/dynamips/) is required for running IOS routers (using real IOS images) as well as the internal switches and hubs.
* [VPCS](https://github.com/GNS3/vpcs/) is recommended, it is a builtin node simulating a very simple computer to perform connectivity tests using ping, traceroute etc.
* Qemu is strongly recommended as most node types are based on Qemu, for example Cisco IOSv and Arista vEOS.
* libvirt is recommended as it's needed for the NAT cloud.
* Docker is optional, some nodes are based on Docker.
* mtools is recommended to support data transfer to/from QEMU VMs using virtual disks.
* i386-libraries of libc and libcrypto are optional, they are only needed to run IOU based nodes.

Note that Docker needs the script program (`bsdutils` or `util-linux` package), when running a Docker VM and a static busybox during installation (python3 setup.py install / pip3 install / package creation).

## Development

### Setting up

These commands will install the server with core Python dependencies:

```shell
git clone https://github.com/GNS3/gns3-server
cd gns3-server
git checkout 3.0
python3 -m venv venv-gns3server
source venv-gns3server/bin/activate
python3 -m pip install .
python3 -m gns3server
```

**For AI Copilot development**, install with additional dependencies:

```shell
python3 -m pip install .[ai-copilot,dev]
```

**For development (tests and linting)**:

```shell
python3 -m pip install .[dev]
```

You will have to manually install other software dependencies (see above), for Dynamips, VPCS and uBridge the easiest is to install from our PPA.

### Docker container

Alternatively, you can run the GNS3 server in a container

```shell
bash scripts/docker_dev_server.sh
```

#### use Docker Compose

``` {.bash}
docker compose up -d
```

### Running tests

First, install the development dependencies:

```shell
python3 -m pip install -r dev-requirements.txt
```

Then run the tests using pytest:

```shell
python3 -m pytest -vv tests/
```

### API documentation

The API documentation can be accessed when running the server locally:

* On `http://IP:PORT/docs` to see with Swagger UI (i.e. `http://localhost:3080/docs`)
* On `http://IP:PORT/redoc` to see with ReDoc (i.e. `http://localhost:3080/redoc`)

The documentation can also be viewed [online](http://apiv3.gns3.net) however it may not be the most up-to-date version since it needs manually synchronization with the current code. Also, you cannot use this to interact with a GNS3 server.

### Branches

#### master

master is the next stable release, you can test it in your day-to -day activities.
Bug fixes or small improvements pull requests go here.

3.x development brand for the next major release.

**Never** use this branch for production. Pull requests for major new features go here.
