{"id":37090874,"url":"https://github.com/rm-self-serve/webinterface-wifi","last_synced_at":"2026-01-14T11:00:57.576Z","repository":{"id":209119193,"uuid":"589450216","full_name":"rM-self-serve/webinterface-wifi","owner":"rM-self-serve","description":"View the web interface over wifi. For the ReMarkable Tablet.","archived":false,"fork":false,"pushed_at":"2025-02-04T08:14:38.000Z","size":115,"stargazers_count":32,"open_issues_count":2,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-11T04:31:53.440Z","etag":null,"topics":["interface","mobile","remarkable","remarkable-2","remarkable-tablet","reverse-proxy","web","webinterface","wifi","wireless"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/rM-self-serve.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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,"zenodo":null}},"created_at":"2023-01-16T06:23:06.000Z","updated_at":"2025-05-02T13:29:57.000Z","dependencies_parsed_at":"2023-12-08T01:31:43.035Z","dependency_job_id":"b5bab5b8-aebe-4b44-88e2-cebe9b0a29be","html_url":"https://github.com/rM-self-serve/webinterface-wifi","commit_stats":null,"previous_names":["rm-self-serve/webinterface-wifi"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/rM-self-serve/webinterface-wifi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rM-self-serve%2Fwebinterface-wifi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rM-self-serve%2Fwebinterface-wifi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rM-self-serve%2Fwebinterface-wifi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rM-self-serve%2Fwebinterface-wifi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rM-self-serve","download_url":"https://codeload.github.com/rM-self-serve/webinterface-wifi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rM-self-serve%2Fwebinterface-wifi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28417813,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","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":["interface","mobile","remarkable","remarkable-2","remarkable-tablet","reverse-proxy","web","webinterface","wifi","wireless"],"created_at":"2026-01-14T11:00:54.660Z","updated_at":"2026-01-14T11:00:57.558Z","avatar_url":"https://github.com/rM-self-serve.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Static Badge](https://img.shields.io/badge/reMarkable-v3.13-green)\n[![rm1](https://img.shields.io/badge/rM1-supported-green)](https://remarkable.com/store/remarkable)\n[![rm2](https://img.shields.io/badge/rM2-supported-green)](https://remarkable.com/store/remarkable-2)\n[![rmpp](https://img.shields.io/badge/rMpp-supported-green)](https://remarkable.com/store/overview/remarkable-paper-pro)\n[![opkg](https://img.shields.io/badge/OPKG-webinterface--wifi-blue)](https://toltec-dev.org/)\n[![Discord](https://img.shields.io/discord/385916768696139794.svg?label=reMarkable\u0026logo=discord\u0026logoColor=ffffff\u0026color=7389D8\u0026labelColor=6A7EC2)](https://discord.gg/ATqQGfu)\n![Build Release](https://github.com/rM-self-serve/webinterface-wifi/actions/workflows/build-release.yml/badge.svg)\n\n# WebInterface-Wifi\n\nThis program will make the ReMarkable Tablet's [USB Web Interface](https://remarkable.guide/tech/usb-web-interface.html) available on wifi. \n\nPassword authentication and SSL supported, along with the ability to only run when connected to certain wifi networks.  \n\n![demo](https://github.com/rM-self-serve/webinterface-wifi/assets/122753594/51263588-0efd-46a0-94fc-5e936cdc7615)\n\n### Limitations \n\nWithout additional programs, the USB Web Interface will only be available over wifi while the device is plugged in and the USB Web Interface is enabled/reachable at 10.11.99.1.\nTo ensure the USB Web Interface is always available, use [webinterface-onboot](https://github.com/rM-self-serve/webinterface-onboot).\n\nDrag and drop does not work well on mobile for v3.11 and under, though it is simple to add an [upload button](https://github.com/rM-self-serve/upload_button).\n\n---\n\n#### Type the following commands after ssh'ing into the ReMarkable Tablet\n\n## Installation/Removal\n\n**It is recommended to install via the [toltec package manager](https://toltec-dev.org/).** \n\n### With toltec\n\n```\n$ opkg update\n$ opkg install webinterface-wifi\n$ opkg remove webinterface-wifi\n```\n\n### No toltec\n\n\u003e The Remarkable Tablet's default wget binary does not\nimplement TLS certificate validation (https) so the installation process is\ninitiated through a proxy hosted at http://johnrigoni.me/rM-self-serve\npointed at https://github.com/rM-self-serve, feel free to compare checksums\nor manually copy the install file to the device.\n\n#### Install\n\n```$ wget http://johnrigoni.me/rM-self-serve/webinterface-wifi/install-webint-wf.sh \u0026\u0026 bash install-webint-wf.sh```\n\nOr [manually transfer](https://remarkable.guide/guide/access/file-transfer.html) the [install file](https://github.com/rM-self-serve/webinterface-wifi/releases/latest/download/install-webint-wf.sh) to the device and run:\n\n```$ bash install-webint-wf.sh```\n\n#### Remove\n\n```$ wget http://johnrigoni.me/rM-self-serve/webinterface-wifi/install-webint-wf.sh \u0026\u0026 bash install-webint-wf.sh remove```\n\nOr [manually transfer](https://remarkable.guide/guide/access/file-transfer.html) the [install file](https://github.com/rM-self-serve/webinterface-wifi/releases/latest/download/install-webint-wf.sh) to the device and run:\n\n```$ bash install-webint-wf.sh remove```\n\n## Usage\n\n### To use webinterface-wifi, run:\n\n`$ systemctl enable --now webinterface-wifi`\n\nTo view the USB Web Interface, type the remarkable's wifi ip address in the browser. It can be found in the copyrights and licenses tab in the settings. Ex : http://10.0.0.10/ \n\n## Security :warning:\n\n**By default, the USB Web Interface runs without authentication or encryption.** This means anyone on the same wifi network can access your files. The only way to secure your device on public wifi is by enabling both authentication and encryption.\n\n### SSL/Network Encryption\nObtain an SSL certificate and the corresponding private key, a self signed cert is sufficient. These can be placed at the following paths:\n\n```\n# Certificate default path\n/home/root/.local/share/webinterface-wifi/ssl/ssl_cert.pem\n# If installed with Toltec\n/opt/etc/webinterface-wifi/ssl/ssl_cert.pem\n\n# Private Key default path\n/home/root/.local/share/webinterface-wifi/ssl/ssl_priv.rsa \n# If installed with Toltec\n/opt/etc/webinterface-wifi/ssl/ssl_priv.rsa \n```\n\nOr the paths can be specified in config.toml:\n```toml\n[conf]\nssl_cert_path=\"/etc/ssl/ssl_cert.pem\"\nssl_priv_path=\"/etc/ssl/ssl_priv.rsa\"\n# ...\n```\n\nThen enable ssl in each network:\n```toml\n[networks.arbitrary_name]\nssl=true\n# ...\n\n[undefined_networks]\nssl=true\n# ...\n```\n\u003e An SSL keypair will be included in this repository for testing purposes. This should not be considered secure as someone determined could use the provided private key to decrypt your network traffic. These will need to be downloaded separately. \n\n### Login/Authentication\n\nA login consists of a username and password. The username will not be saved so ensure to remember it along with the password. Since the device is not encrypted, it is important to use a unique password not used elsewhere. **Even with login enabled, anyone on the same wifi network can read whatever files are uploaded/downloaded, use SSL to mitigate this vulnerability.** \n\nTo create a login, run the following command and enter a username and password:\n```\n$ webinterface-wifi create-login\nUser: myuser\nPassword: \nRetype Password: \n```\n```\n# Login file default path\n/home/root/.local/share/webinterface-wifi/auth/login.pass \n# If installed with Toltec\n/opt/etc/webinterface-wifi/auth/login.pass \n```\nThis will create a login file at the default path so that it does not need to be specified in config.toml.\n\nTo specify in config.toml:\n```toml\n[conf]\nlogin_path=\"/etc/auth/login.pass\"\n# ...\n```\n\u003e The password is not stored in plaintext.\n\n## Multiple Wifi Networks\nEach wifi network can have settings defined in the config:\n```toml\n[networks.home]\nrouter_ssid=\"Home's Wifi Name\"\nssl=false\nlogin_enforced=false\nlisten_ip=\"auto\"\nlisten_port=80\n\n[networks.coffeshop]\nrouter_ssid=\"Coffeshop's Wifi Name\"\nssl=true\nlogin_enforced=true\nlisten_ip=\"auto\"\nlisten_port=443\nhttp_redirect_port=80\n```\nWhen the wifi network with the matching SSID connects, these settings will be applied.\n\nIf the connected network is not defined (and is not filtered), it will run with the settings of the [undefined_networks] field:\n```toml\n[undefined_networks]\nssl=false\nlogin_enforced=false\nlisten_ip=\"auto\"\nlisten_port=80\n```\n\n\n### Wifi Network Filtering\nIf you would like your webinterface to be available on your home wifi network but not the airport, you can configure network filtering.\n\n#### Allowlist\nThe more secure option, this feature ensures the webinterface will only be available on defined networks. \n\n```toml\n[conf]\nnetwork_filter=\"allowlist\"\n\n[networks.home]\nrouter_ssid=\"Home Wifi Name\"\n# ...\n\n[allowlist]\nnetworks=[ \"home\" ]\n```\n\n#### Blocklist\nThis option lets you define which networks the webinterface should NOT run on, while running on any network that is not in the list.\n```toml\n[conf]\nnetwork_filter=\"blocklist\"\n\n[networks.airport]\nrouter_ssid=\"Airport Wifi Name\"\n\n[blocklist]\nnetworks=[ \"airport\" ]\n\n[undefined_networks]\n# ...\n```\n\n## Editing the Config\n\u003e Webinterface-Wifi needs to be explicitly reloaded when the config is edited.\n\n:warning: An invalid config will stop the daemon from running. Restart it with:\n```\n$ systemctl daemon-reload\n$ systemctl restart webinterface-wifi\n```\n\nOpen in the default config in your editor of choice, defined by the environment variable $EDITOR, or nano if not defined:\n```\n$ webinterface-wifi edit\n```\n\nAfter saving the file, validation will be performed on the config where potential errors will be raised.\n\n```\n# Default Config Path\n/home/root/.config/webinterface-wifi/config.toml\n```\n\n## Reloading the Config\nYou may wish to edit the config and reload the program without restarting the daemon.\n```\n$ webinterface-wifi reload       \nConfig Valid\nConfig Reloaded\n```\n\n## Validation/Mock Run\nTo ensure your modified config is valid and do a mock run to see which network may be currently active.\n```\n$ webinterface-wifi validate\n```\n\n## Network Information\n```\n$ webinterface-wifi net-info\nwifi interface: wlan0 ip: 192.168.1.93\nwebint ip exists: 10.11.99.1\nrouter ssid: Home Wifi Name\n```\n\n## Listen IP\nIn the definition of a network, the 'listen_ip' field is set to \"auto\" by default. This will find the ip address of the wifi interface and start the server on it. It can also be configured to run on a static ipv4 ip address. The webinterface will be available on this ip address when the device has wifi.\n```toml\n[networks.home]\nlisten_ip=\"0.0.0.0\"\n\n[networks.coffeshop]\nlisten_ip=\"auto\"\n\n[undefined_networks]\nlisten_ip=\"169.254.229.31\"\n```\n\n## Http Redirect to Https\nIf the defined network has enabled SSL, it can enable the redirection of an unencrypted network connection to an encrypted one. Omitting this field will disable redirection.\n```toml\n[networks.home]\nhttp_redirect_port=80\n```\n\n## Config Information\nFor more information on the config see the spec and examples in the config folder.\n\n## Incompatibilities\n- Password authentication on Safari\n\n## How Does it Work?\n\nThis program will start a reverse proxy on the wifi interface on the port specified. The proxy will start/stop based on if webinterface has the configured ip address and the wifi interface has an ip address. \n\n![mobile_web_ui](https://github.com/rM-self-serve/webinterface-wifi/assets/122753594/981f3367-653e-40db-b389-703a046a4362)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frm-self-serve%2Fwebinterface-wifi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frm-self-serve%2Fwebinterface-wifi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frm-self-serve%2Fwebinterface-wifi/lists"}