Watch videos together with others on the internet.
This application currently supports watching locally stored files and remotely hosted videos (over HTTP/S). Support for YouTube videos is planned.
If you want to use concinnity with your friends, visit concinnity.retrixe.xyz. Else, if you want to self-host concinnity, see the instructions below.
- Prerequisites: You must have a PostgreSQL/MariaDB database setup, and Golang, Node.js and corepack are needed to build the application.
- To run the backend on a server:
- Run
go buildin thebackendfolder to compile it. - Create a
config.jsonin the same folder according to the section on backend configuration. - You can now run the backend using
./concinnity(it will run on port 8000 by default). - When upgrading from an older version, you can run
./concinnity --upgradeon the first run to upgrade the database.
- Run
- To run the frontend on a server:
- Run the
yarncommand in thefrontendfolder to install all dependencies. - Create a
.envfile in thefrontendaccording to the section on frontend configuration. - For development purposes, you can run
yarn devto run the application with hot reload. For a production deployment, follow the SvelteKit instructions here.
- Run the
The frontend requires only a single configuration file .env to be created in the frontend/ folder with the following contents:
# NOTE: Replace http://localhost:8000 with the correct URL that your backend is hosted at!
PUBLIC_BACKEND_URL=http://localhost:8000The backend requires the config.json file to be created in the backend/ folder with the following options (all except databaseUrl are optional):
{
"port": 8000,
"basePath": "/",
"secureCookies": false,
"database": "either of: postgres, mariadb",
"databaseUrl": "see https://pkg.go.dev/github.com/lib/pq#hdr-Connection_String_Parameters (postgres) or https://github.com/go-sql-driver/mysql?tab=readme-ov-file#dsn-data-source-name (mariadb)",
"frontendUrl": "optional: the URL of the frontend, required for forgot password functionality",
"emailSettings": {
"_comment": "optional email settings for forgot password functionality",
"identity": "optional: the identity of the email sender, defaults to username",
"username": "the username of the email sender",
"password": "the password of the email sender",
"host": "the host of the email sender"
}
}The databaseUrl must be provided, and in production, it is recommended to make use of secureCookies as well. You may change the port as needed, and basePath should be modified if you are reverse proxying the backend through Apache/nginx/etc and placing the backend under another path.
If self-hosting, you should take a look at Octyne's corresponding documentation, which is largely applicable to Concinnity's frontend and backend.
For further guidance, create an issue to expand this documentation.
The concinnity API is currently unstable and largely undocumented. You can find limited technical information in the backend's source code (with the frontend serving as an example of a fully functional client).
Copyright (C) 2025 retrixe
Concinnity is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Concinnity is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with Concinnity. If not, see http://www.gnu.org/licenses/.
