Skip to content
screwysPublic

About

Opinionated self-hosted social inbox for YouTube, X, Instagram and TikTok written in Go, with a Web UI and a native Android app.

Topics

Resources

Contributing

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Latest commit

 

History

1,028 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Igloo

Igloo

License: GPLv3 Go Kotlin

Igloo web app

Igloo is an opinionated self-hosted personal social inbox for X, YouTube, TikTok and Instagram written in Go. It pulls content from accounts you can import or freely add, creates an all-in-one site for you to browse their content or configure the server, and optionally lets you access these from an Android app, which is fully usable even when disconnected from the server. It is not meant to be a complete front-end replacement for these services, it intentionally stays out of any interaction with these platforms, such as posting or commenting. The published image is built with Nix to keep it small, about 200~ MiB compressed and 500~ MiB local image size. You can also build the image yourself, or just install it natively. Jump to installation

Any interaction you do on the client, stays in your machine which includes likes, follows or bookmarks. You don't need to log in to your accounts on these platforms, but that can also affect what media the server can fetch, since it uses yt-dlp and gallery-dl to download media, you can only go as far as these packages let you go without cookies. On the web UI, you can upload one or more cookie files or set the browser with cookies to automatically enable cookies (supported out of the box on native installations on Linux, you would need to mount your browser folder if you want to use it with the image).

Cookie settings

You can import your NewPipe subscriptions directly, or add any subscriptions one by one through the site by an account/post link, or you can use the provided Tampermonkey script which adds a button to each website that lets you import the account on screen to the server.

Once you import a few subscriptions, you can expand your subscriptions list through Igloo alone. Discovery tab prepares you recommendation based on a random video of each Youtube account you follow, and you can also set it to download some of these beforehand. You can enable reposts to get content from accounts you are not directly following, and once they appear on your feed you can follow them, more about this at the next part.

Features

  • Highly optimized, fast to navigate web UI for browsing platforms and managing the server
  • Discovery through Igloo alone: follow accounts from posts, reposts, stories profile cards, and even handles in descriptions!
  • With a redirect extension such as LibRedirect, you can redirect all YouTube videos to the server. Set your instance URL to SERVER_URL/temp, and YouTube watch links can land on /temp/watch?v=... for local temporary download and playback. You can also pin the temporary downloads to make them, well, not temporary.
  • A mini-player that stays on while you browse the site, that can be resized and moved.
  • Both web and app are made to be themeable, you can select from the ready themes, or bring your own custom CSS.

Theme controls

  • Lives: Watch Youtube, X and Tiktok lives of followed accounts with live-chats, including being able to download Youtube Replays automatically.

  • Feed: one timeline across followed accounts, with opt-in offline algorithm based on interactions and recency. It can show reply chains, lets you be able to mute, turn off retweets for an individual account. It also comes with retweet deduplication, a problem in RSS feeds for X, it groups retweets and lists everyone who retweeted in one line. It can also be configured to automatically translate tweets, either in bulk or lazily with DeepL, Google Translate, kagi-cli or API/self-hosted node. langdetect is included to reduce API usage.

Feed

  • Bookmarks: This is a powerful feature that lets you create categories and optionally set a per-category saving path. This is designed to be featureful and convenient, to solve my frustrations with time I spend on saving multiple files to different folders. You can save images/videos/gifs with a simple standardized format: [account handle] + [optional label] + [automatically assigned number].ext (file extension) to your pre-configured folder. Accounts can be renamed and rename persists, which is handy for artists with multiple accounts. As an example, if there is a category named nature and we want to save photographs of Mt. Everest, what normally would take us right-click + save + type everest 1, repeat this thrice more to save all 4 would now take: press b + write e (everest gets auto suggested, press down key) + enter to select + enter to save. This also takes previously saved posts into account, and handles all media formats (account everest 001.jpg + account everest 002.mp4), and saves media in quote too, therefore we can go up to 8. There are also hotkeys to quickly select which images to download as well.

  • Moments: vertical video player for short videos, image slideshows, TikTok reposts, and Instagram reposts; also stories, that can be accessed from tap on user avatar, and a stories sidebar.

Moments

  • Videos: YouTube subtitles, speed control, SponsorBlock, DeArrow, comments, preview thumbnails, and synced watch position between clients.

    Video Player
  • YouTube search and recommendations: You can do a Youtube search from Igloo, and see Youtube recommendations in a video, and start watching them without downloading or after downloading.

YouTube search

Android App

Android    Android

Android    Android

  • Designed to be able to run detached from the server with synced items, same feature set with the web where it makes sense
  • If server and app are on the same network, you can even use the app without internet permission!
  • Syncs feed rows, bookmarked and liked items, media assets, playback progress, follows, likes, bookmarks, and per-channel settings.
  • Queues user actions locally and sends them to the server on the next sync
  • You can select how many days you want to keep the new data on the app per platform, you can turn off local storage too

