{"id":23456486,"url":"https://github.com/gretel/ramp","last_synced_at":"2025-04-11T06:48:25.013Z","repository":{"id":267872582,"uuid":"902619207","full_name":"gretel/ramp","owner":"gretel","description":"RAMP provides a unified system for marking and identifying communication endpoints across physical and digital domains, designed specifically for hacker spaces, maker labs and technical gatherings like the Chaos Communication Congress.","archived":false,"fork":false,"pushed_at":"2024-12-22T01:38:10.000Z","size":13,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-15T22:41:10.559Z","etag":null,"topics":["conference","congress","documentation","hackerspace","marking","meshtastic","protocols","resources","reticulum"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gretel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-12T23:37:06.000Z","updated_at":"2024-12-22T01:38:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"d46ab3db-e91c-4f22-ad94-50be8b06db7b","html_url":"https://github.com/gretel/ramp","commit_stats":null,"previous_names":["gretel/ramp"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gretel%2Framp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gretel%2Framp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gretel%2Framp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gretel%2Framp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gretel","download_url":"https://codeload.github.com/gretel/ramp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248358549,"owners_count":21090401,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["conference","congress","documentation","hackerspace","marking","meshtastic","protocols","resources","reticulum"],"created_at":"2024-12-24T04:32:00.273Z","updated_at":"2025-04-11T06:48:24.983Z","avatar_url":"https://github.com/gretel.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📡 RAMP: Resource Access Marking Protocol\n\n## 🔍 Overview\n\nRAMP provides a unified system for marking and identifying communication endpoints across physical and digital domains, designed specifically for hacker spaces, maker labs and technical gatherings like the Chaos Communication Congress.\n\n## 🏗️ Core Architecture \n\nBasic syntax:\n```\n[~]\u003clayer\u003e/\u003cprotocol\u003e[:\u003cparam1\u003e[/\u003cparam2\u003e]][#\u003cmetadata\u003e]\n```\nWhere `~` prefix indicates a person reference (e.g. `~N/I:10.0.0.1/24#NOC-LEAD`)\n\nWhere:\n- `layer`: Single uppercase letter [A-Z]\n- `protocol`: Single uppercase letter [A-Z]\n- `param1`, `param2`: Protocol-specific parameter format\n- `metadata`: Uppercase alphanumeric with hyphens [A-Z0-9-]\n- `[]` denotes optional components\n\nExample: `P/L:433.500MHz/SF7#MESHNODE`\n\n### Label Format\n\nStandard sticker (40x40mm):\n```\n┌────────────────┐\n│      [QR]      │ \u003c- 12x12mm QR code\n├────────────────┤\n│ P/L:433.500M   │ \u003c- 8pt monospace\n│ /SF7#NODE01    │\n├────────────────┤\n│   📡  LoRa     │ \u003c- 10pt sans-serif\n│   Node #01     │\n└────────────────┘\n```\n\n### URI Format\n```\nramp://\u003clayer\u003e/\u003cprotocol\u003e[:\u003cparam1\u003e[/\u003cparam2\u003e]][#\u003cmetadata\u003e]\n```\n- URI-unsafe characters must be percent-encoded\n- Parameters and metadata are case-preserved\n- Fragment (#) cannot contain additional fragments\n\n## 🌐 Protocol Stack Examples\n\n### Basic Layer Model\n```mermaid\ngraph TB\n    L0[Physical Layer: P] --\u003e|Raw transmission| L1[Network Layer: N]\n    L1 --\u003e|Protocol| L2[Application Layer: A]\n\n    style L0 fill:#1a73e8,color:white\n    style L1 fill:#34a853,color:white \n    style L2 fill:#ea4335,color:white\n```\n\n### Examples\n\n## Remote Shell Access\n\n```mermaid\ngraph TB\n   P1[P/L:433.500MHz/SF7] --\u003e|Mesh Node| N1[N/R:a1b2c3d4]\n   N1 --\u003e|Transport| A1[A/X:shell#1337]\n\n   style P1 fill:#1a73e8,color:white\n   style N1 fill:#34a853,color:white\n   style A1 fill:#ea4335,color:white\n```\n\nRemote system access over LoRa-based Reticulum mesh. SF7 spreading factor balances range and speed.\n\n```\n┌────────────────┐\n│      [QR]      │\n├────────────────┤\n│ P/L:433.500M   │\n│ /SF7#SHELL01   │\n├────────────────┤\n│   📡  LoRa     │\n│   Shell #01    │\n└────────────────┘\n```\n\n## DMR Repeater System\n```mermaid\ngraph TB\n    P1[P/R:145.500MHz] --\u003e|Input| N1[N/D:317523]\n    N1 --\u003e|Controller| P2[P/R:145.900MHz]\n    P2 --\u003e|Output| A1[A/M:@rprt145]\n\n    style P1 fill:#1a73e8,color:white\n    style N1 fill:#34a853,color:white\n    style P2 fill:#1a73e8,color:white\n    style A1 fill:#ea4335,color:white\n```\n\nDMR voice repeater with Matrix status updates. Input 145.500MHz, output 145.900MHz, monitoring via Matrix.\n\n```\n┌────────────────┐\n│      [QR]      │\n├────────────────┤\n│ P/R:145.500M   │\n│ #RPRT317523    │\n├────────────────┤\n│   📻  DMR      │\n│ Repeater #01   │\n└────────────────┘\n```\n\n## 📋 Protocol Mappings\n\n### Parameter Validation Rules\n```python\nVALIDATION = {\n    # Physical parameters\n    'freq': r'^\\d{3}\\.\\d{3}[MG]Hz$',     # e.g., 433.500MHz\n    'sf': r'^SF\\d{1,2}$',                 # e.g., SF7\n    'mac': r'^([0-9A-F]{2}:){5}[0-9A-F]{2}$',  # MAC address\n    'channel': r'^\\d{1,3}$',              # e.g., 36\n    'speed': r'^\\d+[KMGT]$',              # e.g., 100M\n    \n    # Network parameters\n    'ipv4': r'^\\d{1,3}(\\.\\d{1,3}){3}$',   # IPv4 address\n    'ipv6': r'^[0-9a-fA-F:]+$',           # IPv6 address\n    'port': r'^\\d{1,5}$',                 # Port number\n    'hash': r'^[0-9a-f]{64}$',            # SHA-256 hash\n    \n    # Application parameters\n    'user': r'^@?[a-zA-Z0-9_.-]+$',       # Username\n    'room': r'^[#!][a-zA-Z0-9_.-]+$',     # Room identifier\n    'host': r'^[a-zA-Z0-9.-]+$'           # Hostname\n}\n```\n\n### Physical Layer (P)\n```python\nPHYSICAL = {\n    # Radio\n    'L': {'name': 'LoRa',      'params': '\u003cfreq\u003e/\u003cpreset\u003e',  'note': '📡 Long Range Radio',\n       'presets': {\n           'ST': {'name': 'Short Turbo',    'sf': 7,  'bw': 500, 'cr': '4/5', 'dr': 21.88},\n           'SF': {'name': 'Short Fast',     'sf': 7,  'bw': 250, 'cr': '4/5', 'dr': 10.94},\n           'SS': {'name': 'Short Slow',     'sf': 8,  'bw': 250, 'cr': '4/5', 'dr': 6.25},\n           'MF': {'name': 'Medium Fast',    'sf': 9,  'bw': 250, 'cr': '4/5', 'dr': 3.52},\n           'MS': {'name': 'Medium Slow',    'sf': 10, 'bw': 250, 'cr': '4/5', 'dr': 1.95},\n           'LF': {'name': 'Long Fast',      'sf': 11, 'bw': 250, 'cr': '4/5', 'dr': 1.07},\n           'LM': {'name': 'Long Moderate',  'sf': 11, 'bw': 125, 'cr': '4/8', 'dr': 0.34},\n           'LS': {'name': 'Long Slow',      'sf': 12, 'bw': 125, 'cr': '4/8', 'dr': 0.18},\n           'VLS':{'name': 'Very Long Slow', 'sf': 12, 'bw': 62.5,'cr': '4/8', 'dr': 0.09}\n       }},\n    'R': {'name': 'RF',        'params': '\u003cfreq\u003e/\u003cmode\u003e', 'note': '📻 Generic Radio'},\n    'W': {'name': 'WiFi',      'params': '\u003cchannel\u003e/\u003cwidth\u003e', 'note': '📶 WiFi Radio'},\n    'B': {'name': 'BLE',       'params': '\u003cmac\u003e/\u003ctype\u003e', 'note': '🦷 Bluetooth Low Energy'},\n    'Z': {'name': 'Zigbee',    'params': '\u003cchannel\u003e/\u003cpanid\u003e', 'note': '🕸️ Zigbee Radio'},\n    \n    # Wired\n    'E': {'name': 'Ethernet',  'params': '\u003cspeed\u003e/\u003cduplex\u003e', 'note': '🔌 Wired Network'},\n    'S': {'name': 'Serial',    'params': '\u003cbaud\u003e/\u003cconfig\u003e', 'note': '🔤 Serial Data'},\n    'U': {'name': 'USB',       'params': '\u003cversion\u003e/\u003cclass\u003e', 'note': '🔌 Universal Serial Bus'},\n    'C': {'name': 'CAN',       'params': '\u003cspeed\u003e/\u003cformat\u003e', 'note': '🚗 Controller Area Network'},\n    \n    # Special\n    'Q': {'name': 'QR',        'params': '\u003csize\u003e/\u003cformat\u003e', 'note': '📱 QR Code Resource'},\n    'O': {'name': 'Optical',   'params': '\u003cwavelength\u003e/\u003cpower\u003e', 'note': '🔦 Light-based'},\n    'N': {'name': 'NFC',       'params': '\u003ctype\u003e/\u003cmode\u003e', 'note': '📱 Near Field Comms'},\n    'A': {'name': 'Audio',     'params': '\u003cfreq\u003e/\u003cchannels\u003e', 'note': '🔊 Sound-based'},\n    'Q': {'name': 'QAM',       'params': '\u003cpoints\u003e/\u003crate\u003e', 'note': '〰️ RF Modulation'},\n    'V': {'name': 'Visual',    'params': '\u003cformat\u003e/\u003cfps\u003e', 'note': '👁️ Visual Light Comms'}\n}\n```\n\n### Network Layer (N)\n```python\nNETWORK = {\n    # Internet Infrastructure\n    'A': {'name': 'AS',        'params': '\u003casn\u003e/\u003cprefix\u003e', 'note': '🌐 Autonomous System'},\n    'I': {'name': 'IPv4',      'params': '\u003cnet\u003e/\u003cmask\u003e', 'note': '🌐 Internet Protocol v4'},\n    '6': {'name': 'IPv6',      'params': '\u003cnet\u003e/\u003cprefix\u003e', 'note': '🌐 Internet Protocol v6'},\n    'T': {'name': 'TCP',       'params': '\u003cport\u003e/\u003cservice\u003e', 'note': '🔌 Transport Control'},\n    'U': {'name': 'UDP',       'params': '\u003cport\u003e/\u003cservice\u003e', 'note': '🔌 User Datagram'},\n    \n    # Amateur Radio\n    'P': {'name': 'POCSAG',    'params': '\u003cric\u003e/\u003ctype\u003e', 'note': '📟 Paging Protocol'},\n    'D': {'name': 'DMR',       'params': '\u003cid\u003e/\u003ctg\u003e', 'note': '🎙️ Digital Mobile Radio'},\n    'X': {'name': 'AX.25',     'params': '\u003ccallsign\u003e/\u003cssid\u003e', 'note': '📡 Packet Radio'},\n    \n    # Mesh/P2P\n    'M': {'name': 'Meshtastic','params': '\u003cid\u003e/\u003cchannel\u003e', 'note': '🕸️ Meshtastic Mesh'},\n    'R': {'name': 'Reticulum', 'params': '\u003chash\u003e/\u003ctype\u003e', 'note': '🕸️ Reticulum Mesh'},\n    'Y': {'name': 'Yggdrasil', 'params': '\u003caddr\u003e/\u003csubnet\u003e', 'note': '🌳 Yggdrasil Network'},\n    'C': {'name': 'cjdns',     'params': '\u003cpubkey\u003e/\u003cpeers\u003e', 'note': '🕸️ cjdns Mesh'},\n    'H': {'name': 'HAMnet',    'params': '\u003ccall\u003e/\u003csubnet\u003e', 'note': '📡 Amateur Radio Network'},\n    \n    # Overlay Networks  \n    'O': {'name': 'Tor',       'params': '\u003conion\u003e/\u003cport\u003e', 'note': '🧅 Tor Network',\n          'types': {'HS': 'Hidden Service', 'NODE': 'Relay Node', 'DIR': 'Directory'}},\n    'N': {'name': 'I2P',       'params': '\u003cb32\u003e/\u003cport\u003e', 'note': '🧅 I2P Network'},\n    'L': {'name': 'IPFS',      'params': '\u003ccid\u003e/\u003cpath\u003e', 'note': '📦 InterPlanetary FS'},\n}\n}\n```\n\n### Application Layer (A)\n```python\nAPPLICATION = {\n    # Communication\n    'M': {'name': 'Matrix',    'params': '\u003cuser\u003e/\u003croom\u003e', 'note': '💬 Matrix Protocol'},\n    'X': {'name': 'XMPP',      'params': '\u003cjid\u003e/\u003cmuc\u003e', 'note': '💬 XMPP Protocol'},\n    'I': {'name': 'IRC',       'params': '\u003cserver\u003e/\u003cchannel\u003e', 'note': '💬 Internet Relay Chat',\n         'uri': 'irc://\u003cserver\u003e[:\u003cport\u003e]/\u003cchannel\u003e[,\u003ckey\u003e]'},\n    'L': {'name': 'LXMF',      'params': '\u003chash\u003e/\u003ctype\u003e', 'note': '📨 LXMF Messaging'},\n    'E': {'name': 'Email',     'params': '\u003caddr\u003e/\u003ctransport\u003e', 'note': '📧 Email Protocol'},\n    \n    # Services\n    'H': {'name': 'HTTP',      'params': '\u003chost\u003e/\u003cpath\u003e', 'note': '🌐 Web Service'},\n    'G': {'name': 'Gemini',    'params': '\u003chost\u003e/\u003cpath\u003e', 'note': '🚀 Gemini Protocol'},\n    'S': {'name': 'SIP',       'params': '\u003curi\u003e/\u003ctransport\u003e', 'note': '☎️ Voice Over IP'},\n    'F': {'name': 'FTP',       'params': '\u003chost\u003e/\u003cpath\u003e', 'note': '📂 File Transfer'},\n    'N': {'name': 'NNTP',      'params': '\u003chost\u003e/\u003cgroup\u003e', 'note': '📰 Usenet News'},\n    \n    # Security\n    'P': {'name': 'PGP',       'params': '\u003ckeyid\u003e/\u003calgo\u003e', 'note': '🔐 PGP Keys'},\n    'O': {'name': 'OTR',       'params': '\u003cfp\u003e/\u003cversion\u003e', 'note': '🤫 Off The Record'},\n    'W': {'name': 'WireGuard', 'params': '\u003cpubkey\u003e/\u003cport\u003e', 'note': '🔒 VPN Tunnel'},\n    \n    # Special Purpose\n    'T': {'name': 'Telemetry', 'params': '\u003csensor\u003e/\u003cinterval\u003e', 'note': '📊 Sensor Data'},\n    'D': {'name': 'DNS',       'params': '\u003cname\u003e/\u003ctype\u003e', 'note': '📖 Name Service'},\n    'B': {'name': 'Bitcoin',   'params': '\u003caddr\u003e/\u003cnetwork\u003e', 'note': '₿ Cryptocurrency'},\n    'R': {'name': 'Radio',     'params': '\u003cfreq\u003e/\u003cmode\u003e', 'note': '📻 Amateur Radio'},\n    'Z': {'name': 'ZeroMQ',    'params': '\u003csocket\u003e/\u003cpattern\u003e', 'note': '🔄 Message Queue'}\n}\n```\n\n## 🎪 Congress Example Labels\n\nWiFi Access Point:\n```\n┌────────────────┐\n│      [QR]      │\n├────────────────┤\n│ P/W:36/160     │\n│ #NOC.AP.12     │\n├────────────────┤\n│   📶  WiFi     │\n│   NOC AP 12    │\n└────────────────┘\n```\n\nNetwork Segment:\n```\n┌────────────────┐\n│      [QR]      │\n├────────────────┤\n│ N/I:10.128.0.0 │\n│ /16#HACKCTR    │\n├────────────────┤\n│   🌐  Net      │\n│  Hack Center   │\n└────────────────┘\n```\n\nNOC Reference:\n```\n┌────────────────┐\n│      [QR]      │\n├────────────────┤\n│ ~N/I:10.128    │\n│ /16#NOC-LEAD   │\n├────────────────┤\n│   👤  Net      │\n│   NOC Lead     │\n└────────────────┘\n```\n\nQR Resource:\n```\n┌────────────────┐\n│      [QR]      │\n├────────────────┤\n│ P/Q:128/WIFI   │\n│ #GUEST-NET     │\n├────────────────┤\n│   📱  QR       │\n│  WiFi Access   │\n└────────────────┘\n```\n\nTor Hidden Service:\n```\n┌────────────────┐\n│      [QR]      │\n├────────────────┤\n│ N/O:xmpl23...  │\n│ /80#HS.01      │\n├────────────────┤\n│   🧅  Tor      │\n│  Hidden Svc    │\n└────────────────┘\n```\n\nBadge Charging:\n```\n┌────────────────┐\n│      [QR]      │\n├────────────────┤\n│ P/U:2.0/CDC    │\n│ #CHARGE.05     │\n├────────────────┤\n│   🔌  USB      │\n│ Charging #05   │\n└────────────────┘\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgretel%2Framp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgretel%2Framp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgretel%2Framp/lists"}