Skip to content

asterd/tentacle

Repository files navigation

Tentacle Icon

Tentacle

A lightweight desktop hub for managing multiple web apps with isolated accounts.
Built with Tauri 2 + Rust + TypeScript.

Tauri Rust TypeScript CI License

Why Tentacle

Tentacle is designed to consolidate everyday web services into a single desktop app, with:

  • multiple accounts per service
  • isolated persistent sessions (separate login/cookie storage)
  • clean and fast UI with minimal overhead

Features

  • Multi-account support per service (for example, multiple WhatsApp accounts)
  • Embedded webviews with dedicated profile data per account
  • Native notifications with per-service policy controls
  • Per-account unread badges
  • Encrypted configuration backup (export/import)
  • Local download handling with configurable destination folder
  • Persisted app UI state and window geometry
  • Tray support and Dock reopen integration

Supported Services

  • WhatsApp Web
  • Telegram Web
  • LinkedIn
  • Discord

Tech Stack

  • Tauri 2
  • Rust (core app, commands, storage)
  • TypeScript + Vite (UI)
  • @tauri-apps/plugin-notification

Getting Started

Prerequisites

  • Node.js >= 18
  • Rust toolchain (cargo)

Run (Development)

./run.sh

The script:

  • installs npm dependencies if needed
  • generates app icon set from branding/tentacle-icon.png if missing
  • starts the app in development mode

Build

./run.sh --build

Manual Commands

npm install
npm run tauri:dev
npm run tauri:build

Testing

Run the complete suite (frontend unit tests + build + Rust tests + Rust check):

npm run test:all

Run only frontend unit tests:

npm run test:unit

Run frontend unit tests with coverage report:

npm run test:unit:coverage

Coverage policy (enforced):

  • lines >= 90%
  • statements >= 90%
  • functions >= 90%
  • branches >= 80%

Automated Releases (GitHub)

Release builds are automated through .github/workflows/release.yml.

Trigger modes:

  • push a tag like v0.2.0 (recommended)
  • manual run via workflow_dispatch with an existing tag

What the workflow does:

  1. builds platform bundles on Linux, Windows, and macOS
  2. collects all bundle artifacts
  3. creates/updates a GitHub Release with auto-generated release notes
  4. uploads downloadable assets to the Release

Version + Tag Flow

Prepare version files:

./scripts/release-tag.sh 0.2.0

Then create and push the tag:

git add package.json src-tauri/tauri.conf.json
git commit -m "release: v0.2.0"
git tag v0.2.0
git push origin <your-branch> --tags

After tag push, GitHub Actions will publish the release artifacts automatically.

Expected release assets:

  • Linux: .AppImage, .deb
  • Windows: .msi, .exe (NSIS installer)
  • macOS: .dmg, .app.zip

Icon Pipeline

Project icon source:

  • branding/tentacle-icon.png

Regenerate Tauri icon assets:

npx tauri icon branding/tentacle-icon.png

Project Structure

.
├── src/                  # TypeScript frontend
├── src-tauri/            # Rust core + Tauri config
├── branding/             # Branding assets (source icon)
├── run.sh                # Run/build helper script
└── README.md

Developer Docs

  • DEVELOPER_GUIDE.md for architecture, configuration, state model, and extension points
  • CONTRIBUTIONS.md for contributor workflow and PR checklist

Want to Contribute?

If you want to help, these are the next implementation steps:

  • Improve onboarding and service discoverability
  • Add more service presets (Gmail, Slack, Notion, etc.)
  • Publish binaries via GitHub Releases
  • Add functional validation tests on Windows and Linux

Contributing

PRs and issues are welcome. For structural changes, please open a short discussion first so approach and scope are aligned.

License

MIT

About

Yet Another Service aggregator

Resources

Stars

Watchers

Forks

Packages

No packages published