{"id":20774955,"url":"https://github.com/qdot/simple-teledildonics-app","last_synced_at":"2025-10-05T02:43:41.931Z","repository":{"id":43967577,"uuid":"251169526","full_name":"qdot/simple-teledildonics-app","owner":"qdot","description":"Node/web implementation of a teledildonics server using buttplug","archived":false,"fork":false,"pushed_at":"2022-12-12T08:25:02.000Z","size":452,"stargazers_count":4,"open_issues_count":3,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-30T15:47:01.947Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qdot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-30T01:13:16.000Z","updated_at":"2024-05-28T06:47:00.000Z","dependencies_parsed_at":"2023-01-27T16:15:36.848Z","dependency_job_id":null,"html_url":"https://github.com/qdot/simple-teledildonics-app","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fsimple-teledildonics-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fsimple-teledildonics-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fsimple-teledildonics-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qdot%2Fsimple-teledildonics-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qdot","download_url":"https://codeload.github.com/qdot/simple-teledildonics-app/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251734154,"owners_count":21635079,"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":[],"created_at":"2024-11-17T12:34:00.692Z","updated_at":"2025-10-05T02:43:36.899Z","avatar_url":"https://github.com/qdot.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Simple Teledildonics Web/Node App\n\nThis is a simple Teledildonics app, written in javascript and node. There are\ntwo portions:\n\n- A client, which runs in the browser\n- A server, written in node.js and typescript, which runs on a server to connect\n  local and remote instances.\n\nThis app is \"simple\" in that it is only meant to be used by 2 people at a time:\n1 who is sharing their toys, and one who is controlling them.\n\n**You must use Google Chrome or another blink based browser such as Microsoft\nEdge or Brave (or in the case of iOS, the [WebBLE\nbrowser](https://apps.apple.com/us/app/webble/id1193531073) will also work) if\nyou want to share your toys**. Remote control should work from any browser,\nincluding firefox and safari, but that has only been tested in Firefox and\nChrome.\n\nPlease note that the UI of this app is not good, and is not meant for general\nusage. This project was built to be a minimum possible implementation of remote\nsex toy control with a very light amount of security and usability. It should be\nconsidered a proof of concept and a base to build off of, rather than a finished\nproduct.\n\nDevelopment and testing of this app took place on https://glitch.com, and all\nrecommendations in this manual will assume you are running there. This should\nwork on other hosted platforms, but you may need to edit code (for instance,\ngetting the passwords from the .env file) to change glitch features to work with\nthe platform you have chosen.\n\n## How to use\n\nThere are two ways to use this app. You can share your own toys for control, or\nyou can control someone else's toys.\n\n### Device Support\n\nThe list of toys this app works with can be found here:\n\n[https://iostindex.com/?filter0Availability=Available,DIY\u0026filter1ButtplugSupport=2](https://iostindex.com/?filter0Availability=Available,DIY\u0026filter1ButtplugSupport=2)\n\nNote that Gamepad Haptics should also work (for instance, xbox controllers on\nwindows), but you will need to connect them to your PC and press a button on the\ncontroller, then hit \"Start scanning\", for them to be found.\n\n### Sharing your own toys\n\nIf you want to share your own toys, you will first need your own instance of the\napp. You should do this by \"remixing\" the project on glitch.com.\n\n[https://glitch.com/edit/#!/qdot-simple-teledildonics-app](https://glitch.com/edit/#!/qdot-simple-teledildonics-app)\n\nOnce this is done:\n\n- In the glitch editor, edit the .env file to add a local and remote password.\n- Go to the app website. For instance, with the app above, that would be\n  [https://qdot-simple-teledildonics-app.glitch.me](https://qdot-simple-teledildonics-app.glitch.me).\n  The domain name will be different for your remixed version.\n- Enter the local password, and hit the Connect button.\n- Hit \"Start Scanning\", and the WebBluetooth scan dialog should come up. Once it\n  finds your toy, hit \"Connect\"\n- Your toy should show up in the list, with controls. If you would like to share\n  it for remote control, click the \"Share Device\" checkbox.\n\n### Controlling someone else's toys\n\nThere are 2 ways to establish connections and control someone else's hardware.\n\nTo do either, you will first need to know:\n\n- Their app domain (for instance, in the shared toys example above, that would\n  be qdot-simple-teledildonics.glitch.me)\n- Their remote password (which they will need to share with you somehow)\n\nOnce you have these, there are two ways to connect:\n\n- Via their instance, which you can access from their domain. The \"Remote\n  Domain\" box will autofill with the required value.\n- Via your own instance, by putting their domain in the \"Remote Domain\" field.\n\nIn either case, after you have entered the remote domain and password, \"Connect\nto remote instance\" and you should be connected. As devices are shared with you,\ntheir controls will show up on your side and you can use them to change device\nsettings.\n\nIf the person you are controlling disconnects from the app, you will also be\ndisconnected.\n\n## Getting Help\n\nIf you need some help with the app, there are a few places to go!\n\n- [Message @buttplugio on twitter](https://twitter.com/buttplugio)\n- [Join our discord server](https://discord.buttplug.io)\n- [Ask on our forums](https://metafetish.club)\n\n## FAQ\n\n- Why doesn't this work with [Intiface Desktop](https://intiface.com/desktop)?\n  - Mostly laziness on the part of the developer. Adding the extra Intiface\n    connection UI would confuse things even more at the moment, and this is\n    supposed to be a demo app. An \"advanced\" version of the app that is not\n    meant as a demo is in the works, and will have Intiface Desktop\n    capabilities.\n- What security is there?\n  - Not much. The password system exists solely to limit access to the\n    app. The app has 2 passwords which are stored in a plaintext file,\n    and it is assumed these passwords will be transported via SSL, so\n    we depend on TLS for our encryption. No limiters are built-in on\n    the server side, so things like command flooding are a definite\n    possibility. While some string validation is in place, the\n    Buttplug library itself could also use more escaping and\n    validators, as it currently contains very few, mostly checked via\n    JSON schema. **Use at your own risk, and don't post your app\n    domain publicly.**\n- What is needed to run this outside of glitch?\n  - If you want to run this app yourself, you will need your own server, and a\n    domain with SSL capabilties. The project is meant to run with SSL only,\n    otherwise passwords will go over the network in plaintext and WebBluetooth\n    will not work. The only time this app should be run without SSL is if you're\n    testing on localhost.\n- Why won't bluetooth scanning work on linux?\n  - You'll need to turn on \"Experimetal Web Platform Features\" in\n    chrome://flags for WebBluetooth to work on linux.\n- Why can't the app find my hardware, or can't connect to it?\n  - There are a couple of possibilities for this. Either we don't\n    support your hardware (see list above), or else WebBluetooth is\n    being flakey, which happens quite often. For instance, there are\n    known issues with Lovense toys and some versions of Android Chrome\n    at the moment. You can open the developer console on your browser\n    to see if errors are being thrown.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqdot%2Fsimple-teledildonics-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqdot%2Fsimple-teledildonics-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqdot%2Fsimple-teledildonics-app/lists"}