Install

Windows

Download and run IglooSetup-x64.exe from the GitHub Releases. This package comes with automatic updates with nightly and stable channels. Dependency updates can be set to follow the package, or update periodically automatically. The latter ensures stability in the case there is no active development, or a package gets a quick fix.

The basic installation runs through the Igloo tray icon. Its menu opens Igloo and logs, starts or stops the server, checks for and installs updates, and lets you turn Start at login on or off. Choose Install as a service during setup to run the server at Windows startup, before anyone logs in. Exiting the tray stops a basic installation; a service keeps running. Server and runtime updates are automatic when enabled; tray updates come with the installer.

Android

Android app is not a standalone package, it is a client for the Igloo server. Set up Obtainium to follow the GitHub Releases for automatic updates or download the APK manually.

Add to Obtainium    Download APK

Container

IGLOO_VERSION=latest
docker pull "ghcr.io/screwys/igloo:${IGLOO_VERSION}"
docker run -d --name igloo --restart unless-stopped \
  -p 5001:5001 \
  -v igloo-state:/igloo \
  "ghcr.io/screwys/igloo:${IGLOO_VERSION}"

Use -p 127.0.0.1:5001:5001 instead if you only want same-machine browser access. If you serve Igloo only over HTTPS, set IGLOO_SESSION_COOKIE_SECURE=true.

latest is rebuilt daily from main; each build includes the current yt-dlp nightly and latest stable gallery-dl versions tracked by the repository. Use a release tag such as vX.Y.Z instead when you want Igloo itself to remain pinned. Pulling a new image does not replace an already-running container, so run the same docker pull followed by a container recreation from your host scheduler when you want unattended deployment updates. The image runs as the unprivileged user 10001:10001, and the container runtime prepares the igloo-state volume for that user on its first start. Replace docker with podman to use Podman. If your docker command is provided by Podman, use the commands as written.

You can configure bookmarks through web; use /igloo/bookmarks/<folder> to keep them in the state volume or reuse one folder for multiple categories. To keep bookmark archives in a separate runtime-managed volume, add -v igloo-bookmarks:/bookmarks and use /bookmarks/<folder>.

To build the image locally instead:

git clone https://github.com/screwys/igloo
cd igloo
docker compose up -d --build

Use podman compose up -d --build with Podman.

Then open Igloo and create the first admin account in the setup screen:

http://<server-ip>:5001

The igloo-state volume persists across container restarts, recreation, and normal docker compose down / docker compose up cycles. Inside the volume, state is stored at:

/igloo/data
/igloo/config

docker compose down --volumes deletes the state volume and starts Igloo clean the next time. Podman and Docker keep separate volume stores, so use Igloo's full export/import before changing runtimes.

Database

Igloo stores content and user state in PostgreSQL. The default installation runs a private PostgreSQL server under the state directory. Native installations need initdb, pg_ctl, postgres, psql, pg_dump, and pg_restore on PATH. Set IGLOO_POSTGRES_BIN when those tools are in another directory.

Set IGLOO_DATABASE_URL to use an existing PostgreSQL database instead. The database account needs permission to install pg_trgm and unaccent, apply schema migrations, and manage Igloo's tables. Use a database dedicated to Igloo.

Migrate an existing SQLite installation

Stop the old Igloo service, tray process, or container before migrating. Run the new binary with the same IGLOO_DATA_DIR, IGLOO_CONFIG_DIR, and optional IGLOO_DATABASE_URL values as the server:

igloo migrate-sqlite

For a local user service built from this repository, just migrate-database builds the binary, stops the service, migrates, and restarts it after success.

Back Ups

You can enable automatic backups, and can include bookmarks inside as well, these do not store sensitive files. You can later import a single file or the whole .zip to merge/replace the database. There is also a manual full export option, but it includes .env/cookie files which lets you set up the server and make it continue from where it left on another machine just by running install.sh, because I am lazy :)

Platforms

You can run the server with any combination of the supported platforms and can enable which platforms you want to use during first installation on the web UI. To do that from the cli with the image, add this to the docker run command:

-e IGLOO_ENABLED_PLATFORMS=youtube,tiktok,instagram,twitter

Browser Userscript

The supported userscript adds Igloo save/sync actions on X, TikTok, Instagram, and YouTube.

Tampermonkey import button

To contribute, please check CONTRIBUTING.md. You can also contribute by providing translations.

Privacy

See PRIVACY.md.

License

LICENSE

About

Opinionated self-hosted social inbox for YouTube, X, Instagram and TikTok written in Go, with a Web UI and a native Android app.

Topics

Resources

Contributing

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages