Skip to content

Commit 0f1c3f6

Browse files
committed
doc: Centralize on single README
1 parent 34aca98 commit 0f1c3f6

File tree

2 files changed

+183
-197
lines changed

2 files changed

+183
-197
lines changed

README.md

Lines changed: 183 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,24 @@
77
[![Twitter](https://img.shields.io/twitter/follow/buttplugio.svg?style=social&logo=twitter)](https://twitter.com/buttplugio)
88
[![bluesky](https://img.shields.io/bluesky/followers/buttplug.io)](https://bsky.app/profile/buttplug.io)
99

10+
[![Crates.io Version](https://img.shields.io/crates/v/buttplug)](https://crates.io/crates/buttplug)
11+
[![Crates.io Downloads](https://img.shields.io/crates/d/buttplug)](https://crates.io/crates/buttplug)
12+
[![Crates.io License](https://img.shields.io/crates/l/buttplug)](https://crates.io/crates/buttplug)
13+
1014
<div align="center">
1115
<h3>
1216
<a href="https://docs.rs/buttplug">
13-
API Documentation
17+
Rust API Documentation
1418
</a>
1519
<span> | </span>
20+
<a href="https://docs.buttplug.io/docs/dev-guide">
21+
Developer Guide
22+
</a>
23+
<span> | </span>
1624
<a href="https://docs.buttplug.io/docs/spec">
1725
Protocol Spec
1826
</a>
1927
<span> | </span>
20-
<a href="https://docs.buttplug.io/docs">
21-
Developer Guide
22-
</a>
23-
<span> | </span>
2428
<a href="https://awesome.buttplug.io">
2529
Apps and Games List
2630
</a>
@@ -35,23 +39,186 @@
3539
</picture>
3640
</p>
3741

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
3992

40-
This is the core implementation of Buttplug.
93+
This project consists of the following crates:
4194

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 |
43113

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.
49115

50-
For information about compiling and using these libraries, please check the
51-
README files in their directories.
116+
## Compiling
52117

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)
54185

55186
## Other Language Implementations
56187

57188
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

Comments
 (0)