Desktop front end for Tranquillo (code name Faecord). Built with electron and a vanilla web renderer.
  • TypeScript 87.5%
  • CSS 9.1%
  • JavaScript 2.8%
  • HTML 0.6%
Find a file
2026-09-23 01:43:11 -04:00
.forgejo/workflows CI change 2026-09-23 01:43:11 -04:00
scripts Client now adds a tray icon and remains running until tray icon is quit. 2026-09-21 23:17:38 -04:00
src Added option to persist server connection after switching to another server 2026-09-23 01:33:47 -04:00
.gitignore Initial project commit and migration from the rust nightmare. 2026-07-20 13:25:40 -04:00
deno.json Deno fmt config edit 2026-09-04 12:45:41 -04:00
LICENSE Added license 2026-09-17 23:44:30 -04:00
package-lock.json Adjustment to ci for changelog support 2026-09-22 01:11:03 -04:00
package.json Updated release doc 2026-09-23 01:35:30 -04:00
readme.md Cleaned up readme 2026-09-23 01:03:28 -04:00
RELEASE.md Updated release doc 2026-09-23 01:35:30 -04:00
tsconfig.json Possible simplication of the tsconfig files 2026-08-31 23:16:04 -04:00
tsconfig.main.json Possible simplication of the tsconfig files 2026-08-31 23:16:04 -04:00
tsconfig.preload.json Fixed up some more issues with typescript. I think most of the IDE issues and build issues are fixed 2026-08-31 23:06:19 -04:00
tsconfig.renderer.json Reworked config to use type-authoratative model 2026-09-19 00:31:17 -04:00

Tranquillo Frontend

A desktop front-end for Tranquillo (project codename FaeCord), a self-hostable FOSS alternative to x-cord. This project aims to minimize dependencies. The front end rederer relies entirely on vanilla web tech (excluding TypeScript).

Environment Setup

The typescript is compiled into the dist folder with tsc. There are 3 tsc configs one each for main, preload, and renderer. The theory of operation is that tsc compiles the typescript files into JavaScript appropriate for node on the main process, and web browsers for the renderer.

Deno is currently planned to be used for code linting and formatting. Currently, only formatting has been run. Linting... has not.

Versioning is based on Semantic Versioning. Major.Minor.Patch

  • Major increments with breaking changes. Includes non-backwards compatible IPC changes, configuration changes, major restructuring, or big user-facing changes (whole UI updates)
  • Minor increments with backward compatible changes. Includes new features, settings, or IPCs.
  • Patch increments where nothing else fits. Bug/crash fixes, and security updates. If a higher-level number changes, all numbers to the right reset to 0. Version will change based on releases.

Prerequisites

  • node.js >= 22.22.2 (older versions untested but may work)
  • npm >= 10.9.8 (older versions untested but may work)

Commands (linux-centric)

grab the source

git clone https://git.chopknee.net/brian/tranquillo-frontend

move into the source directory

cd tranquillo-frontend

install dependencies

npm install

run the development environment

npm run dev

In dev mode, changes to source files cause varying kinds of reloads.

  • Modifications to the main process cause the entire application to reload.
  • Modifications to the renderer process cause only the page to reload.
  • Changes to assets such as css, images, or the index.html file will cause the page to reload.

run the production environment

npm run start

run the packager

npm run package

This creates a package compatible with the dev system.

TODO

Short term todo list

  • ~ voice/video calls (voice partially implemented)
  • ❌ Permissions handling
  • ❌ Settings windows and popups
  • ❌ Context menus
  • ❌ Emoticon picker
  • ❌ Reactions
  • ❌ Replying to messages
  • ❌ Smoke break
  • ❌ Automated linting and formatting CI
  • ❌ badging channels with unread messages
  • ❌ desktop notifications
  • ❌ Pop-out chat windows
  • ❌ Look in to Deno Desktop as a possibe replacement for Node/Electron

Roadmap

There be dragons ahead.

Sources of Headache

  • NodeJs

Feature Wishlist

A wishlist of features that may not be obvious from the current design.

  • chat timestamps - converts to device local time when rendered
  • unit "stamps" - converts to regional preferred units when rendered
  • comprehensive emoji picker - allowing the selection of all emoji for the app's supported encoding scheme
  • code embeds

Guide

./scripts

  • contains scripts for deployment and debugging

./src

  • contains all scripts and content for the client
  • most work is done here

./src/main

  • contains all scripts for the main process

./src/preload

  • contains ipc passthrough functions for connecting main to renderer

./src/renderer

  • contains all scripts and content for the renderer

./src/types

  • shared types between the main, renderer, and preload