{"id":33245445,"url":"https://github.com/spring-epfl/lightnion","last_synced_at":"2026-04-03T20:34:35.701Z","repository":{"id":56451675,"uuid":"141424240","full_name":"spring-epfl/lightnion","owner":"spring-epfl","description":"A light version of Tor portable to the browser","archived":false,"fork":false,"pushed_at":"2020-10-09T02:58:10.000Z","size":8881,"stargazers_count":120,"open_issues_count":12,"forks_count":3,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-02-14T13:25:36.908Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/spring-epfl.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}},"created_at":"2018-07-18T11:14:21.000Z","updated_at":"2025-01-07T01:41:19.000Z","dependencies_parsed_at":"2022-08-15T19:00:51.908Z","dependency_job_id":null,"html_url":"https://github.com/spring-epfl/lightnion","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/spring-epfl/lightnion","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spring-epfl%2Flightnion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spring-epfl%2Flightnion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spring-epfl%2Flightnion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spring-epfl%2Flightnion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/spring-epfl","download_url":"https://codeload.github.com/spring-epfl/lightnion/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/spring-epfl%2Flightnion/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31375769,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:53:18.093Z","status":"ssl_error","status_checked_at":"2026-04-03T17:53:17.617Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2025-11-16T21:00:32.225Z","updated_at":"2026-04-03T20:34:35.686Z","avatar_url":"https://github.com/spring-epfl.png","language":"Python","readme":"Lightnion is a JavaScript library that you can include on your webpage to let any modern browser make anonymous requests. Lightnion uses an *untrusted* proxy to interact with the Tor network. This proxy converts between protocols (Websockets to pure TCP). This repository also contains a Python Lightnion Tor client that we have been using for testing.\n\n**WARNING:** At the moment Lightnion is alpha-level research software. Do *not* use it in production, or for anything that really requires anonymity. You are, however, more than welcome to experiment with Lightnion. Please provide feedback opening issues or writing to the authors.\n\nQuick setup\n-----------\n\nClone the repository and add it to your `PYTHONPATH`:\n```sh\ngit clone --recurse-submodules https://github.com/spring-epfl/lighttor lightnion\ncd lightnion\nvirtualenv venv\nsource venv/bin/activate\npip install -r requirements.txt\nexport PYTHONPATH=\"$PWD\"\n```\n\nYou'll find some examples that showcase the Python Tor client under `./examples`. For example, you could run (after setting up `chutney`, see below):\n\n```\npython3 examples/link.py 127.0.0.1 5000\npython3 examples/extend_circuit.py 127.0.0.1 5000\npython3 examples/path.py 127.0.0.1 5000 7 0 8001\n```\n\nInteracting with the Tor network\n--------------------------------\n\nLightnion interacts with the Tor network. For testing and demo purposes we recommend to use a test network generated by `chutney`. To set one up you could do the following:\n\n```sh\ngit clone https://git.torproject.org/chutney.git\ncp lightnion/tools/chutney/small-chut chutney # or read tools/chutney/README.md\ncd chutney\ngit apply ../lightnion/tools/chutney/sandbox_patch # disable sandbox if you need\n./small-chut\n```\n\nThis will setup and run a small Tor test network. See the [notes](notes.sh) for how to run Lightnion with the real Tor network.\n\nlightnion.js\n------------\n\nTo build the JavaScript `lightnion.js` library, run:\n\n```sh\ncd js-client\nmake # you'll need a java, tested with java-10-openjdk\n```\n\nYou can then use `lightnion.js` in your website (make sure you are also running a proxy, see below). You can then use `lightnion.js` as follows:\n\n```JavaScript\n// create a channel through the proxy\n\n/*\nParams: (host, port, success, error, io, fast, auth, select_path, tcp_ports,info)\n- Proxy host\n- Proxy port\n- success callback\n- error callback\n- socket io (default: websocket)\n- fast connection (default: false)\n- auth-enabled? (default: false)\n- select path at client? (o/w: at proxy) (default: true)\n- tcp ports to be used on streams. (default: [80,443])\n- info: optional callback for step-by-step information\n*/\nlnn.open('proxy.example.net', 4990, function(channel)\n\n{\n    // Callback interface (skip intermediate states)\n    if (lln.state != lln.state.success)\n        return\n\n    // Handle response of request\n    var handler = function(response) {...};\n\n    // Send HTTP GET request to api.ipify.org\n\n    tcp = lnn.stream.tcp(channel, 'api.ipify.org', 80, handler)\n    tcp.send('GET / HTTP/1.1\\r\\n' +\n             'Host: api.ipify.org\\r\\n\\r\\n')\n})\n\n```\n\nStarting the proxy\n------------------\n\nTo start the proxy first install its dependencies\n\n```sh\npip install -r requirements-proxy.txt\n```\n\nand then run it:\n\n```sh\npython -m lightnion.proxy\n```\n\nthis will however only start the proxy and you will have to host `lightnion.js` and the demo files another way. Alternative, the proxy can host them for you by running:\n\n```\npython -m lightnion.proxy -vvv --purge-cache --static ./js-client/demo/: ./js-client/evaluation/:\n```\n\nYou can now explore some of the demos:\n\n * [Simple demo, retrieves consensus](http://localhost:4990/dir.html)\n * [Retrieves consensus, more info](http://localhost:4990/verbose.html)\n * [Compare regular and fast key exchange](http://localhost:4990/fast.html)\n * [Webpage retrieval (curl)](http://localhost:4990/curl.html)\n * [Get / post request](http://localhost:4990/get-post.html)\n * [Webpage via TLS](http://localhost:4990/tls.html)\n * [Path selection at client benchmarking](http://localhost:4990/path.html)\n\nRequirements\n------------\n\nWe do recommend using `chutney`, you'll find some instructions\nwithin `./tools/chutney`.\n\n**Tested with `Python 3.7.0` against\n`Tor version 0.3.3.9 (git-45028085ea188baf)`.**\n\nLicense\n-------\n\nThis software is licensed under the\n[BSD3 clause license](LICENSE).\n© 2018-2019 Spring Lab (EPFL) and contributors.\n","funding_links":[],"categories":["Browsers"],"sub_categories":["SIEM"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspring-epfl%2Flightnion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspring-epfl%2Flightnion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspring-epfl%2Flightnion/lists"}