|
7 | 7 | [](https://twitter.com/buttplugio) |
8 | 8 | [](https://bsky.app/profile/buttplug.io) |
9 | 9 |
|
| 10 | +[](https://crates.io/crates/buttplug) |
| 11 | +[](https://crates.io/crates/buttplug) |
| 12 | +[](https://crates.io/crates/buttplug) |
| 13 | + |
10 | 14 | <div align="center"> |
11 | 15 | <h3> |
12 | 16 | <a href="https://docs.rs/buttplug"> |
13 | | - API Documentation |
| 17 | + Rust API Documentation |
14 | 18 | </a> |
15 | 19 | <span> | </span> |
| 20 | + <a href="https://docs.buttplug.io/docs/dev-guide"> |
| 21 | + Developer Guide |
| 22 | + </a> |
| 23 | + <span> | </span> |
16 | 24 | <a href="https://docs.buttplug.io/docs/spec"> |
17 | 25 | Protocol Spec |
18 | 26 | </a> |
19 | 27 | <span> | </span> |
20 | | - <a href="https://docs.buttplug.io/docs"> |
21 | | - Developer Guide |
22 | | - </a> |
23 | | - <span> | </span> |
24 | 28 | <a href="https://awesome.buttplug.io"> |
25 | 29 | Apps and Games List |
26 | 30 | </a> |
|
35 | 39 | </picture> |
36 | 40 | </p> |
37 | 41 |
|
38 | | -A Rust implementation of the Buttplug Intimate Hardware Control Protocol, including a client and server, as well as a command line interface for the server (Intiface Central). |
| 42 | +## Are you in the right place? |
| 43 | + |
| 44 | +If you're just looking to hook your hardware up to something that says it "supports Buttplug/Intiface", you're in the wrong place. For that you'll most likely want to go check out [Intiface Central](https://intiface.com/central). |
| 45 | + |
| 46 | +This is where we store all of the source code for the libraries that run your hardware. If you're a developer and interesting in that sort of thing, read on... |
| 47 | + |
| 48 | +## Introduction |
| 49 | + |
| 50 | +[Buttplug](https://buttplug.io) is a framework for hooking up hardware to interfaces, where: |
| 51 | + |
| 52 | +- hardware usually means sex toys, but could honestly be just about anything |
| 53 | +- interfaces usually means media players or games, but could also be just about anything |
| 54 | + |
| 55 | +It's basically a userland HID manager for things that may not specifically support formal HID. |
| 56 | + |
| 57 | +In more concrete terms, think of Buttplug as something like [osculator](http://www.osculator.net/) |
| 58 | +or [VRPN](https://vrpn.github.io), but for sex toys. Instead of wiimotes and control surfaces, we |
| 59 | +interface with vibrators, strokers, fucking machines, and other [hardware that can communicate with computers](https://iostindex.com) (though we do actually support vibration in gamepads, joycons, and more). |
| 60 | + |
| 61 | +This repo contains all of the core libraries for the framework, as well as Intiface Engine, the command line utility for setting up Buttplug Servers. |
| 62 | + |
| 63 | +[Intiface Central](https://intiface.com/central) is recommended for end users. It is a Flutter based GUI on top of Buttplug and Intiface Engine that runs on all desktop and popular mobile platforms. |
| 64 | + |
| 65 | +We also produce [btleplug](https://github.com/deviceplug/btleplug), the host-side Bluetooth LE library that Buttplug uses to communicate with BLE devices. |
| 66 | + |
| 67 | +## Apps, Games, and More! |
| 68 | + |
| 69 | +For a list of applications using Buttplug and Intiface, see the [awesome-buttplug repo](https://github.com/buttplugio/awesome-buttplug). |
| 70 | + |
| 71 | +## Hardware Support |
| 72 | + |
| 73 | +Buttplug-rs is currently capable of controlling toys via: |
| 74 | + |
| 75 | +- Bluetooth LE (Desktop and Android/iOS) |
| 76 | +- Serial Ports (Desktop) |
| 77 | +- USB HID (Desktop) |
| 78 | +- Lovense Devices via the Lovense Dongle (HID and Serial dongles, Desktop) |
| 79 | +- Lovense Connect App (Desktop and Android/iOS) |
| 80 | +- Websockets (for simulated and DIY devices, Desktop and Android/iOS) |
| 81 | +- XInput gamepads (Windows only) |
| 82 | + |
| 83 | +See [IOSTIndex](https://iostindex.com) for a full list of supported hardware (Filter on "Buttplug Rust"). |
| 84 | + |
| 85 | +## Documentation and Examples |
| 86 | + |
| 87 | +To learn how to use the Buttplug Library, check out the [Buttplug Developer Guide](https://docs.buttplug.io/docs/dev-guide). |
| 88 | + |
| 89 | +Examples are included in the [examples](examples/) portion of this repo. |
| 90 | + |
| 91 | +## Crates |
39 | 92 |
|
40 | | -This is the core implementation of Buttplug. |
| 93 | +This project consists of the following crates: |
41 | 94 |
|
42 | | -This repo is a monorepo with multiple projects, including: |
| 95 | +| Crate Name | Description | |
| 96 | +| ---- | ----------- | |
| 97 | +| buttplug | meta-crate, see README for more info | |
| 98 | +| buttplug_client | Buttplug Rust Client, useful for building application that will access Intiface Engine or Intiface Central. We recommend most developers use this. See crate README for more info. | |
| 99 | +| buttplug_core | Contains the protocol message schema, message class implementations, and structures shared by the client and server implementations. Will be rarely needed as a direct dependency. | |
| 100 | +| buttplug_derive | Procedural macros used in the Buttplug rust implementation. Will be rarely needed as a direct dependency. | |
| 101 | +| buttplug_server | The core server implementation, including server and device structures, all protocol implementations, etc... | |
| 102 | +| buttplug_server_device_config | Device configuration file loading and database implementation. | |
| 103 | +| buttplug_server_hwmgr_btleplug | Bluetooth LE device communication support | |
| 104 | +| buttplug_server_hwmgr_hid | HID device communication support | |
| 105 | +| buttplug_server_hwmgr_lovense_connect | Lovense Connect device communication support (soon to be deprecated) | |
| 106 | +| buttplug_server_hwmgr_lovense_dongle | Lovense Dongle device communication support (soon to be deprecated) | |
| 107 | +| buttplug_server_hwmgr_serial | Serial device communication support | |
| 108 | +| buttplug_server_hwmgr_websocket | Websocket device communication suppor, used for devices that may connect in ways not directly supported by other formats | |
| 109 | +| buttplug_server_hwmgr_xinput | XInput gamepad support (windows only) | |
| 110 | +| buttplug_tests | For tests that need the whole framework | |
| 111 | +| buttplug_transport_websocket_tungstenite | Communications transport for clients/servers using tokio-tungstenite | |
| 112 | +| intiface_engine | Command line interface for running a Buttplug server | |
43 | 113 |
|
44 | | -- [buttplug](buttplug/) - Rust implementation of the Buttplug protocol spec |
45 | | -- [buttplug-schema](buttplug/buttplug-schema) - JSON schema for the Buttplug protocol spec |
46 | | -- [buttplug-device-config](buttplug/buttplug-device-config) - Device configuration file for buttplug |
47 | | - (where we store all of the device identifiers) |
48 | | -- [buttplug_derive](buttplug_derive/) - Procedural macros used by the buttplug rust library. |
| 114 | +For more information on each crate, check the README in its directory in this repo. |
49 | 115 |
|
50 | | -For information about compiling and using these libraries, please check the |
51 | | -README files in their directories. |
| 116 | +## Compiling |
52 | 117 |
|
53 | | -For a list of applications using Buttplug, see the [awesome-buttplug repo](https://github.com/buttplugio/awesome-buttplug). |
| 118 | +On Windows and macOS, running `cargo build` should suffice for building the project. All |
| 119 | +dependencies are vendored in. |
| 120 | + |
| 121 | +On Linux, the following packages will be needed to build with default features: |
| 122 | + |
| 123 | +- `libudev-dev` (Required for serial port/HID support) |
| 124 | +- `libusb-1.0-0-dev` (Required for serial port/HID support) |
| 125 | + |
| 126 | +The package names are listed as their Debian requirements, and may be different for other |
| 127 | +distributions. Removing the `lovense-dongle-manager` and `serial-manager` features should stop these |
| 128 | +from being required. |
| 129 | + |
| 130 | +## Usage |
| 131 | + |
| 132 | +To use Buttplug in your Rust application or library, check out the |
| 133 | +[buttplug package on crates.io](https://crates.io/crates/buttplug). |
| 134 | + |
| 135 | +The following crate features are available |
| 136 | + |
| 137 | +| Feature | Other Features Used | Description | |
| 138 | +| --------- | ----------- | ----------- | |
| 139 | +| `client` | None | Buttplug client implementation (in-process connection only) | |
| 140 | +| `server` | None | Buttplug server implementation (in-process connection only) | |
| 141 | +| `websockets` | `tokio-runtime` | Websocket connectors, used to connect remote clients (Clear/SSL)/servers (Clear Only) | |
| 142 | +| `btleplug-manager` | `server` | Bluetooth hardware support on Windows >=10, macOS, Linux, iOS, Android | |
| 143 | +| `lovense-dongle-manager` | `server` | Lovense USB Dongle support on Windows >=7, macOS, Linux | |
| 144 | +| `serial-manager` | `server` | Serial Port hardware support on Windows >=7, macOS, Linux | |
| 145 | +| `xinput-manager` | `server` | XInput Gamepad support on Windows >=7 | |
| 146 | +| `lovense-connect-service-manager` | `server` | Lovense Connect App support (all platforms) | |
| 147 | +| `websocket-server-manager` | `websockets` | Support for connecting devices via Websockets (all platforms) | |
| 148 | +| `dummy-runtime` | None | Runtime that panics on any spawn. Only used for tests. | |
| 149 | +| `tokio-runtime` | None | Uses tokio for futures | |
| 150 | +| `wasm-bindgen-runtime` | None | Uses the wasm-bindgen executor as a runtime (WASM only) | |
| 151 | + |
| 152 | +Default features are enough to build a full desktop system: |
| 153 | + |
| 154 | +- `tokio-runtime` |
| 155 | +- `client` |
| 156 | +- `server` |
| 157 | +- `websocket` |
| 158 | +- `websocket-server-manager` |
| 159 | +- `btleplug-manager` (feature builds as noop on WASM) |
| 160 | +- `serial-manager` (feature builds as noop on iOS, Android) |
| 161 | +- `lovense-dongle-manager` (feature builds as noop on iOS, Android) |
| 162 | +- `xinput-manager` (feature is only relevant on windows, but builds as a noop on all |
| 163 | + other platforms). |
| 164 | + |
| 165 | +## Filing Issues and Contributing |
| 166 | + |
| 167 | +If you have issues or feature requests, please feel free to [file an |
| 168 | +issue](https://github.com/buttplugio/buttplug-rs/issues). |
| 169 | + |
| 170 | +**We are not looking for unsolicited code contributions or pull requests, and will not accept |
| 171 | +pull requests that do not have a matching issue where the matter was previously discussed in an issue on this repo or in one of our communication channels, listed below.** |
| 172 | + |
| 173 | +Pull requests should only be submitted after talking to [qdot](https://github.com/qdot) via issues |
| 174 | +(or on [Discord](https://discord.buttplug.io), [our forums](https://discuss.buttplug.io), or via DMs |
| 175 | +on one of our social media accounts if you would like to stay anonymous and out of recorded info on |
| 176 | +the repo) and receiving approval to develop code based on an issue. Any random or non-issue pull |
| 177 | +requests will most likely be closed without merging. |
| 178 | + |
| 179 | +If you'd like to contribute in a non-technical way, we need money to keep up with supporting the |
| 180 | +latest and greatest hardware. We have multiple ways to donate! |
| 181 | + |
| 182 | +- [Patreon](https://patreon.com/qdot) |
| 183 | +- [Github Sponsors](https://github.com/sponsors/qdot) |
| 184 | +- [Ko-Fi](https://ko-fi.com/qdot76367) |
54 | 185 |
|
55 | 186 | ## Other Language Implementations |
56 | 187 |
|
57 | 188 | See the [awesome-buttplug repo](https://github.com/buttplugio/awesome-buttplug#development-and-libraries) for a full list of client implementations in other programming languages. |
| 189 | + |
| 190 | +## License |
| 191 | + |
| 192 | +Buttplug is BSD 3-Clause licensed. |
| 193 | + |
| 194 | +```text |
| 195 | +
|
| 196 | +Copyright (c) 2016-2025, Nonpolynomial, LLC |
| 197 | +All rights reserved. |
| 198 | +
|
| 199 | +Redistribution and use in source and binary forms, with or without |
| 200 | +modification, are permitted provided that the following conditions are met: |
| 201 | +
|
| 202 | +* Redistributions of source code must retain the above copyright notice, this |
| 203 | + list of conditions and the following disclaimer. |
| 204 | +
|
| 205 | +* Redistributions in binary form must reproduce the above copyright notice, |
| 206 | + this list of conditions and the following disclaimer in the documentation |
| 207 | + and/or other materials provided with the distribution. |
| 208 | +
|
| 209 | +* Neither the name of buttplug nor the names of its |
| 210 | + contributors may be used to endorse or promote products derived from |
| 211 | + this software without specific prior written permission. |
| 212 | +
|
| 213 | +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| 214 | +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 215 | +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 216 | +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
| 217 | +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| 218 | +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| 219 | +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| 220 | +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| 221 | +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 222 | +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 223 | +``` |
| 224 | + |
0 commit comments