Fast, efficient, and secure document sharing for debate rounds.
SpeechDrop is a lightweight web application designed to simplify the process of sharing debate files (e.g., DOC, DOCX, ODT, PDF, TXT, RTF) in real time. It uses Vert.x on the backend, Vue.js on the frontend, and leverages WebSockets (via Vert.x EventBus) for instant updates.
This is a community-driven project originally built by Yunyu Lin and extended by contributors. It was forked in January 2025 after the original repo appeared abandoned, and the domain began redirecting to a bakery.
- Features
- Screenshots
- Tech Stack
- Installation & Development
- Configuration
- Deployment
- Usage
- Roadmap
- Contributing
- License
- Room-based file sharing – Quickly create or join rooms by entering a room code.
- Drag-and-drop uploads – Simply drag files onto the UI to upload them.
- Auto-updating file list – Everyone in the room sees new files instantly, no refresh required.
- Easy archiving – Download a ZIP of all files in the room with a single click.
- Java 8 (or later, though the Dockerfile uses 8)
- Maven 3.6+
- Node.js & Yarn (the Maven frontend plugin automatically installs Node and Yarn locally if needed)
-
Clone the repository:
git clone https://github.com/<your-username>/speechdrop.git cd speechdrop
-
Build the project (including frontend assets):
mvn clean package
This command installs Node/Yarn locally (if not present) and builds the frontend into frontend/dist.
-
Run the resulting JAR:
java -Dfile.encoding=UTF-8 -jar target/SpeechDrop-1.0-SNAPSHOT.jar
By default, it listens on port 8080 (configurable via the PORT environment variable).
- Open your browser at:
You should see the SpeechDrop home screen.
http://localhost:8080/
- Build the Docker image:
docker build -t speechdrop:latest .
- Run the container:
docker run -it --rm -p 8080:8080 speechdrop:latest
- Access the app at:
http://localhost:8080/
SpeechDrop can be configured via environment variables (this replaces the older config.json approach):
- PORT: Port on which the server listens (default: 8080)
- HOST: Host address to bind to (default: 0.0.0.0)
- CSRF_SECRET: Random string for CSRF protection
- MEDIA_URL: Base URL used in the HTML for serving file downloads (default: https://media.speechdrop.net/uploads/)
- DEBUG_MEDIA_DOWNLOADS: Whether to serve files from local disk (true) or rely on external hosting (false)
- Install the Fly CLI.
- Initialize a Fly app (if you haven’t yet):
fly launch
or configure an existing Fly app via fly.toml
.
- Set your secrets:
fly secrets set CSRF_SECRET=$(uuidgen)
fly secrets set DEBUG_MEDIA_DOWNLOADS=true
# ...and so on
- Deploy:
fly deploy
Fly will build your Dockerfile, start a VM, and launch your container.
Note: By default, Fly machines have ephemeral filesystems. Attaching a Fly volume works only if you have a single machine.
- Create a Room: Enter a name on the home page, click “Make Room.”
- Invite Others: Share the room code.
- Upload Files: Drag-and-drop them onto the upload area. Everyone sees updates instantly.
- Download: Either click on individual files or use “Download All Files” to get a ZIP archive.
- S3/MinIO integration for multi-instance file hosting
- Update beyond Java 8.
- Update frontend dependencies
Pull requests are welcome!
- Fork and clone this repository
- Create a feature branch: git checkout -b feature/my-feature
- Commit your changes: git commit -m 'Add new feature'
- Push to your branch: git push origin feature/my-feature
- Open a Pull Request
MIT License
See LICENSE for details.