text:
<!--lint disable double-link-->
# Awesome SNMP [![Awesome](https://awesome.re/badge.svg)](https://awesome.re)
[![Awesome lint](https://github.com/eozer/awesome-snmp/actions/workflows/awesome-lint.yml/badge.svg)](https://github.com/eozer/awesome-snmp/actions/workflows/awesome-lint.yml)

[Simple Network Management Protocol (SNMP)](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol) is an Internet Standard protocol for collecting and organizing information about managed devices on IP networks and for modifying that information to change device behaviour.

This is a curated list of awesome SNMP libraries, tools, and other resources. Contributions are welcome!

## Contents
- [Libraries](#libraries)
  - [C/C++](#cc)
  - [C#](#c)
  - [Erlang](#erlang)
  - [Go](#go)
  - [Java](#java)
  - [JavaScript](#javascript)
  - [Lua](#lua)
  - [PHP](#php)
  - [Python](#python)
  - [Ruby](#ruby)
  - [Rust](#rust)
- [Tools](#tools)
  - [CLIs](#clis)
  - [GUIs](#guis)
- [Publications](#publications)
  - [Books](#books)
  - [RFCs](#rfcs)
  - [Tutorials](#tutorials)
- [Public servers](#public-servers)
- [MIB repositories](#mib-repositories)
- [Miscellaneous](#miscellaneous)

## Libraries
_Helpful to write SNMP applications._

### C/C++
- [net-snmp](http://www.net-snmp.org/) - A suite of software for using and deploying the SNMP protocol (v1, v2c and v3 and the AgentX subagent protocol). Contains also Python bindings.
- [SNMP++](https://www.agentpp.com/api/cpp/snmp_pp.html) - BSD licensed SNMP implemention from HP. Supports SNMP v1/2c/v3, thread-safety, and many more.
- [AGENT++](https://www.agentpp.com/api/cpp/agent_pp.html) - The AGENT++ C++ framework provides a complete tri-lingual SNMP v1/2c/3 protocol engine and dispatcher for the development of SNMP agents. Apache licensed.
- [AgentX++](https://www.agentpp.com/api/cpp/agentx_pp.html) - The AgentX++ C++ framework provides a complete AgentX protocol (RFC 2741) implementation that adds AgentX master and sub-agent support to AGENT++ (`Commercial`).
- [openSNMP](https://sourceforge.net/projects/opensnmp/) - BSD licensed multi-threaded implementation of SNMPv3.

### C#
- [sharpSNMP](https://github.com/lextudio/sharpsnmplib) - MIT licensed SNMP library for .NET/Xamarin/Mono.
- [SnmpSharpNet](https://github.com/rqx110/SnmpSharpNet) - Simple Network Management Protocol (SNMP) .Net library written in C# (csharp). Implements protocol version 1, 2 and 3.

### Erlang
- [Erlang/OTP SNMP](https://www.erlang.org/doc/apps/snmp/users_guide.html) - SNMP development is included as a component of the Erlang/Open Telecom Platform development environment.

### Go
- [gosnmp/gosnmp](https://github.com/gosnmp/gosnmp) - An SNMP library written in Go. It provides Get, GetNext, GetBulk, Walk, BulkWalk, Set and Traps. It supports IPv4/IPv6, using SNMP v1/v2c/v3.
- [sleepinggenius2/gosmi](https://github.com/sleepinggenius2/gosmi) - MIB parser in Go language.
- [posteo/go-agentx](https://github.com/posteo/go-agentx) - A library with a pure Go implementation of the AgentX-Protocol.

### Java
- [SNMP4J](https://www.agentpp.com/api/java/snmp4j.html) - SNMP4J is an enterprise class, free open source, and state-of-the-art SNMP v1/2c/v3 implementation for Java™.
- [SNMP4J-Agent](https://www.agentpp.com/api/java/snmp4jagent.html) - SNMP4J-Agent is a Java™ API on top of the core SNMP4J API for the development of SNMP agents (command responders).
- [joeSNMP](https://sourceforge.net/projects/joesnmp/) - joeSNMP is an open-source Java SNMP class library published under the LGPL.
- [Westhawk's SNMP](https://snmp.westhawk.co.uk/) - An open-sourced Java library that can be used for SNMP v1/v2c/v3. Supports traps, authentication and privacy. As authentication protocols it offers MD5 and SHA1.
- [mibble](https://github.com/cederberg/mibble) - Mibble is an open-source SNMP MIB (or SMI) parser library for Java.

### JavaScript
- [node-net-snmp](https://github.com/markabrahams/node-net-snmp) -  JavaScript implementation of the Simple Network Management Protocol (SNMP), implements versions 1, 2c and 3.
- [node-snmp-native](https://github.com/calmh/node-snmp-native) -  Native JavaScript SNMP library for Node.js.
- [node-snmpjs](https://github.com/joyent/node-snmpjs) - This package provides a toolkit for SNMP agents and management applications in Node.js.
- [snmp-node](https://github.com/neias/snmp-node) - Native JavaScript SNMP library for Node.js.

### Lua
- [luasnmp](https://github.com/hleuwer/luasnmp) - Lua binding to net-snmp library.

### PHP
- [php.net/SNMP](https://www.php.net/manual/en/book.snmp.php) - This is an SNMP extension for PHP, which is a wrapper around the net-snmp library.
- [FreeDSx/SNMP](https://github.com/FreeDSx/SNMP) - A Pure PHP SNMP Library.
- [opensolutions/OSS_SNMP](https://github.com/opensolutions/OSS_SNMP) - A PHP SNMP library for people who hate SNMP, MIBs and OIDs!

### Python
- [pysnmp](https://github.com/etingof/pysnmp) - This is a pure-Python, open source and free implementation of v1/v2c/v3 SNMP engine distributed under 2-clause BSD license.
  - This project has been abandoned [due to the death of the sole maintainer](https://github.com/etingof/pysnmp/issues/427).
  - Some forks have been created to continue the project and the ecosystem around it. See [here](https://github.com/etingof/pysnmp/issues/429).
  - The leading fork seems to be [lextudio/pysnmp](https://github.com/lextudio/pysnmp).
  - There is also a [community fork](https://github.com/pysnmp/pysnmp) under active development, but it is not clear if that project is commited to maintaining all the associated repos, documentation, and websites.
- [pysmi](https://github.com/etingof/pysmi) - PySMI is a pure-Python implementation of SNMP SMI MIB parser.
  - Abandoned for the same reason as the above pysnmp project. See [lextudio/pysmi](https://github.com/lextudio/pysmi).
- [net-snmp Python bindings](http://www.net-snmp.org/wiki/index.php/Python_Bindings) - Net-SNMP 5.4 and later contains Python bindings in the "python" sub-directory, though, they are not built by default.
- [puresnmp](https://github.com/exhuma/puresnmp) - Pure Python3 SNMPv2 library without any dependencies.
- [snimpy](https://github.com/vincentbernat/snimpy) - Snimpy is a Python-based tool providing a simple interface to build SNMP query.
- [python-netsnmpagent](https://github.com/pief/python-netsnmpagent) - This package allows to write net-snmp subagents in Python.
- [hnmp](https://github.com/trehn/hnmp) - HNMP is a high-level Python library to ease the pain of retrieving and processing data from SNMP-capable devices such as network switches, routers, and printers.
  - No development since November 2021.
- [aiosnmp](https://github.com/hh-h/aiosnmp) - Python package aiosnmp is an asynchronous SNMP client for use with asyncio. Only SNMP v2c is supported.
- [robotframework-snmplibrary](https://github.com/kontron/robotframework-snmplibrary) - SNMPLibrary is a Robot Framework test library for testing SNMP.
- [Scapy](https://github.com/secdev/scapy) - Packet manipulation program & library. Scapy has a [module](https://github.com/secdev/scapy/blob/master/scapy/layers/snmp.py) to build/dissect SNMP packets.

### Ruby
- [ruby-netsnmp](https://github.com/swisscom/ruby-netsnmp) - SNMP library in ruby (v1, v2c, v3).

### Rust
- [snmp-parser](https://github.com/rusticata/snmp-parser) - SNMP parser written in rust with nom parser combinator framework.
- [davedufresne/modern_snmp](https://github.com/davedufresne/modern_snmp) - Modern SNMP is a pure-Rust library for SNMPv3. This repository includes snmp_mp (SNMPv3 Message Processing) and snmp_usm (Implementation of the User-based Security Model (USM) for SNMPv3) crates.
- [Svedrin/sunt](https://github.com/Svedrin/sunt) - This repository implements an SNMP Agent written in Rust.

**[⬆ back to top](#contents)**

## Tools
_You use these to work with SNMP easier._

### CLIs
- [net-snmp tools](http://www.net-snmp.org/) - The applications listed here are part of net-snmp.
  - [encode_keychange](http://www.net-snmp.org/docs/man/encode_keychange.html) - Produces the KeyChange string for SNMPv3.
  - [snmptranslate](http://www.net-snmp.org/docs/man/snmptranslate.html) - Translates MIB OID names between numeric and textual forms.
  - [snmpget](http://www.net-snmp.org/docs/man/snmpget.html) - Communicates with a network entity using SNMP GET requests.
  - [snmpgetnext](http://www.net-snmp.org/docs/man/snmpgetnext.html) - Communicates with a network entity using SNMP GETNEXT requests.
  - [snmpbulkget](http://www.net-snmp.org/docs/man/snmpbulkget.html) - Communicates with a network entity using SNMP GETBULK requests.
  - [snmpwalk](http://www.net-snmp.org/docs/man/snmpwalk.html) - Retrieves a subtree of management values using SNMP GETNEXT requests.
  - [snmpbulkwalk](http://www.net-snmp.org/docs/man/snmpbulkwalk.html) - Retrieves a subtree of management values using SNMP GETBULK requests.
  - [snmpset](http://www.net-snmp.org/docs/man/snmpset.html) - Communicates with a network entity using SNMP SET requests.
  - [snmptest](http://www.net-snmp.org/docs/man/snmptest.html) - Communicates with a network entity using SNMP requests.
  - [snmptable](https://net-snmp.sourceforge.io/docs/man/snmptable.html) - Retrieve an SNMP table and display it in tabular form.
  - [snmpdelta](https://net-snmp.sourceforge.io/docs/man/snmpdelta.html) - Monitor delta differences in SNMP Counter values.
  - [snmpusm](http://www.net-snmp.org/docs/man/snmpusm.html) - Manipulates the SNMPv3 User-based-security user table.
  - [snmpvacm](http://www.net-snmp.org/docs/man/snmpvacm.html) - Manipulates the SNMPv3 View-based-access-control-module configuration tables.
  - [snmpstatus](https://net-snmp.sourceforge.io/docs/man/snmpstatus.html) - Retrieves a fixed set of management information from a network entity.
  - [snmpnetstat](https://net-snmp.sourceforge.io/docs/man/snmpnetstat.html) - Display networking status and configuration information from a network entity via SNMP.
  - [snmpdf](http://www.net-snmp.org/docs/man/snmpdf.html) - Displays disk information like the unix df tool using information collected from SNMP.
  - [snmptrap](http://www.net-snmp.org/docs/man/snmptrap.html) - Sends SNMP TRAP or INFORM notification messages.
  - [snmpinform](http://www.net-snmp.org/docs/man/snmptrap.html) - Send INFORM notification messages. snmpinform command is functionally the same as snmptrap -Ci.
  - [snmptrapd](http://www.net-snmp.org/docs/man/snmptrapd.html) - An SNMP daemon that listens for SNMP TRAPs or INFORMs and logs or acts upon them.
  - [traptoemail](https://net-snmp.sourceforge.io/docs/man/traptoemail.html) - This an snmptrapd handler script to convert snmp traps into emails.
  - [net-snmp-config](https://net-snmp.sourceforge.io/docs/man/net-snmp-config.html) - Returns information about installed net-snmp libraries and binaries.
  - [snmpconf](https://net-snmp.sourceforge.io/docs/man/snmpconf.html) - Creates and modifies SNMP configuration files.
  - [fixproc](https://net-snmp.sourceforge.io/docs/man/fixproc.html) - Fixes a process by performing the specified action.
  - [snmpd](http://www.net-snmp.org/docs/man/snmpd.html) - An SNMP agent that responds to SNMP requests for a given host.
  - [mib2c](https://net-snmp.sourceforge.io/docs/man/mib2c.html) - A MIB conversion utility that can translate MIB structures into other forms, such as C-code.
  - [mib2c-update](https://net-snmp.sourceforge.io/docs/man/mib2c-update.html) - This a script to merge custom code into updated mib2c code.
- [SNMP4JCLT](https://www.agentpp.com/tools/snmp4jclt.html) - Use the SNMP4J Command Line Tool (CLT) to send SNMPv1/v2c/v3 requests and traps to a target with IPv4 or v6 based UDP, TCP, or TLSv1,2 transport (`Commercial`).
- [libsmi tools](https://www.ibr.cs.tu-bs.de/projects/libsmi/) - Applications built on top of libsmi and an sh/awk script that are integrated with the libsmi distribution.
  - [smilint](https://www.ibr.cs.tu-bs.de/projects/libsmi/smilint.html) - This is used to check MIB or PIB modules for syntax errors and semantics at some degree. SMIv1/v2 style MIB modules as well as SPPI PIB modules are supported.
  - [smidump](https://www.ibr.cs.tu-bs.de/projects/libsmi/smidump.html) - This is a MIB/PIB compiler. It allows to dump the contents of a module in various formats: SMIv1, SMIv2, SMIng, SPPI, Import Trees, Type Definition Trees, OID Node Trees, MOSY Style, and CORBA IDL definitions according to the JIDM Specs, and others.
  - [smidiff](https://www.ibr.cs.tu-bs.de/projects/libsmi/smidiff.html) - This is a tool that parses two revisions of a MIB module and analyzes the modifications from the old to the new revision.
  - [smiquery](https://www.ibr.cs.tu-bs.de/projects/libsmi/smiquery.html) - This is a MIB/PIB query front end. It can be used to query single items from the command line.
  - [smistrip](https://www.ibr.cs.tu-bs.de/projects/libsmi/smistrip.html) - This is a simple shell/awk script that allows to extract MIB and PIB modules from documents, such as RFCs or Internet Drafts.
- [snmpsim](https://github.com/etingof/snmpsim) - This is a pure-Python, open source and free implementation of SNMP agents simulator distributed under 2-clause BSD license.
- [snmpfwd](https://github.com/etingof/snmpfwd) - The SNMP Proxy Forwarder tool works as an application-level proxy with a built-in SNMP message router. Typical use case for an SNMP proxy is to work as an application-level firewall or a protocol translator that enables SNMPv3 access to a SNMPv1/SNMPv2c entity or vice versa.
- [snmpclitools](https://github.com/etingof/snmpclitools) - This is a collection of command-line SNMP tools written in pure-Python. The tools mimic their famous Net-SNMP counterparts. It includes snmpget.py, snmpset.py, snmpwalk.py, snmpbulkwalk.py, snmptrap.py, and snmptranslate.py, see [here](https://snmplabs.thola.io/snmpclitools/) for more details.
- [snmpwn](https://github.com/hatlord/snmpwn) - SNMPwn is an SNMPv3 user enumerator and attack tool.
- [trapperkeeper](https://github.com/dropbox/trapperkeeper) - A suite of tools for ingesting and displaying SNMP traps. This is designed as a replacement for snmptrapd and to supplement existing stateful monitoring solutions.
- [SNMP Trap Translator](http://www.snmptt.org/) - SNMPTT (SNMP Trap Translator) is an SNMP trap handler written in Perl for use with the Net-SNMP / UCD-SNMP snmptrapd program (www.net-snmp.org).
  - [snmptt](http://www.snmptt.org/docs/snmptt.shtml) - SNMPTT (SNMP Trap Translator) is an SNMP trap handler written in Perl for use with the Net-SNMP / UCD-SNMP snmptrapd program (www.net-snmp.org). SNMPTT supports Linux, Unix and Windows.
  - [snmpttconvert](http://www.snmptt.org/docs/snmpttconvert.shtml) - Some vendors provide a file that can be imported into HP Openview using a HP Openview utility. snmpttconvert is a simple Perl script which will convert one of these files into the format used by snmptt.
  - [snmpttconvertmib](http://www.snmptt.org/docs/temp/snmpttconvertmib.shtml) - The snmpttconvertmib is a Perl script which will read a MIB file and convert the TRAP-TYPE (v1) or NOTIFICATION-TYPE (v2) definitions into a configuration file readable by snmptt.
- [prometheus/snmp_exporter](https://github.com/prometheus/snmp_exporter) - This exporter is the recommended way to expose SNMP data in a format which Prometheus can ingest.
- [trailofbits/onesixtyone](https://github.com/trailofbits/onesixtyone) - Fast SNMP Scanner.
- [SECFORCE/SNMP-Brute](https://github.com/SECFORCE/SNMP-Brute) - Fast SNMP brute force, enumeration, CISCO config downloader and password cracking script.
- [hatlord/snmpwn](https://github.com/hatlord/snmpwn) - An SNMPv3 User Enumerator and Attack tool.
- [zabbix-tools/mib2zabbix](https://github.com/zabbix-tools/mib2zabbix) - This Perl script will generate a Zabbix v3 Template in XML format from an OID tree in a SNMP MIB file.
- [OIDrage](https://github.com/patrickscottbest/OIDrage) - A lightweight standalone SNMPd mimic server based on any snmpwalk output. Easily scales to mock thousands of servers.

### GUIs
- [tkmib](http://www.net-snmp.org/) - A perl/Tk interactive graphical MIB browser for SNMP.
- [agentpp/MIB Designer](https://www.agentpp.com/tools/mibdesigner.html) - Use MIB Designer to create, edit, manage, and explore SMI specifications (`Commercial`).
- [agentpp/MIB Explorer Pro](https://www.agentpp.com/tools/mibexplorer.html) - Use MIB Explorer to browse, configure, test&debug, monitor, and discover SNMPv1/2c/3 entities.
- [sharpsnmp/SNMP Pro](https://www.sharpsnmp.com/) - A family of .NET based SNMP products, including the commercial MIB Compiler, MIB Assembly, and the open source Library.
- [paessler/snmptester](https://www.paessler.com/tools/snmptester) - This tool enables you to debug SNMP activities to find communication and/or data issues in SNMP monitoring configurations. Windows.
- [ireasoning/MIB Browser](http://ireasoning.com/mibbrowser.shtml) - This tool allows users to load standard, proprietary MIBs, and even some mal-formed MIBs. It also allows them to issue SNMP requests to retrieve agent's data, or make changes to the agent. Free for personal use.
- [ireasoning/SNMP Agent Simulator](http://ireasoning.com/snmpsimulator.shtml) - Free SNMP Agent Simulator Java based application that can simulate SNMPv1/v2c/v3 agents.
- [Visual SNMP](https://github.com/sisraell/VisualSNMP) - Visual SNMP is a simple tool for testing access to SNMP agents. Currently SNMPGET and SNMPWALK are supported with some limited funcionality.
- [muonics/Online MIB validator](http://www.muonics.com/Tools/smicheck.php) - Free online MIB/PIB Validator based on MIB Smithy SDK.
- [toni-moreno/snmpcollector](https://github.com/toni-moreno/snmpcollector) - SnmpCollector is a full featured Generic SNMP data collector with Web Administration Interface Open Source tool which has as main goal simplify the configuration for getting data from any device which snmp protocol support and send resulting data to an influxdb backend.
- [Unbrowse SNMP](https://www.unleashnetworks.com/products/unbrowse-snmp.html) - Unbrowse SNMP is a tool that helps to compile cryptic MIB files into an easy GUI view, retrieve and set MIB variables on devices, import snmpwalk dumps, receive traps, chart counters, and much more.

**[⬆ back to top](#contents)**

## Publications
_How-to's, tutorials, blog posts, documentation and books._

### Books
- [The Networknomicon, or SNMP Mastery by Abdul Alhazred and Michael W. Lucas](https://mwl.io/nonfiction/networking#networknomicon) - The Simple Network Management Protocol, SNMP, empowers you to invoke ancient standards from the void. SNMP exposes the secrets of your network and servers, and--if you're careless--reconfigures them into unspeakable nightmares. It exposes your inadequate brain to the vast alien dimensions underlying modern computing.
- [SNMP Mastery by Michael W. Lucas](https://mwl.io/nonfiction/networking#snmp) - SNMP, Simple Network Management Protocol, Four lies in one acronym?
- [SNMP MIB Handbook by Larry Walsh](https://www.amazon.com/SNMP-MIB-Handbook-Larry-Walsh/dp/0981492207) - Essential Guide to SNMP MIB Development, Use, and Diagnosis.
- [Mauro, D. and Schmidt, K., 2005. Essential SNMP: Help for System and Network Administrators. " O'Reilly Media, Inc.".](https://www.amazon.com/Essential-SNMP-System-Network-Administrators-ebook/dp/B0043EWUZ2) - Essential SNMP explores both commercial and open source packages, and elements like OIDs, MIBs, community strings, and traps are covered in depth. The book contains five new chapters and various updates throughout.
- [Snmp, Snmpv2, Snmpv3, and Rmon 1 and 2 by William Stallings](https://www.amazon.com/Snmp-Snmpv2-Snmpv3-William-Stallings/dp/0201485346) - Presents a concise, focused & practical guide to SNMP-based network & internetwork management for network administrators, managers, & designers.
- [Perkins, D. and McGinnis, E., 1997. Understanding SNMP MIBs (p. 528). Englewood Cliffs: Prentice Hall PTR.](https://www.amazon.com/Understanding-SNMP-MIBs-David-Perkins/dp/0134377087) - The first complete, practical insider's guide to writing SNMP MIBs.

### RFCs
- [rfc1098](https://tools.ietf.org/rfc/rfc1098.txt) - A Simple Network Management Protocol (version 1).
- [rfc1155](https://tools.ietf.org/rfc/rfc1155.txt) - Structure and Identification of Management Information.
- [rfc2578](https://tools.ietf.org/rfc/rfc2578.txt) - Structure of Management Information Version 2 (SMIv2).
- [rfc2741](https://tools.ietf.org/rfc/rfc2741.txt) - Agent Extensibility (AgentX) Protocol Version 1.
- [rfc2742](https://tools.ietf.org/rfc/rfc2742.txt) - Definitions of Managed Objects for Extensible SNMP Agents.
- [rfc3410](https://tools.ietf.org/rfc/rfc3410.txt) - Introduction and Applicability Statements for Internet Standard Management Framework.
- [rfc3411](https://tools.ietf.org/rfc/rfc3411.txt) - An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks.
- [rfc3412](https://tools.ietf.org/rfc/rfc3412.txt) - Message Processing and Dispatching for the Simple Network Management Protocol (SNMP).
- [rfc3413](https://tools.ietf.org/rfc/rfc3413.txt) - Simple Network Management Protocol (SNMP) Applications.
- [rfc3414](https://tools.ietf.org/rfc/rfc3414.txt) - User-based Security Model (USM) for version 3 of the
 Simple Network Management Protocol (SNMPv3).
- [rfc3415](https://tools.ietf.org/rfc/rfc3415.txt) - View-based Access Control Model (VACM) for the Simple Network Management Protocol (SNMP).
- [rfc3416](https://tools.ietf.org/rfc/rfc3416.txt) - Version 2 of the Protocol Operations for the Simple
Network Management Protocol (SNMP).
- [rfc3417](https://tools.ietf.org/rfc/rfc3417.txt) - Transport Mappings for the Simple Network Management
Protocol (SNMP).
- [rfc3418](https://www.ietf.org/rfc/rfc3418.txt) - Management Information Base (MIB) for the Simple Network Management Protocol (SNMP).
- [rfc3584](https://tools.ietf.org/rfc/rfc3584.txt) - Coexistence between Version 1, Version 2, and Version 3 of the Internet-standard Network Management Framework.
- [rfc3826](https://tools.ietf.org/rfc/rfc3826.txt) - The Advanced Encryption Standard (AES) Cipher Algorithm
in the SNMP User-based Security Model.
- [rfc4088](https://tools.ietf.org/rfc/rfc4088.txt) - Uniform Resource Identifier (URI) Scheme for the Simple Network Management Protocol (SNMP).
- [rfc5343](https://www.rfc-editor.org/rfc/rfc5343.txt) - Simple Network Management Protocol (SNMP) Context EngineID Discovery.
- [rfc5590](https://www.rfc-editor.org/rfc/rfc5590.txt) - Transport Subsystem for the Simple Network Management Protocol (SNMP).
- [rfc5591](https://www.rfc-editor.org/rfc/rfc5591.txt) - Transport Subsystem for the Simple Network Management Protocol (SNMP).
- [rfc5592](https://www.rfc-editor.org/rfc/rfc5592.txt) - Secure Shell Transport Model for the Simple Network Management Protocol (SNMP).
- [rfc7630](https://www.rfc-editor.org/rfc/rfc7630.txt) - HMAC-SHA-2 Authentication Protocols in the User-based Security Model (USM) for SNMPv3.

### Tutorials
- [net-snmp tutorials](http://www.net-snmp.org/wiki/index.php/Tutorials) - This Wiki page contains various tutorials ranging from the basics of SNMP protocol to implementation of SNMP applications and agents using net-snmp library.

**[⬆ back to top](#contents)**

## Public servers
- [snmp.ireasoning.com](http://ireasoning.com/pubtest.php) - Free public an SNMP agent for testing purpose.

**[⬆ back to top](#contents)**

## MIB repositories
- [hsnodgrass/snmp_mib_archive](https://github.com/hsnodgrass/snmp_mib_archive) - An archive of over 3000 unique SNMP MIBs.
- [kcsinclair/mibs](https://github.com/kcsinclair/mibs) - Another collection of MIBS used for SNMP. Make sure to clone the repository to see the full list of MIBs.
- [mibdepot.com](http://www.mibdepot.com) - mibDepot is a free service to the SNMP community and offers a dictionary of MIBs and a unique-in-the-industry Search Engine with over 12,000 SNMP MIBs representing over 1,800,000 MIB object definitions.
- [oid-info.com](http://oid-info.com) - This OID repository gathers information about Object Identifiers (OIDs), and provides tools to display, update and search for this information.
- [michaelfmcnamara.com](https://blog.michaelfmcnamara.com/mibs/) - Hand-curated list of MIBs by Michael McNamara.
- [snmplink.org/OnLineMIB](http://www.snmplink.org) - This website shows documentation of a set of MIBs with a built-in MIB viewer.
  - [OnLineMIB/Standards](http://www.snmplink.org/OnLineMIB/Standards/) - Standard: (ATM Forum, IANA, RFC) - RFC1065-5324.
  - [OnLineMIB/Cisco](http://www.snmplink.org/OnLineMIB/Cisco/) - Cisco.
  - [OnLineMIB/Juniper](http://www.snmplink.org/OnLineMIB/Juniper/) - Juniper.
  - [OnLineMIB/Extreme](http://www.snmplink.org/OnLineMIB/Extreme/) - Extreme.
  - [OnLineMIB/Brocade](http://www.snmplink.org/OnLineMIB/Brocade/) - Brocade.
- [oidview.com/mibs](http://www.oidview.com/mibs/detail.html) - This repository contains over 7000 unique MIBs from various vendors.

**[⬆ back to top](#contents)**

## Miscellaneous
_Items that belong on the list but difficult to classify._

- [SNMPLink.org](http://snmplink.org/) - SNMPlink.org provides links and information about SNMP, MIB (Management Information Base), Network Management and Network Monitoring.
- [SNMPTools.net](https://www.snmptools.net/) - SNMPTools.net provides links and information about SNMP applications, toolkits, gateways, simulators, MIB browsers and many more.

**[⬆ back to top](#contents)**

## Contributing
Please take a quick look at the [contribution guidelines](contributing.md) first. Thank you to all contributors.


text:
on:
  push:
  pull_request:
  schedule:
    - cron: "0 7 * * *"

name: Awesome lint
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0
      # See other options https://github.com/sindresorhus/awesome-lint
    - name: Run Awesome Lint
      run: npx awesome-lint

repo_name: eozer/awesome-snmp

mime_type: text/plain


text:
# Crypto Currency Symbols

> DO NOT EDIT. THIS README IS AUTO GENERATED FROM [symbols.json](symbols.json).

Unicode symbols for different crypto tokens.

* Collected for a MacOS [ticker app](http://yoni.ninja/cointick)
* **Not official in any way**
* Feel free to PR / create issues with suggestions

| Name | CoinGecko id | Symbol | Unicode Symbol |
|------|:------------:|:------:|:--------------:|
| Bitcoin | bitcoin | BTC | ₿ |
| Ethereum | ethereum | ETH | Ξ |
| Tether | tether | USDT | ₮ |
| Cardano | cardano | ADA | ₳ |
| XRP | ripple | XRP | ✕ |
| Solana | solana | SOL | ◎ |
| Polkadot | polkadot | DOT | ● |
| Dogecoin | dogecoin | DOGE | Ð |
| Dai | dai | DAI | ◈ |
| Litecoin | litecoin | LTC | Ł |
| Algorand | algorand | ALGO | Ⱥ |
| Bitcoin Cash | bitcoin-cash | BCH | Ƀ |
| ECOMI | ecomi | OMI | Ο |
| Internet Computer | internet-computer | ICP | ∞ |
| Ethereum Classic | ethereum-classic | ETC | ξ |
| Monero | monero | XMR | ɱ |
| Tezos | tezos | XTZ | ꜩ |
| Iota | iota | MIOTA | ɨ |
| EOS | eos | EOS | ε |
| Bitcoin SV | bitcoin-cash-sv | BSV | Ɓ |
| Maker | maker | MKR | Μ |
| Zcash | zcash | ZEC | ⓩ |
| Dash | dash | DASH | Đ |
| Nano | nano | XNO | Ӿ |
| Augur | augur | REP | Ɍ |
| Steem | steem | STEEM | ȿ |

repo_name: yonilevy/crypto-currency-symbols

repo_language: Python


text:
import requests
import json

def main():
    """
    Sorts symbols.json by (market_cap_if_in_top_250, alphabetically)
    """
    symbols = json.load(open("symbols.json", "r"))
    coins = requests.get("https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&per_page=250").json()
    sym_to_index = {c['symbol'].upper(): c['market_cap_rank'] for c in coins}
    sorted_symbols = sorted(symbols, key=lambda s: (sym_to_index.get(s['symbol'], 999), s['name']))
    json.dump(sorted_symbols, open("symbols.json", "w"), indent=4, ensure_ascii=False)

if __name__ == '__main__':
    main()


text:
import json

def gen_readme(symbols):
    rows = [f"| {s['name']} | {s['gecko']} | {s['symbol']} | {s['usym']} |" for s in symbols]
    return """
# Crypto Currency Symbols

> DO NOT EDIT. THIS README IS AUTO GENERATED FROM [symbols.json](symbols.json).

Unicode symbols for different crypto tokens.

* Collected for a MacOS [ticker app](http://yoni.ninja/cointick)
* **Not official in any way**
* Feel free to PR / create issues with suggestions

| Name | CoinGecko id | Symbol | Unicode Symbol |
|------|:------------:|:------:|:--------------:|
""" + "\n".join(rows)

def main():
    print("Generating README from symbols.json...")
    symbols = json.load(open("symbols.json", "r"))
    with open("README.md", "w") as f:
        f.write(gen_readme(symbols))

if __name__ == '__main__':
    main()


text:
name: Generate README
on: [push, pull_request]
jobs:
  Generate-Readme:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: setup python
        uses: actions/setup-python@v2
        with:
          python-version: 3.8
      - name: gen_readme.py
        run: |
          python .github/gen_readme.py
      - uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: Generate README from symbols.json


text:
🐣 Please follow me for new updates https://twitter.com/camenduru

🔥 Please join our discord server https://discord.gg/k5BwmmvJJU

🥳 Please join my patreon community https://patreon.com/camenduru

## 🚦 WIP 🚦

### 🦒 Colab

| Colab | Info
| --- | --- |
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/camenduru/whisper-jax-colab/blob/main/whisper_jax_large_colab.ipynb) | openai/whisper-large-v2 Pro Colab (T4) we need High-RAM 😐
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/camenduru/whisper-jax-colab/blob/main/whisper_jax_medium_colab.ipynb) | openai/whisper-medium Free Colab (T4)
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/camenduru/whisper-jax-colab/blob/main/whisper_jax_medium_gradio_colab.ipynb) | openai/whisper-medium Free Colab (T4) Gradio

### Main Repo
https://github.com/sanchit-gandhi/whisper-jax

repo_name: camenduru/whisper-jax-colab

repo_language: Jupyter Notebook


text:
# These are supported funding model platforms

github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: camenduru
open_collective: # Replace with a single Open Collective username
ko_fi: camenduru
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']


text:
grep -A 9999 "## 🧰 在线工具箱" README.md | grep -B 9999 "## 🧰 其他工具箱" > ._tmp0
grep -E -o "^\- \[.*?\]" ._tmp0 > ._tmp1
grep -E -o "^\- \[.*?\]" ._tmp0 | sort -f > ._tmp2
cat ._tmp2

echo
echo Total: `wc -l ._tmp2 | grep -E -o "\d+ "`
echo
echo Diff:

diff ._tmp1 ._tmp2
rm -f ._tmp0 ._tmp1 ._tmp2

repo_name: bestxtools/awesome-toolbox-chinese

repo_language: Shell


text:
# 优秀工具箱集合 [![Awesome](https://awesome.re/badge.svg)](https://awesome-toolbox-chinese.bestxtools.com/) [![GitHub Repo stars](https://img.shields.io/github/stars/bestxtools/awesome-toolbox-chinese)](https://github.com/bestxtools/awesome-toolbox-chinese)

收集，推荐好用、优秀的工具箱。工具箱大全。

欢迎[点赞](https://github.com/bestxtools/awesome-toolbox-chinese/stargazers)，收藏，[推荐](https://github.com/bestxtools/awesome-toolbox-chinese/issues)。

更多链接:

- [https://github.com/bestxtools/awesome-toolbox-chinese](https://github.com/bestxtools/awesome-toolbox-chinese)
- [https://awesome-toolbox-chinese.bestxtools.com/](https://awesome-toolbox-chinese.bestxtools.com/)
- [https://😎🧰.bestxtools.com/](https://😎🧰.bestxtools.com/)

## 🧰 在线工具箱

> 工具箱网站排名说明：下面所列网站按域名字母顺序排序
> 每个网站的 featured tools 最多列 5 个
> 可以提交 **PR** 添加、修改

- [123apps.com](https://123apps.com/cn/) - Web Apps by 123apps - 编辑、转换、创建

  - Featured tools: [在线视频编辑器](https://online-video-cutter.com/cn/video-editor), [修剪音频](https://mp3cut.net/cn/), [Convert Word to PDF](https://pdf.io/cn/doc2pdf/)

- [1tools.co](https://1tools.co/) - 1Tools - Free Online Tools for Everyday Needs (🇬🇧)

  - Featured tools: [Sitemap Generator](https://1tools.co/sitemap-generator), [Get Source Code of Webpage](https://1tools.co/get-source-code-of-webpage), [Robots.txt Generator](https://1tools.co/robots-txt-generator)

- [3xm.cn](https://www.3xm.cn/) - 秀米 - 简单好用的免费工具

  - Featured tools: [最大公约数](https://www.3xm.cn/app/max_divisor), [瑞文(IQ)智商测试](https://www.3xm.cn/app/ruiwen), [油耗计算器](https://www.3xm.cn/app/youhao)

- [67tool.com](https://www.67tool.com/) - 即时工具-致力打造即用即走型在线工具箱

  - Featured tools: [视频剪切](https://www.67tool.com/video/edit?type=cut), [图片压缩](https://www.67tool.com/images/imgCompress), [图片放大](https://www.67tool.com/images/enlarge)

- [allinone.tools](https://allinone.tools/) - Free online tool-box with 70+ tools! (🇬🇧)

  - Featured tools: [MD5 decrypt](https://allinone.tools/encryption/md5-decrypt), [Youtube Thumbnail Grabber](https://allinone.tools/social-media/thumbnail-grabber), [CSS Minify](https://allinone.tools/web/css-minify)

- [atool.vip](https://atool.vip/) - 在线工具 - VIP

  - Featured tools: [批量生成多尺寸 APP Icon](https://atool.vip/appicon/), [图片 Base64 编码](https://atool.vip/base64), [在线颜色选择器 / 转换器](https://atool.vip/colorpicker)

- [atoolbox.net](http://www.atoolbox.net/) - 一个工具箱 - 好用的在线工具都在这里！

  - Featured tools: [信用卡分期计算器](http://www.atoolbox.net/Tool.php?Id=1021), [像素风格头像生成器](http://www.atoolbox.net/Tool.php?Id=1035), [翅膀昵称生成器](http://www.atoolbox.net/Tool.php?Id=1025)

- [bazinga.tools](https://bazinga.tools/) - Bazinga Tools - The All-in-One Toolbox for Developers ([Open source](https://github.com/luin/bazinga)) (🇬🇧)

  - Featured tools: [HTML Formatter](https://bazinga.tools/html), [JSON to CSV Converter](https://bazinga.tools/json-to-csv), [Markdown Table Generator](https://bazinga.tools/markdown-table-generator)

- [browserling.com](https://www.browserling.com/tools) - Web Developer Tools - Programmer Tools - Online - Browserling (🇬🇧)

  - Featured tools: [json to yaml converter](https://onlinejsontools.com/convert-json-to-yaml), [yaml validator](https://onlineyamltools.com/validate-yaml), [csv to json converter](https://onlinecsvtools.com/convert-csv-to-json), [unicode text normalizer](https://onlineunicodetools.com/normalize-unicode-text)

- [c.runoob.com](https://c.runoob.com/) - 菜鸟工具 - 不止于工具

  - Featured tools: [HTML/CSS/JS 在线工具](https://c.runoob.com/front-end/61/), [正则表达式在线测试](https://c.runoob.com/front-end/854/), [C 言在线工具](https://c.runoob.com/compile/11/)

- [clipperly.com](https://clipperly.com/zh) - Clipperly - All-in-one file service. Convert, edit and optimize your files, online & free.

  - Featured tools: [Video Converter](https://clipperly.com/zh/convert/video), [Image Converter](https://clipperly.com/zh/convert/image), [Document converter](https://clipperly.com/zh/convert/document), [Image editor](https://clipperly.com/zh/edit/image)

- [ctfever.uniiem.com](https://ctfever.uniiem.com/) - CTFever Toolkit by uniiem

  - Featured tools: [ROT-13 编码](https://ctfever.uniiem.com/tools/rot-series), [摩尔斯码/摩斯密码](https://ctfever.uniiem.com/tools/morse-code), [凯撒加密](https://ctfever.uniiem.com/tools/caesar-cipher)

- [devtool.tech](https://devtool.tech/) - 开发者武器库 · 属于程序员的工具箱

  - Featured tools: [Markdown 一纸简历](https://cv.devtool.tech/app), [Markdown 编辑器](https://markdown.devtool.tech/app), [微图床 - 个人专属 Github 图床](https://devtool.tech/gallery)

- [devtoolcafe.com](https://devtoolcafe.com/) - Developer's Toolkit (🇬🇧)

  - Featured tools: [Online Text Compare Tool](https://devtoolcafe.com/tools/diff), [JWT Decoder](https://devtoolcafe.com/tools/jwtdecoder), [Regular Expression Tester and Visualizer](https://devtoolcafe.com/tools/regex)

- [dute.org](https://www.dute.org/) - 专注于体验的免费在线工具 - 独特工具箱 - dute.org

  - Featured tools: [九宫切图工具](https://www.dute.org/image-clip), [Paypal 手续费计算器](https://www.dute.org/paypal-service-charge), [抖音风格文字生成器](https://www.dute.org/douyin-style-text)

- [geekstool.com](https://www.geekstool.com/) - 极客工具

  - Featured tools: [sql美化](https://www.geekstool.com/tool/sql), [租房选房助手](https://www.geekstool.com/tool/xuanfang), [在线文本对比](https://www.geekstool.com/tool/diff)

- [gjk.cn](https://www.gjk.cn/) - 工具库 - 在线工具\_全能工具箱

  - Featured tools: [码农毒鸡汤](https://www.gjk.cn/soul), [中文简繁体转换](https://www.gjk.cn/jianfanti), [卡通头像制作](https://www.gjk.cn/katong)

- [gluee.com](https://www.gluee.com/tools/) - Gluee's tool suite for webmasters and developers (🇬🇧)

  - Featured tools: [Punycode converter](https://www.punycoder.com/), [HTML cleanup tool](https://www.htmlwasher.com/), [HTML corrector](https://www.htmlcorrector.com/)

- [goonlinetools.com](https://goonlinetools.com/) - GoOnlineTools.com - 100% Free Online Tools Collection (🇬🇧)

  - Featured tools: [Random Password Generator](https://goonlinetools.com/random-password-generator/), [Tiktok style text maker](https://goonlinetools.com/tiktok-style-text-maker/), [Random Paragraph Generator](https://goonlinetools.com/random-paragraph-generator/)

- [hiencode.com](http://www.hiencode.com/) - CTF 在线工具 - CTF 工具\|CTF 编码\|CTF 密码学\|CTF 加解密\|程序员工具\|在线编解码

  - Featured tools: [莫尔斯电码](http://www.hiencode.com/morse.html), [AES 加解密](http://www.hiencode.com/caes.html), [DES 加解密](http://www.hiencode.com/cdes.html)

- [iamwawa.cn](https://www.iamwawa.cn/) - 蛙蛙工具 - 便捷的在线工具网站

  - Featured tools: [英文字母大小写转换](https://www.iamwawa.cn/daxiaoxie.html), [文本去重工具](https://www.iamwawa.cn/quchong.html), [人民币大写转换器](https://www.iamwawa.cn/renminbi.html)

- [idcd.com](https://www.idcd.com/) - 实用在线工具箱

  - Featured tools: [whois 查询](https://whois.idcd.com/), [SQL 格式化](https://www.idcd.com/tool/format/sql), [成语查询](https://chengyu.idcd.com/)

- [it-tools.tech](https://it-tools.tech/) - IT Tools - Handy online tools for developers ([Open source](https://github.com/CorentinTh/it-tools)) (🇬🇧)

  - Featured tools: [Token generator](https://it-tools.tech/token-generator), [Hash text](https://it-tools.tech/hash-text), [Bcrypt](https://it-tools.tech/bcrypt)

- [jiuwa.net](https://www.jiuwa.net/) - 九蛙工具箱 - 网名昵称, 特殊符号, 微信小工具在线生成

  - Featured tools: [头像生成器](https://diy.jiuwa.net/), [小人举牌照生成](https://www.jiuwa.net/jupai/), [随机网名生成器](https://www.jiuwa.net/sjwmsc/)

- [json.cn](https://www.json.cn/) - JSON 在线解析及格式化验证 - JSON.cn

  - Featured tools: [JSON 在线解析](https://www.json.cn/json/jsononline.html), [JSON 压缩转义](https://www.json.cn/json/jsonzip.html), [JSON 生成 JAVA 实体](https://www.json.cn/json/json2java.html)

- [lddgo.net](https://www.lddgo.net/) - 在线工具大全

  - Featured tools: [Java 正则表达式测试](https://www.lddgo.net/string/regex), [CRC 在线计算](https://www.lddgo.net/encrypt/crc), [在线随机数生成器](https://www.lddgo.net/string/randomnumber)

- [manytools.org](https://manytools.org/) - Your online toolshed: many tools for web developers, system admins & webworkers (🇬🇧)

  - Featured tools: [What is my IP](https://manytools.org/network/what-is-my-ip/), [Type upside down](https://manytools.org/facebook-twitter/type-upside-down-aboqe/), [ASCII banners](https://manytools.org/hacker-tools/ascii-banner/)

- [oktools.net](https://oktools.net/) - 在线工具 - OKTools

  - Featured tools: [JSON 格式化](https://oktools.net/json), [Unix 时间戳](https://oktools.net/timestamp), [图片 Base64 编码](https://oktools.net/image2base64)

- [ol.woobx.cn](https://ol.woobx.cn/) - 一个木函 - 多功能效率工具箱

  - Featured tools: [网络测速](https://ol.woobx.cn/tool/speedtest), [番茄时钟](https://ol.woobx.cn/tool/pomodoro-clock), [图片转 Base64](https://ol.woobx.cn/tool/image2base64)

- [piliapp.com](https://cn.piliapp.com/) - 工具邦 - PiliApp

  - Featured tools: [随机抽签器](https://cn.piliapp.com/random/lots/), [抛硬币](https://cn.piliapp.com/random/coin/), [轮盘](https://cn.piliapp.com/random/wheel/)

- [qtool.net](https://www.qtool.net/) - 在线工具-QTOOl 工具大家常用的工具箱

  - Featured tools: [在线抠图，在线删除图片背景](https://www.qtool.net/imgmatting), [图片压缩](https://www.qtool.net/tpys), [在线拼图](https://www.qtool.net/picstitching)

- [quanxin.org](https://quanxin.org/) - 全新工具箱，免费在线工具

  - Featured tools: [九宫图生成器](https://quanxin.org/image-slice), [汉字转拼音](https://quanxin.org/hanzi-to-pinyin), [Git 命令速查表](https://quanxin.org/git-cheat-sheet)

- [shubang.net](http://www.shubang.net/) - 工具书

  - Featured tools: [新华字典在线查字](http://www.shubang.net/zidian/), [成语大全及解释](http://www.shubang.net/chengyu/), [网名大全](http://www.shubang.net/wangming/), [翅膀符号网名生成器](http://www.shubang.net/tools/chibang.html)

- [smalldev.tools](https://smalldev.tools/) - Handy developer tools with a delightful interface - SmallDevTools (🇬🇧)

  - Featured tools: [Code Share Bin](https://smalldev.tools/share-bin), [JSON Decoder](https://smalldev.tools/json-decoder-online), [JSON Formatter](https://smalldev.tools/json-formatter-online)

- [smallseotools.com](https://smallseotools.com/) - 100% Free SEO Tools - SmallSEOTools.com (🇬🇧)

  - Featured tools: [英语语法检查](https://smallseotools.com/grammar-checker/), [关键字推荐](https://smallseotools.com/keywords-suggestions-tool/), [关键字排名](https://smallseotools.com/keyword-position/)

- [sojson.com](https://www.sojson.com/) - JSON 在线 \| JSON 解析格式化—SO JSON 在线工具

  - Featured tools: [JSON 解析](https://www.sojson.com/), [JSON 视图](https://www.sojson.com/editor.html), [JSON 着色](https://www.sojson.com/jsonfmt.html)

- [sotool.net](https://sotool.net/) - so 工具

  - Featured tools: [证件加水印](https://sotool.net/watermark), [时间戳转换工具](https://sotool.net/time.html), [颜色拾取工具](https://sotool.net/color)

- [t.xxgeek.com](https://t.xxgeek.com/) - 极客工具箱

  - Featured tools: [今天吃什么？](https://t.xxgeek.com/tools/eatsm/), [极客域名权重查询](https://t.xxgeek.com/tools/rank), [SEO 自动工具](https://t.xxgeek.com/tools/seoauto)

- [tableconvert.com](https://tableconvert.com/zh-CN/) - Table Convert Online 在线表格转换工具 - 让表格转换变得更容易

  - Featured tools: [CSV 转换为 Markdown 表格](https://tableconvert.com/zh-CN/csv-to-markdown), [Markdown 表格 转换为 HTML 表格](https://tableconvert.com/zh-CN/markdown-to-html), [Excel 转换为 Markdown 表格](https://tableconvert.com/zh-CN/excel-to-markdown)

- [textcleaner.net](https://textcleaner.net/) - Text Cleaner: Text Formatter, Text Formatting Online (🇬🇧)

  - Featured tools: [Text Cleaner](https://textcleaner.net/), [HTML Formatter](https://textcleaner.net/html-formatter/), [Diff Checker](https://textcleaner.net/diff-checker/)

- [tinywow.com](https://tinywow.com/) - Free PDF, Video, Image & Other Online Tools - TinyWow (🇬🇧)

  - Featured tools: [PDF to JPG](https://tinywow.com/pdf/to-jpg), [Merge PDF](https://tinywow.com/pdf/merge), [Split PDF](https://tinywow.com/pdf/split)

- [tol.vip](https://tol.vip/) - TOL在线工具

  - Featured tools: [网页图片批量获取](https://tol.vip/patu), [时间戳转换](https://tol.vip/timestamp), [人民币大写转换工具](https://tol.vip/characters)

- [tool.chinaz.com](https://tool.chinaz.com/) - 站长工具 - 站长之家

  - Featured tools: [Whois 查询](https://whois.chinaz.com/), [SEO 综合查询](https://seo.chinaz.com/), [反向链接](https://outlink.chinaz.com/)

- [tool.cprk.cc](https://tool.cprk.cc/) - Prk 在线工具 - 免费在线工具网

  - Featured tools: [网页源代码查看](https://tool.cprk.cc/viewhtml), [IP 地址查询](https://tool.cprk.cc/ip), [域名 Whois 查询](https://tool.cprk.cc/whois)

- [tool.geekyes.com](https://tool.geekyes.com/) - 极客工具网-极客角落在线工具大全！

  - Featured tools: [Json 格式化](https://tool.geekyes.com/json/), [IP 地址归属地查询](https://tool.geekyes.com/ip/), [微信域名检测工具](https://tool.geekyes.com/checkweixin/)

- [tool.lu](https://tool.lu/) - 在线工具 - 你的工具箱

  - Featured tools: [图片转文字、OCR](https://tool.lu/ocr/), [在线 js 美化、解压缩、混淆](https://tool.lu/js/), [在线 css 美化、格式化、压缩](https://tool.lu/css/)

- [tool.mkblog.cn](http://tool.mkblog.cn/) - 孟坤工具箱

  - Featured tools: [Pornhub 和 YouTube 风格 LOGO 生产器](http://tool.mkblog.cn/logoly/), [艺术二维码生成器](http://tool.mkblog.cn/qrbtf/), [中国家庭称谓计算器](http://tool.mkblog.cn/relationship/)

- [tooleyes.com](https://www.tooleyes.com/) - 在线工具大全，用完即走，触手可及\_tooleyes 工具网

  - Featured tools: [gif 制作](https://www.tooleyes.com/app/gif_maker.html), [证件照换底色](https://www.tooleyes.com/app/id_photo.html), [文字转换语音](https://www.tooleyes.com/app/bdtts.html)

- [toolfig.com](https://toolfig.com/) - Free Online Web Tools - ToolFig (🇬🇧)

  - Featured tools: [Fake Name Generator](https://toolfig.com/fake-name-generator), [Url Slug Generator](https://toolfig.com/url-slug-generator), [Lorem Ipsum Generator](https://toolfig.com/lorem-ipsum-generator)

- [toolfk.com](https://www.toolfk.com/) - 最强工具人在线工具箱 - TOOLFK 工具网

  - Featured tools: [网站收录工具](https://www.toolfk.com/tools/online-website-include.html), [在线 htaccess 转 Nginx](https://www.toolfk.com/tools/convert-htaccess2nginx.html), [在线网站拦截检测](https://www.toolfk.com/tools/online-safe-domain.html)

- [toolgg.com](https://toolgg.com/) - 我的工具箱

  - Featured tools: [在线 CSS 压缩工具](https://toolgg.com/css-minifier.html), [在线 CSS 美化格式化工具](https://toolgg.com/css-beautifier.html), [在线 CSV 转 JSON 工具](https://toolgg.com/csv-to-json.html)

- [toolight.cn](https://toolight.cn/) - 偷懒工具 - 努力做更好用的在线工具

  - Featured tools: [万年历](https://toolight.cn/common/calendar), [身份证信息](https://toolight.cn/common/idcard), [在线解压缩](https://toolight.cn/common/unzip)

- [tooling.one](https://tooling.one/) - One Tooling ([Open source](https://github.com/egoist/tooling.one)) (🇬🇧)

  - Featured tools: [Base64 Encode/Decode](https://tooling.one/base64), [HTML to Markdown](https://tooling.one/html-to-markdown), [JSON to Rust](https://tooling.one/json-to-rust)

- [toolnb.com](https://www.toolnb.com/) - 爱资料工具-好用的在线工具箱

  - Featured tools: [域名 Whois 详细信息查询](https://www.toolnb.com/domaininfo/baidu.com.html), [Alexa 历史排名查询](https://www.toolnb.com/alexa/baidu.com.html), [域名被墙查询](https://www.toolnb.com/beiqiang/index.html)

- [tools.fun](https://tools.fun/) - 在线工具箱

  - Featured tools: [正则表达式测试](https://tools.fun/regexp.html), [Websocket 测试](http://tools.fun/websocket.html), [时间戳转换](https://tools.fun/timestamp.html)

- [tools.ijkxs.com](https://tools.ijkxs.com/) - 即刻工具箱 \| 打造方便、快捷、免费的在线工具箱

  - Featured tools: [互联网黑话生成器](https://tools.ijkxs.com/tools/internetindustrygen), [申论生成器](https://tools.ijkxs.com/tools/shenlunshengchengqi), [朋友圈转发截图生成工具](https://tools.ijkxs.com/tools/wxpyqjtsc)

- [tools.miku.ac](https://tools.miku.ac/) - MikuTools - 一个轻量的工具集合

  - Featured tools: [零宽字符隐藏加密](https://tools.miku.ac/zero_width_space_encrypt/), [CURL 转编程语言](https://tools.miku.ac/curlconverter/), [正则大全](https://tools.miku.ac/any_rule/)

- [tools.pdf24.org](https://tools.pdf24.org/zh/) - PDF24 Tools: 免费且易于使用的在线 PDF 工具

  - Featured tools: [PDF 合并](https://tools.pdf24.org/zh/merge-pdf),[分割 PDF](https://tools.pdf24.org/zh/split-pdf),[图片转 PDF](https://tools.pdf24.org/zh/images-to-pdf)

- [tools.pet](https://tools.pet/) - Tools.Pet 在线工具 程序员工具箱

  - Featured tools: [字符长度统计](https://tools.pet/), [Url 在线转码/解码](https://tools.pet/other/urlcode), [JSON 转 Golang 结构体](https://tools.pet/json/json2go)

- [tools.quickso.cn](https://tools.quickso.cn/) - Ctool 程序开发常用工具

  - Featured tools: [哈希(hash)](https://tools.quickso.cn/tool.html#/tool/hash), [加密/解密](https://tools.quickso.cn/tool.html#/tool/encrypt), [BASE64 编码](https://tools.quickso.cn/tool.html#/tool/base64)

- [tools.vsay.net](https://tools.vsay.net/) - VSAY 工具箱 - 一个非常 Nice 的程序员在线工具箱 ([Open source](https://github.com/aoaostar/toolbox))

  - Featured tools: [base64 编码/解码](https://tools.vsay.net/base64), [字节单位转化](https://tools.vsay.net/byte_calc), [进制转化](https://tools.vsay.net/hex_convert)

- [tools.yuanfen.net](https://tools.yuanfen.net/) - 猿奋工具箱

  - Featured tools: [财富自由计算器](https://tools.yuanfen.net/financial-freedom), [随机密码生成](https://tools.yuanfen.net/password), [HTML 实体转换](https://tools.yuanfen.net/entity)

- [tooltt.com](https://tooltt.com/) - 我的工具-程序员编程开发必备

  - Featured tools: [在线 CSV 转 html,table 代码](https://tooltt.com/csv2htmltable/), [在线 CSV 转 JSON](https://tooltt.com/csv2json/), [在线 XPath 解析 XML 测试工具](https://tooltt.com/xmlxpath/)

- [transform.tools](https://transform.tools/) - Transform - A polyglot web converter ([Open source](https://github.com/ritz078/transform)) (🇬🇧)

  - Featured tools: [HTML to JSX](https://transform.tools/html-to-jsx), [CSS to Tailwind](https://transform.tools/css-to-tailwind), [JSON to React PropTypes](https://transform.tools/json-to-proptypes)

- [utils.fun](https://utils.fun/) - 油条工具箱

  - Featured tools: [随机密码生成](https://utils.fun/generate/rand-password.html), [二维码生成](https://utils.fun/generate/qrcode.html), [图片离线加水印](https://utils.fun/generate/watermark.html)

- [wanderplan.net](https://www.wanderplan.net/) - 漫步工具 \| 在线工具箱

  - Featured tools: [字数统计](https://www.wanderplan.net/tools/word-count), [简繁体转换](https://www.wanderplan.net/tools/jian-fan), [模板内容生成](https://www.wanderplan.net/tools/template)

- [wangchujiang.com](https://wangchujiang.com/tools/) - Web Tools - Online Tool ([Open source](https://github.com/jaywcjlove/tools))

  - Featured tools: [URL 编码/解码](https://wangchujiang.com/tools/#/url-encode), [字母文本转换](https://wangchujiang.com/tools/#/text-case), [图片转换 Base64](https://wangchujiang.com/tools/#/image-to-base64)

- [webutils.app](https://www.webutils.app/) - Compress images, compare text, utilities for web - WebUtils (🇬🇧)

  - Featured tools: [Curl UI](https://www.webutils.app/curl-web-ui), [Text Compare](https://www.webutils.app/text-diff), [Image Compress](https://www.webutils.app/image-compress)

- [xyjwangluo.cn](http://www.xyjwangluo.cn/) - 小妖精工具

  - Featured tools: [土味情话](http://www.xyjwangluo.cn/Tools/twqh/), [随机中文名](http://www.xyjwangluo.cn/Tools/sjzwm/), [UA 分析](http://www.xyjwangluo.cn/Tools/ua/)

- [yeyulingfeng.com](https://www.yeyulingfeng.com/tool/) - 夜雨聆风工具箱

  - Featured tools: [音乐搜索器](https://www.yeyulingfeng.com/tools/music/), [长度单位换算](https://www.yeyulingfeng.com/tools/unit.html), [中国亲戚关系计算器](https://www.yeyulingfeng.com/tools/qinqi.html)

- [zxgj.cn](https://www.zxgj.cn/) - 在线工具网 - 工作生活好帮手

  - Featured tools: [九宫格切图](https://www.zxgj.cn/g/jiugongge), [快递单号查询](https://www.zxgj.cn/g/kuaidi), [利息计算器](https://www.zxgj.cn/g/lixi)

<!--
<https://www.danstools.com/>
<https://github.com/gchq/CyberChef> <https://cyberchef.cn/>
<https://www.zngg.net/> <https://github.com/ZN-GG/ZNGG-Nuxt3>
https://convertio.co/zh/
https://codegen.cc/ https://codegen.work7z.com/ https://github.com/work7z/CodeGen
https://imagestool.com/zh_CN/
https://safeimagekit.com/ascii-art-from-image
https://10015.io/
https://tool.browser.qq.com/
https://www.lddgo.net/
-->

## 🧰 其他工具箱

...

## 🏷 小鱼标签 (UTags) - 为链接添加用户标签

此扩展/油猴脚本允许用户为网站的链接添加自定义标签。比如，可以给论坛的用户或帖子添加标签。

**UTags** = **Usertags**。**Userscript**, **Userstyle** 可以让用户自定义网站的功能和样式，**Usertags** 允许用户自定义网站的标签。

目前支持的网站

- www.v2ex.com
- 更多网站会陆续支持

### 安装

- Firefox 浏览器: 已上架 [Firefox Addon 商店](https://addons.mozilla.org/firefox/addon/utags/)，[点击这里](https://addons.mozilla.org/firefox/addon/utags/)安装。
- 油猴脚本: [https://greasyfork.org/scripts/460718-utags-add-usertags-to-links](https://greasyfork.org/scripts/460718-utags-add-usertags-to-links)

更多使用说明及源代码请访问 [https://github.com/utags/utags](https://github.com/utags/utags)

## ✨ 好工具周刊

发现并分享有趣，有创意，免费、好用的工具，每周四发布。由 [BestXTools](https://www.bestxtools.com/) 创作。

好工具周刊同时发布到三个平台，订阅方式提供多种选择。

- [BestXTools 社区（RSS）](https://discuss-cn.bestxtools.com/t/weekly)
- [GitHub（Watch）](https://github.com/bestxtools/weekly-cn)
- [竹白（邮箱，微信）](https://bestxtools.zhubai.love/)

欢迎交流，投稿，订阅。

## License

Copyright (c) 2022 [Pipecraft](https://www.pipecraft.net). Licensed under the [CC0-1.0 License](https://github.com/bestxtools/awesome-toolbox-chinese/blob/main/LICENSE).

## >\_

[![Pipecraft](https://img.shields.io/badge/site-pipecraft-brightgreen)](https://www.pipecraft.net)
[![UTags](https://img.shields.io/badge/site-UTags-brightgreen)](https://utags.pipecraft.net)
[![DTO](https://img.shields.io/badge/site-DTO-brightgreen)](https://dto.pipecraft.net)
[![BestXTools](https://img.shields.io/badge/site-bestxtools-brightgreen)](https://www.bestxtools.com)


text:
Updated to work with u2019.3.0f1 and higher, if you need previous version look for earlier commit.
Hotkeys were removed as now unity shows menu items in Shortcuts window, you can bind whatever you want.
# UnityEditorSnippets
Collection of different editor things that help with productivity

## Menus
* **Project settings** adds project settings duplicate menu on top.

![](https://i.imgur.com/2IQzbph.png)

## Editor

* **Collapse Project** - collapses all contents of the project window
* **Collapse Hierarchy** - collapses hierarchy (scenes become uncollapsed, whoever works with multiscene fix this)
* **Create folder for selected** - will create a folder with the same name for selected asset in project window (found in context menu)

*Tip - if you collapsed but still have object selected, hover over hierarchy and press F - it will select and expand hierarchy to currently selected object.*

## GameObject (found in gameobject context menu)
* **Create Parent** - creates parent for the selected gameobject in scene.
* **Make first child** - moves to the top of hierarchy under current parent
* **Make last child** - moves to the bottom of hierarchy under current parent
* **Move up one level** - parents to the parent of the parent.
* **Move up** - move up one position in hierarchy under same parent.
* **Move down** - move down one position in hierarchy under same parent.

## Component (found in component context menu - gear icon)
* **Move to top** - moves the component to the top
* **Move to bottom** - moves the component to the bottom

More to come, feel free to add yours, just follow the same structure.

## FAQ

repo_name: pointcache/UnityEditorSnippets

repo_language: C#

mime_type: text/x-c++


text:
fileFormatVersion: 2
guid: 350f2a63b006f3340a5a1bd51edffbee
folderAsset: yes
timeCreated: 1492580302
licenseType: Free
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:


text:
fileFormatVersion: 2
guid: 8f25b422a2cabfa4eb82b28d1dbd567b
folderAsset: yes
timeCreated: 1492579986
licenseType: Free
DefaultImporter:
  userData:
  assetBundleName:
  assetBundleVariant:


text:
fileFormatVersion: 2
guid: 5ca267a4f3305e6478098a3030bf70fa
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
namespace UnityEditorSnippets
{
    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using UnityEditor;
    using System.IO;
    using System.Diagnostics;

    public class EditorDirectories
    {
        [MenuItem("ProjectSettings/Directories/Script templates", false, -4)]
        static void openScriptTemplateDir()
        {
            string path = Directory.GetParent(EditorApplication.applicationPath) + "/Data/Resources/ScriptTemplates/";
            //UnityEngine.Debug.Log(path);
            Process.Start(path);
        }

        [MenuItem("ProjectSettings/Directories/Editor root", false, -4)]
        static void openEditorRoot()
        {
            Process.Start(Directory.GetParent(EditorApplication.applicationPath).ToString());
        }

        [MenuItem("ProjectSettings/Directories/Persistent data", false, -4)]
        static void openPersistentData()
        {
            Process.Start(Application.persistentDataPath);
        }
    }
}


text:
fileFormatVersion: 2
guid: cf3c0806e0a564749834abb3df18a32f
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
fileFormatVersion: 2
guid: afdc556787ac22646a63432eb515f84c
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
namespace UnityEditorSnippets {

    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using UnityEditor;
    using System.Linq;

    public static class CollapseProject {

        [MenuItem("Edit/Collapse Project " )] // shortcut key F5 to Play (and exit playmode also)
        static void collapseProject() {
            string assemblypath = UnityEditorInternal.InternalEditorUtility.GetEditorAssemblyPath();
            var assembly = System.Reflection.Assembly.LoadFrom(assemblypath);
            var type = assembly.GetType("UnityEditor.ProjectBrowser");
            var projectbrowserfield = type.GetField("s_LastInteractedProjectBrowser");
            var projectbrowser = projectbrowserfield.GetValue(type);
            var treestatefield = type.GetField("m_AssetTreeState", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            var treestate = treestatefield.GetValue(projectbrowser);
            var expandedIdsField = treestate.GetType().GetProperty("expandedIDs", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public );
            UnityEditorInternal.InternalEditorUtility.expandedProjectWindowItems = new int[0];
            expandedIdsField.SetValue(treestate, new List<int>(), null);
            type.InvokeMember("OnProjectChanged", System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic, null, projectbrowser, null);
        }

    }
}


text:
namespace UnityEditorSnippets
{

    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using UnityEditor;
    using System.Linq;
    using System.IO;

    public static class CreateFolderForSelected
    {

        static HashSet<Type> ignoreTypes = new HashSet<Type>()
        {
            typeof(UnityEditor.DefaultAsset)
        };

        [MenuItem("Assets/Make folder for")]
        static void createFolderForSelected()
        {

            var target = Selection.activeObject;
            if (target == null)
                return;

            if (!AssetDatabase.IsMainAsset(target))
                return;

            if (ignoreTypes.Contains(target.GetType()))
                return;

            string path = AssetDatabase.GetAssetPath(target);
            string ext = Path.GetExtension(path);
            string parentDir = path.Remove(path.LastIndexOf('/'));
            string newpath = path.Remove(path.LastIndexOf('.')) + "/" + target.name + ext;

            AssetDatabase.CreateFolder(parentDir, target.name);

            if (AssetDatabase.ValidateMoveAsset(path, newpath) == string.Empty)
            {
                AssetDatabase.MoveAsset(path, newpath);
                Debug.Log("Made folder for and moved asset:" + newpath);
            }

        }

    }
}


text:
fileFormatVersion: 2
guid: c2f1e54ae637a06459e0b888e357ca04
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
fileFormatVersion: 2
guid: 26d09ae510f4192478894eae8745ba8a
timeCreated: 1492579998
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
namespace UnityEditorSnippets {
    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using System.Reflection;
    using UnityEditor;
    using UnityEditor.SceneManagement;

    public static class CollapseHierarchy {
        [MenuItem("Edit/Collapse Hierarchy ")]
        static void collapseHierarchy() {

            string assemblypath = UnityEditorInternal.InternalEditorUtility.GetEditorAssemblyPath();
            var assembly = System.Reflection.Assembly.LoadFrom(assemblypath);

            // Find static hierarchy window controller
            var type = assembly.GetType("UnityEditor.SceneHierarchyWindow");

            // Find last used hierarchy window
            var hierarchyfield = type.GetField("s_LastInteractedHierarchy", BindingFlags.NonPublic | BindingFlags.Static);
            var hierarchy = hierarchyfield.GetValue(type);

            // Find scene view inside hierarchy window
            var hierarchyType = hierarchy.GetType();
            var sceneviewfield = hierarchyType.GetField("m_SceneHierarchy", BindingFlags.NonPublic | BindingFlags.Instance);
            var sceneview = sceneviewfield.GetValue(hierarchy);
            var sceneviewType = sceneview.GetType();

            var treestatefield = sceneviewType.GetField("m_TreeViewState", BindingFlags.Instance | BindingFlags.NonPublic);
            var treestate = treestatefield.GetValue(sceneview);
            var expandedIdsField = treestate.GetType().GetField("m_ExpandedIDs", BindingFlags.Instance | BindingFlags.NonPublic);

            expandedIdsField.SetValue(treestate, new List<int>());

            List<string> openscenes = new List<string>();

            for (int i = 0; i < EditorSceneManager.sceneCount; i++) {
                openscenes.Add(EditorSceneManager.GetSceneAt(i).name);
            }

            var reloadneeded = sceneviewType.GetField("m_TreeViewReloadNeeded", BindingFlags.NonPublic | BindingFlags.Instance);

            sceneviewType.InvokeMember("SetScenesExpanded",
                BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic,
                null,
                sceneview,
                new object[1] {openscenes });

            reloadneeded.SetValue(sceneview, true);

            sceneviewType.InvokeMember("SyncIfNeeded", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.NonPublic, null, sceneview, null);

        }
    }
}


text:
namespace UnityEditorSnippets {
    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using UnityEditor;

    public class ProjectSettings {
        [MenuItem("ProjectSettings/Settings")]
        static void settings() {
            EditorApplication.ExecuteMenuItem("Edit/Project Settings...");
        }

        [MenuItem("ProjectSettings/Preferences")]
        static void preferences() {
            EditorApplication.ExecuteMenuItem("Edit/Preferences...");
        }

        [MenuItem("ProjectSettings/Shortcuts")]
        static void shortcuts()
        {
            EditorApplication.ExecuteMenuItem("Edit/Shortcuts...");
        }

        [MenuItem("ProjectSettings/Snap Settings")]
        static void snap()
        {
            EditorApplication.ExecuteMenuItem("Edit/Grid and Snap Settings...");
        }

        [MenuItem("ProjectSettings/Package Manager")]
        static void packages()
        {
            EditorApplication.ExecuteMenuItem("Window/Package Manager");
        }

        [MenuItem("ProjectSettings/Lighting")]
        static void lighting()
        {
            EditorApplication.ExecuteMenuItem("Window/Rendering/Lighting Settings");
        }

        [MenuItem("ProjectSettings/Profiler")]
        static void profiler()
        {
            EditorApplication.ExecuteMenuItem("Window/Analysis/Profiler");
        }

        [MenuItem("ProjectSettings/Navmesh")]
        static void navmesh()
        {
            EditorApplication.ExecuteMenuItem("Window/AI/Navigation");
        }

    }
}


text:
fileFormatVersion: 2
guid: 3a2ff080be8e9ec4b91ef587217af054
timeCreated: 1492582110
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
fileFormatVersion: 2
guid: a86b398a6cc662642b041039e172a56c
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
fileFormatVersion: 2
guid: bdbe2814138226e4f8676aa9de244b0a
timeCreated: 1492580694
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
fileFormatVersion: 2
guid: 13698de7f3f4a0b4188456e87452e037
timeCreated: 1492580694
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
namespace UnityEditorSnippets {
    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using UnityEditor;

    public class MoveToTop {
        [MenuItem("CONTEXT/Component/Move to top")]
        static void moveToTop(MenuCommand command) {
            for (int i = 0; i < 100; i++) {
                UnityEditorInternal.ComponentUtility.MoveComponentUp(command.context as Component);
            }
        }
    }
}


text:
namespace UnityEditorSnippets {
    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using UnityEditor;

    public class MoveToBottom {
        [MenuItem("CONTEXT/Component/Move to bottom")]
        static void moveToBottom(MenuCommand command) {
            for (int i = 0; i < 100; i++) {
                UnityEditorInternal.ComponentUtility.MoveComponentDown(command.context as Component);
            }
        }
    }
}


text:
fileFormatVersion: 2
guid: da7be413987f7904494d6caa8093e9a9
timeCreated: 1492580694
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
fileFormatVersion: 2
guid: 12a1eb8557c3ce84e8814e9b25a9cbae
timeCreated: 1492580694
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
namespace UnityEditorSnippets {
    using System.Collections;
    using System.Collections.Generic;
    using UnityEditor;
    using UnityEngine;

    public static class CreateParent {

        /// <summary>
        /// This method attempts to creat a parent for selected child, it is not perfect and can fail in some edge cases
        /// but is undoable in case of error, needs more work.
        /// </summary>
        [MenuItem("GameObject/Create parent", false, -5)]
        public static void createParent(MenuCommand command) {
            var go = command.context as GameObject;
            if (go) {
                var parent = new GameObject(go.name + "_root");
                Undo.RegisterCreatedObjectUndo(parent, "Created parent");
                parent.transform.SetParent(go.transform.parent);
                var rect = go.GetComponent<RectTransform>();
                if (rect) {
                    var goparentrect = go.transform.parent.GetComponent<RectTransform>();
                    var parentCanvas = go.transform.parent.GetComponent<Canvas>();
                    var parentRect = parent.GetComponent<RectTransform>();
                    if (!parentRect)
                        parentRect = parent.AddComponent<RectTransform>();
                    if (!parentCanvas)
                        parentRect.position = goparentrect.transform.position;
                    else
                        parentRect.position = parentCanvas.transform.position;
                    parentRect.anchorMax = new Vector2(1f, 1f);
                    parentRect.anchorMin = Vector2.zero;
                    parentRect.offsetMax = Vector2.zero;
                    parentRect.offsetMin = Vector2.zero;
                    Undo.SetTransformParent(go.transform, parent.transform, "reparent");
                }
                else {
                    parent.transform.position = go.transform.position;
                    parent.transform.rotation = go.transform.rotation;
                    Undo.SetTransformParent(go.transform, parent.transform, "reparent");
                }
            }
        }

    }
}


text:
fileFormatVersion: 2
guid: 0a35b8a2811870b43a287fc616502d08
timeCreated: 1492580694
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
namespace UnityEditorSnippets {
    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using UnityEditor;

    public class MakeLastChild {
        [MenuItem("GameObject/Make last child", false, -5)]
        static void makeLastChild(MenuCommand command) {
            var go = command.context as GameObject;
            if (go.transform.parent) {
                Undo.RegisterFullObjectHierarchyUndo(go.transform.parent, "Make last child");
                go.transform.SetAsLastSibling();
            }
            else {
                go.transform.SetSiblingIndex(int.MaxValue);
            }
        }
    }
}


text:
fileFormatVersion: 2
guid: e3e0939d558e4da43968ba177b79b944
timeCreated: 1492580694
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
namespace UnityEditorSnippets {
    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using UnityEditor;

    public class MoveUp {
        [MenuItem("GameObject/Move up", false, -4)]
        static void moveUp(MenuCommand command) {
            var go = command.context as GameObject;
            if (go.transform.parent) {
                Undo.RegisterFullObjectHierarchyUndo(go.transform.parent, "Move up");
                var index = go.transform.GetSiblingIndex();
                go.transform.SetSiblingIndex(index > 0 ? index - 1 : index);
            }
            else {
                var index = go.transform.GetSiblingIndex();
                go.transform.SetSiblingIndex(index > 0 ? index - 1 : index);
            }
        }
    }
}


text:
namespace UnityEditorSnippets {
    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using UnityEditor;

    public class MoveUpOneLevel {
        [MenuItem("GameObject/Move up one level", false, -4)]
        static void moveUpOneLevel(MenuCommand command) {
            var go = command.context as GameObject;
            Transform parent = go.transform.parent;
            if(parent != null) {
                 Undo.SetTransformParent(go.transform, parent.parent, "Move up one level");
            }
        }
    }
}


text:
namespace UnityEditorSnippets {
    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using UnityEditor;

    public class MoveDown {
        [MenuItem("GameObject/Move down", false, -4)]
        static void moveDown(MenuCommand command) {
            var go = command.context as GameObject;
            if (go.transform.parent) {
                Undo.RegisterFullObjectHierarchyUndo(go.transform.parent, "Move down");
                var index = go.transform.GetSiblingIndex();
                go.transform.SetSiblingIndex(index < go.transform.parent.childCount ? index + 1 : index);
            }
            else {
                var index = go.transform.GetSiblingIndex();
                go.transform.SetSiblingIndex(index + 1);
            }
        }
    }
}


text:
fileFormatVersion: 2
guid: bb6b68a4fef29754fa448c0bcb465807
timeCreated: 1492580694
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
fileFormatVersion: 2
guid: 6fcaeb9e984c9cd4d9637d8d13e5fbf6
timeCreated: 1492581009
licenseType: Free
MonoImporter:
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:


text:
namespace UnityEditorSnippets {
    using UnityEngine;
    using System;
    using System.Collections.Generic;
    using UnityEditor;

    public class MakeFirstChild {
        [MenuItem("GameObject/Make first child", false, -5)]
        static void makeFirstChild(MenuCommand command) {
            var go = command.context as GameObject;
            if (go.transform.parent) {
                Undo.RegisterFullObjectHierarchyUndo(go.transform.parent, "Make first child");
                go.transform.SetAsFirstSibling();
            }
            else {
                go.transform.SetSiblingIndex(0);
            }
        }
    }
}


text:
deployment:
  autodeploy:
    branch: master
    commands:
      - bash autodeploy.sh
general:
  branches:
    ignore:
      - gh-pages

repo_name: munirent/openprocure

repo_language: CSS

mime_type: text/html


text:
#!/bin/bash

rm -rf build/
git config --global user.email "jvanier+openprocure@gmail.com"
git config --global user.name "Open Procure Autodeploy"
env ALLOW_DIRTY=yes bundle exec rake deploy


text:
require 'middleman-gh-pages'

# Use rake deploy to publish the website
task :deploy => :publish

# Use rake to run tests
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:spec)

task :default => :spec


text:
source 'https://rubygems.org'
ruby '2.3.1'

gem "middleman", "~> 3.4.0"

# Live-reloading plugin
gem "middleman-livereload", "~> 3.4.3"

# Auto-generate favicon and touch icon
gem "middleman-favicon-maker"

# For faster file watcher updates on Windows:
gem "wdm", "~> 0.1.0", :platforms => [:mswin, :mingw]

# Windows does not come with time zone data
gem "tzinfo-data", platforms: [:mswin, :mingw]

# Deploy to Github
gem "middleman-gh-pages"

# Tests
group :development do
  gem "rspec", "~> 3.3.0"
  gem "capybara", "~> 2.4.4"
  gem "rspec_junit_formatter", "~> 0.2.2"
end


text:
###
# Compass
###

# Change Compass configuration
# compass_config do |config|
#   config.output_style = :compact
# end

###
# Page options, layouts, aliases and proxies
###

# Per-page layout changes:
#
# With no layout
# page "/path/to/file.html", :layout => false
#
# With alternative layout
# page "/path/to/file.html", :layout => :otherlayout
#
# A path which all have the same layout
# with_layout :admin do
#   page "/admin/*"
# end

# Proxy pages (http://middlemanapp.com/basics/dynamic-pages/)
# proxy "/this-page-has-no-template.html", "/template-file.html", :locals => {
#  :which_fake_page => "Rendering a fake page with a local variable" }

###
# Helpers
###

# Automatic image dimensions on image_tag helper
activate :automatic_image_sizes

# Reload the browser automatically whenever files change
configure :development do
  activate :livereload
end

# Render page.html.haml to page/index.html
activate :directory_indexes
page "/404.html", :directory_index => false

# Methods defined in the helpers block are available in templates
# helpers do
#   def some_helper
#     "Helping"
#   end
# end

set :css_dir, 'css'

set :js_dir, 'js'

set :images_dir, 'images'

# Bower support
after_configuration do
  sprockets.append_path File.join root, 'bower_components'
end

# For generating CSV
page '/*.csv', layout: false

# Build-specific configuration
configure :build do
  # For example, change the Compass output style for deployment
  activate :minify_css

  # Minify Javascript on build
  activate :minify_javascript

  # Enable cache buster
  activate :asset_hash

  # Create favicon/touch icon set from source/favicon_base.png
  activate :favicon_maker, icons: {
    "_favicon_source.svg" => [
      { icon: "favicon.ico", size: "64x64,32x32,24x24,16x16" }
    ]
  }

  # Use relative URLs
  activate :relative_assets
  set :relative_links, true

  # Or use a different image path
  # set :http_prefix, "/Content/images/"
end


text:
![](http://cvlassets.s3.amazonaws.com/OpenProcu.svg)
# Open Procure
## Welcome!

[![Join the chat at https://gitter.im/munirent/openprocure](https://badges.gitter.im/munirent/openprocure.svg)](https://gitter.im/munirent/openprocure?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

Open Procure is an **online open data repository of government purchasing information across the United States**.

Our goal is to make municipal, county-level, state and federal purchasing easily accessible for everyone. It is where government officials, technologists, and active citizens can work together to make our purchasing processes more transparent.

See it live at http://openprocure.us/

## How to contribute to this project

We welcome your help! There are several ways you can contribute:

* Use [Open Procure]! The more people use the information, the better.
* [Search for new agency thresholds](#search) and [add data](#add-data) to Open Procure
* Verify existing data and [create a GitHub issue if you find a mistake][Issues]
* Propose changes to the site or data by [creating a pull request][PR]

Visit our [GitHub Issues][Issues] page to see a list of open actionable items to fix on the site.

We have a [feature roadmap page][Roadmap]. Feature/ideas can be added there.

:mount_fuji: Want to collaborate with others on a task?  Add it to **[Task Mountain][TM]** so other people can work on it!

[Open Procure]: http://openprocure.us
[Issues]: https://github.com/munirent/openprocure/issues
[PR]: https://github.com/munirent/openprocure/pulls
[Roadmap]: https://github.com/munirent/openprocure/wiki/Feature-Roadmap
[TM]: http://www.taskmountain.com/

### How to search for procurement thresholds

Procurement thresholds are not easily accessible through government websites, but the process can generally be expedited by using simple search terms or looking for navigation section headers such as `` "DOING BUSINESS WITH THE CITY" `` or `` PURCHASING RULES AND RESTRICTIONS `` Here are some tips on finding the proper thresholds:

+ First, use some basic boolean operators in a simple Google search. For example, if you're looking for the procurement thresholds for, say, Trenton, NJ, you'll enter something like ``"procurement threshold" AND "trenton" AND "NJ." `` (note: *the term 'procurement' may be substituted for 'purchasing' or 'departmental spending,' while 'threshold' could very likely be found entered as simply 'limits' or, less frequently, terms such as 'petty cash fund'*.) The same strategy is helpful if the governmental website in question has a strong in-site search bar.

+ It may be likely that the precise thresholds for bidding and discretionary spending do not appear readily in a visiible spot on a government's website in plain text. Often, you may need to search or browse to find a much longer document with a title along the lines of "Ethics Code" or "Financial Procedure Code." Almost always, these documents will be in PDF.

+ If you've found what appears to be a lengthy document of various government rules and codes, locating the procurement data can often be expedited  by using your browser's find text function (usually available by navigating in browser to ``Edit >> Find``). Using the find term field, enter words such as "purchasing" or "thresholds" or "discretionary." **Pro-tip: Searching for the dollar symbol ($) is a handy trick for locating precise threshold data in many cases.**

*More to be added to this section.*

### Adding data to Open Procure

[Edit `data/procurement.yaml` directly on GitHub][edit data].  When you submit your changes, GitHub will automatically create a pull request. After the team merges it, the live website will be updated automatically.  It takes about 1 min and you need to refresh your browser, but it is really that simple.  No further action required.

Always include a link to source of the procurement thresholds you are adding to make future verification easy.

[edit data]: https://github.com/munirent/openprocure/edit/master/data/procurement.yaml

#### When adding a PDF as a link

Make sure you append the page number at the end.  If I wanted to add a link to **page 2** of [this PDF](http://www.publishers.org.uk/_resources/assets/attachment/full/0/2091.pdf), I would add a `#page=2` at the end of the URL. e.g. `http://www.publishers.org.uk/_resources/assets/attachment/full/0/2091.pdf#page=2`

## Development

The website is hosted on GitHub pages.  The static HTML pages are in the gh-pages branch.

The website is generated using the Middleman tool. The Middleman template is in the master branch.

### To install

1. Clone repository
2. Install ruby and bundler for your system
3. `bundle install`

### To run in development

`middleman`

Open your browser to http://localhost:4567 or http://127.0.0.1:4567

Edit files and the page will automatically refresh.

### To deploy changes

`rake deploy`

Or push to the master branch and let the auto-deploy do its thing.

## License

To the extent possible under law, [MuniRent](https://www.munirent.co) has waived all copyright and
related or neighboring rights to Open Procure. This work is published
from: United States.

[See LICENSE.txt](LICENSE.txt) for more details.


text:
module LinkHelper

  def wrap_link_if(*args, &block)
    condition    = args[0]
    if block_given?
      content = capture(&block)
      options      = args[1] || {}
      html_options = args[2]
    else
      content = args[1]
      options = args[2] || {}
      html_options = args[3]
    end

    if condition
      link_to(content, options, html_options)
    else
      content
    end
  end

  def wrap_link_unless(*args, &block)
    wrap_link_if(*[!args.shift, *args], &block)
  end

end


text:
module NumberHelper
  DELIMITER_REGEX = /(\d)(?=(\d\d\d)+(?!\d))/

  def number_to_money(number, currency: "$", delimiter: ",", separator: ".")
    return if number.blank?
    "#{currency}#{number_to_delimited(number, delimiter: delimiter, separator: separator)}"
  end

  def number_to_delimited(number, delimiter: ",", separator: ".")
    return if number.blank?
    parts(raw_number(number), delimiter).join(separator)
  end

  def raw_number(number)
    number.to_s.tr "$, ", ""
  end

  private

  def parts(number, delimiter)
    left, right = number.to_s.split('.')
    left.gsub!(DELIMITER_REGEX) do |digit_to_delimit|
      "#{digit_to_delimit}#{delimiter}"
    end
    [left, right].compact
  end
end


text:
module DataHelper
  def unique_keys(array_of_hash)
    array_of_hash.map(&:keys).flatten.uniq
  end

  def extract_values(hash, keys)
    keys.each_with_object([]) { |key, result| result.push(hash[key]) }
  end
end


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'tilt' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('tilt', 'tilt')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'bundler' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('bundler', 'bundler')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'sprockets' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('sprockets', 'sprockets')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'rake' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('rake', 'rake')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'scss' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('sass', 'scss')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'sass' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('sass', 'sass')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'thor' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('thor', 'thor')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'kramdown' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('kramdown', 'kramdown')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'erubis' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('erubis', 'erubis')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'compass' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('compass', 'compass')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'rackup' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('rack', 'rackup')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'haml' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('haml', 'haml')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'middleman' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('middleman-core', 'middleman')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'listen' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('listen', 'listen')


text:
#!/usr/bin/env ruby
#
# This file was generated by Bundler.
#
# The application 'sass-convert' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'pathname'
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
  Pathname.new(__FILE__).realpath)

require 'rubygems'
require 'bundler/setup'

load Gem.bin_path('sass', 'sass-convert')