{"id":22406,"library":"ssdp","title":"SSDP (Simple Service Discovery Protocol)","description":"Python asyncio library for Simple Service Discovery Protocol (SSDP). Supports both client and server roles, enabling discovery and advertisement of network services. Current version 1.3.1, released under MIT license. Active development with asyncio-native design.","status":"active","version":"1.3.1","language":"python","source_language":"en","source_url":"https://github.com/jd/ssdp","tags":["ssdp","upnp","discovery","asyncio","network"],"install":[{"cmd":"pip install ssdp","lang":"bash","label":"Install from PyPI"}],"dependencies":[],"imports":[{"wrong":"from ssdp import SSDPClient","symbol":"SimpleServiceDiscoveryProtocol","correct":"from ssdp import SimpleServiceDiscoveryProtocol"},{"symbol":"SSDPRequest","correct":"from ssdp import SSDPRequest"},{"symbol":"SSDPResponse","correct":"from ssdp import SSDPResponse"}],"quickstart":{"code":"import asyncio\nfrom ssdp import SSDPClient\n\nasync def discover():\n    client = SSDPClient()\n    async with client:\n        services = await client.discover(st='upnp:rootdevice', mx=3)\n        for service in services:\n            print(f'Location: {service.location}')\n\nasyncio.run(discover())","lang":"python","description":"Discover UPnP devices on the network."},"warnings":[{"fix":"Use async/await pattern. Wrap code in asyncio.run() if needed.","message":"Version 1.3.0 removed the old synchronous API. All functionality now requires asyncio.","severity":"breaking","affected_versions":">=1.3.0"},{"fix":"Use 'async with client:' or call await client.start() and await client.close().","message":"SSDPClient/SSDPServer must be used as async context managers or have start()/close() called explicitly.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Set loopback=True in SSDPClient constructor to enable.","message":"The library does not support multicast loopback by default, so discovery may not see services on the same host.","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"search_vec":"'1.3.1':30 'activ':35 'advertis':24 'asyncio':7,39,45 'asyncio-n':38 'client':17 'current':28 'design':41 'develop':36 'discoveri':4,12,22,44 'enabl':21 'librari':8 'licens':34 'mit':33 'nativ':40 'network':26,46 'protocol':5,13 'python':6 'releas':31 'role':20 'server':19 'servic':3,11,27 'simpl':2,10 'ssdp':1,14,42 'support':15 'upnp':43 'version':29","created_at":"2026-04-27T17:05:00.628914+00:00","updated_at":"2026-04-27T17:05:00.628914+00:00","problems":null,"ecosystem":"pypi","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":"1.3.1","cli_name":"","cli_version":null,"type":"library","homepage":null,"github":"https://github.com/codingjoe/ssdp","docs":null,"changelog":"https://github.com/codingjoe/ssdp/releases","pypi":"https://pypi.org/project/ssdp/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["http-networking"],"base_url":null,"auth_type":null,"provenance":{"verified_status":"passing","verified_at":"2026-07-03","last_verified":"2026-07-03","next_check":"2026-08-02","install_tag":null}}