Skip to content

About

Network engineering calculators, config generators, references, and troubleshooting tools for Cisco, Linux, security, and broadcast/AoIP.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

NetOps Toolkit

Calculators, config generators and reference sheets for network engineers.
Subnetting, Cisco IOS configs, port and protocol lookups, and a broadcast/AoIP section for Livewire and AES67.

Status: in development Version 4.0.0 Node 22.12+ Built with Astro Svelte 5 MIT licence

Live demo · What it does · Install · Make it yours · Deploy · Add a tool · Made by

Warning

NetOps Toolkit is in active development and changes often. Every tool has now been ported over from an older single-script site, but expect rough edges and changes between versions while it settles. Check any generated config before you apply it, and please open an issue if something is wrong.

🔴 See it live: tools.tylerwoodward.me

The Subnet Calculator in NetOps Toolkit

What it does

A static site built with Astro, Tailwind CSS and Svelte. Every tool runs in your browser.

🧮 Calculators

Subnetting, VLSM planning, IP and number conversion, bandwidth. Results update as you type

⌨️ Cisco IOS config generators

VLAN, VRF, ACL, OSPF, BGP, DMVPN, VXLAN and more, plus a CLI reference

📚 References

Ports and protocols, the OSI model, WiFi, fiber and Ethernet cabling, SNMP, WAN services, a glossary and acronym list

🔐 Security

Attack references, a security checklist, and password and RSA key generators that run locally

🎙️ Broadcast and AoIP

Livewire and AES67: LWRP, multicast, ports and bandwidth

🔒 Private by default

Nothing is sent to a server except by the IP Checker, which you can turn off. A strict Content Security Policy (script-src 'self') with no inline code

🍴 Forkable

Rename it, recolor it, hide categories and add your own links from one small config file

Install

On a server

On Debian 12 or Ubuntu 22.04 or newer, one line installs Node, builds the site and runs it as a systemd service:

curl -fsSL https://raw.githubusercontent.com/thetylerwoodwardproject/netops_toolkit/main/deploy/install.sh | sudo bash

That serves it on port 80. To put Caddy in front with automatic HTTPS, add your domain (point its DNS at the server and open ports 80 and 443 first):

curl -fsSL https://raw.githubusercontent.com/thetylerwoodwardproject/netops_toolkit/main/deploy/install.sh | sudo bash -s -- --domain tools.example.com

Run the same line again to upgrade. Other options: --proxy none, --port, --dir, --ref; see deploy/install.sh --help.

With Docker

git clone https://github.com/thetylerwoodwardproject/netops_toolkit && cd netops_toolkit
docker compose up -d --build                                          # http://localhost:8080
SITE_ADDRESS=tools.example.com docker compose --profile caddy up -d --build   # https://tools.example.com

The site is built into the image, so put your toolkit.config.local.ts (see Make it yours) in the checkout before you build.

Run it locally

git clone https://github.com/thetylerwoodwardproject/netops_toolkit && cd netops_toolkit
npm ci
npm run dev          # http://localhost:4321

Make it yours

Don't edit toolkit.config.ts. Create toolkit.config.local.ts next to it (it is gitignored) with only the settings you want to change:

import { defineLocalToolkit } from './src/lib/toolkit-schema';

export default defineLocalToolkit({
  name: 'Acme NetOps',
  icon: 'tower-cell', // any Font Awesome Free icon; 'brands:github' for brand icons
  accent: '#2f7cf6',
  site: 'https://tools.example.com',
  footer: {
    note: 'Run by the Acme network team.',
    links: [{ label: 'Acme', href: 'https://example.com', icon: 'building' }],
  },
  categories: { broadcast: false }, // hide a whole category
  externalLookups: false, // drop the IP Checker; the site then makes no third-party requests
});
Setting What it does
name, tagline Header, page titles, share cards, web manifest
icon Logo and favicon. A Font Awesome Free name; an unknown name fails the build
accent Theme color for buttons, links, highlights and the favicon
site Canonical URL, used by the sitemap and share links
footer A line of text and a list of links, each with an optional icon
categories net101, calculators, reference, cisco, security, operations, broadcast; set any to false to leave it out
externalLookups false removes tools that call third-party services
indexable false serves a robots.txt that refuses crawlers, e.g. for a staging copy

Build and deploy

tools/build          # type-check, build into .build/, verify
tools/publish        # the same into .releases/<stamp>/, then point `dist` at it

tools/publish swaps the dist link only after the build and verification pass, so a broken build never goes live.

Serve dist with node tools/serve.mjs, a small dependency-free server that sends the Content Security Policy the site is built for (the installer and the Docker image run it), or with any static server: deploy/nginx.conf.example is a starting point for nginx.

tools/verify.mjs fails a build that contains any inline script, style or event handler, because the site is meant to run under script-src 'self' and style-src 'self'. It also checks that exactly the enabled tools have pages.

Adding a tool

  1. Add it to src/data/tools.ts: id, name, description, Font Awesome icon, category and search tags.
  2. Create src/tools/<id>/index.astro. Static reference content is plain Astro. For anything interactive, write a Svelte component, render it inside <div data-island="<id>" data-ssr>, and start it from a <script> with start() from src/lib/mount.ts (see src/tools/subnet-calc/). Don't use Astro's client:* directives: they add an inline script the CSP blocks.
  3. Use the shared classes in src/styles/global.css (panel, tip, ref-table, result-grid, form-input, btn…) and Tailwind utilities, never style="".
  4. Drop-downs inside a Svelte island use src/components/SelectField.svelte (label, id, options, bind:value), a shadcn-svelte select. It matches the form-input sizing. Don't use a native <select> for form input, and don't add shadcn components that open popovers without checking them under the CSP (see below).

shadcn-svelte components

components.json is set up, so npx shadcn-svelte@latest add <name> puts a component in src/components/ui/. Its colour tokens are aliased onto this site's palette in global.css, so it follows the theme. After adding one:

  • Replace its icon imports with Icon.svelte (Font Awesome).
  • accent is the brand colour here, but shadcn uses it for hover highlights; use muted for those.
  • Check it with the CSP on: open it, use it, and look for console errors. bits-ui's scroll lock restores the page with setAttribute('style'), which style-src 'self' blocks and leaves the page locked, so select-content defaults to preventScroll = false. Other overlays (dialog, popover) need the same check.

Made by

NetOps Toolkit is made by Tyler Woodward, host of the podcast The Tyler Woodward Project.

The Tyler Woodward Project Facebook Threads Instagram

Licence

MIT © 2026 Tyler Woodward. See LICENSE. Icons are Font Awesome Free (CC BY 4.0).

About

Network engineering calculators, config generators, references, and troubleshooting tools for Cisco, Linux, security, and broadcast/AoIP.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages