All apps Β· 0 apps
Slip
Docker app from akshaybhandare's Repository
Overview
Readme
View on GitHubSlip
A lightning-fast, self-hosted visual bookmark archive and reading space.
Inspired by mymind. Built for self-hosters, creators, and researchers.
π¬ Slippy: "Welcome, adventurer! I am Slippy, your database mascot companion. I am here to help you store your digital lootβarticles, images, clips, and tagsβdirectly on your home server. For a full gamified walkthrough on how to harness my powers, check out the official USER_GUIDE.md!"
π Highlights
- π¨ Orderful Modern Visual Archive: Clean, high-density stream masonry grid that organizes articles, videos, design inspiration, products, and notes with zero layout glitching.
- π± Mobile-First Architecture: 2-column mobile streams, thumb-friendly slide-up bottom sheets, touch-scrolling filter chips, and a quick-save floating action button (FAB).
- π§ Smart Scraping Engine: Automatically extracts OpenGraph tags, JSON-LD structured schemas, article text, and falls back to full-page screenshots when anti-bot firewalls block metadata.
- β‘ Instant FTS5 Search: Full-text indexing across bookmark titles, descriptions, reader text, domain names, and tags.
- β¨ Semantic Smart Search: Natural language conceptual search that understands conversational queries, synonyms, parent franchises, and troubleshooting intents with relevance scores and explanations.
- π Clips (Hierarchical Folders): Organize cards into nested collections and sub-clips (e.g.
Hobbies>3D Printing> Slips). Hidden by default with zero visual intrusion into the main stream. - β»οΈ Recycle Clip (Soft Delete & Instant Restore): Accidental deletion protection with a non-destructive Recycle Clip, 6-second Instant Undo floating toast, optimistic zero-wait deletion/restoration, sub-clip promotion/cascade options, and safe permanent purge confirmations.
- π·οΈ AI Auto-Tagging: Intelligently assigns tags on save, re-scrape, or card menus while strictly reusing and prioritizing your existing tag vocabulary.
- π€ Bring Your Own AI (BYO-AI): Seamlessly connect OpenAI, Anthropic Claude, Google Gemini, or local models (Ollama, Together, OpenRouter) with AES-256 encrypted database storage.
- π‘οΈ Zero-AI Disconnected Fallback: All AI options, buttons, badges, and operations are strictly gated. When no AI provider is connected, Slip functions as classic, lightweight Slip without any AI clutter or hints.
- π Built-in Reader Mode: Distraction-free article reader with sanitized HTML, custom typography, and zero ads or trackers.
- π·οΈ Interactive Tag System: Quick-tag saved links with keyboard autocompletion and one-tap saved tag reuse suggestions (
+ #tag). - π¦ Netscape HTML Import & Export: Import from Chrome, Safari, Firefox, Edge, and Raindrop, or export your entire archive anytime.
- π Public Shareables: Generate secure read-only public tokens for individual bookmarks or curated tag collections.
- π‘οΈ Self-Hosted & Private: Single SQLite database file with WAL mode, running completely on your own hardware or server.
ποΈ Architecture
ββββββββββββββββββββββββββ
β Client / Browser β
β (Desktop & Mobile) β
βββββββββββββ¬βββββββββββββ
β HTTP / Cookie / Bearer
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Docker Container (Port 3000) β
β β
β ββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ β
β β React 18 SPA (Vite) β βββββββββ€ Express Backend (TS) β β
β β Orderful Modern UI β Static β - Session & API Key Auth β β
β β Tag System & Masonry β β - Scraper & Queue (2 workers)β β
β ββββββββββββββββββββββββββ β - Full-Text Search (FTS5) β β
β β - Netscape HTML Import/Exportβ β
β βββββββββ¬βββββββββββββββ¬βββββββββ β
β β β β
β βΌ βΌ β
β ββββββββββββββββ ββββββββββββββββ β
β β bookmarks.db β β Cache Dir β β
β β (SQLite WAL) β β (Thumbnails) β β
β βββββββββ¬βββββββ ββββββββ¬ββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββΌβββββββββββ
βΌ βΌ
/mnt/user/appdata/slip:/config (Unraid Volume)
β‘ 1-Line Standalone Install (macOS, Linux, Windows)
Install and run Slip immediately with zero container dependencies:
macOS & Linux:
curl -fsSL https://raw.githubusercontent.com/akshaybhandare/Slip/main/install.sh | bash
Custom path or port:
curl -fsSL .../install.sh | bash -s -- --dir /custom/path --port 4000
Windows (PowerShell):
irm https://raw.githubusercontent.com/akshaybhandare/Slip/main/install.ps1 | iex
Manage Slip CLI:
slip status # Check server status
slip stop # Stop background server
slip start -d # Start background daemon
slip logs # View live application logs
slip uninstall # Uninstall cleanly with data preservation
π Quick Start with Docker Compose
Create a docker-compose.yml file:
version: '3.8'
services:
slip:
image: slip:latest
build:
context: .
dockerfile: Dockerfile
container_name: slip
restart: unless-stopped
ports:
- "${HOST_PORT:-3000}:${PORT:-3000}"
volumes:
- ./config:/config
environment:
- NODE_ENV=${NODE_ENV:-production}
- PORT=${PORT:-3000}
- HOST=${HOST:-0.0.0.0}
- DB_PATH=${DB_PATH:-/config/bookmarks.db}
- CACHE_DIR=${CACHE_DIR:-/config/cache}
- PUID=${PUID:-99}
- PGID=${PGID:-100}
- COOKIE_SECURE=${COOKIE_SECURE:-false}
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:${PORT:-3000}/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Start the container:
docker compose up -d
Open http://localhost:3000 in your browser. The first registered user is automatically provisioned as the primary Administrator.
π₯οΈ Unraid Server Deployment
Option 1: 1-Click Install via Community Applications (Recommended)
- Open your Unraid web GUI and navigate to the Apps tab.
- Search for
Slip. - Click Install β the official template automatically pre-configures:
- WebUI Port:
3000(can be mapped to any host port like3080) - Appdata Volume:
/mnt/user/appdata/slip->/config - PUID / PGID:
99/100(unraidnobody/users)
- WebUI Port:
- Click Apply and open the WebUI!
Option 2: Manual Docker / Compose Configuration
Create Appdata Directory:
mkdir -p /mnt/user/appdata/slipTemplate / Compose Settings:
- Host Port:
3000-> Container Port:3000 - Host Path:
/mnt/user/appdata/slip-> Container Path:/config - Variables:
PUID:99(Unraid defaultnobody)PGID:100(Unraid defaultusers)NODE_ENV:production
- Host Port:
The container's built-in
docker-entrypoint.shautomatically ensures all files in/configare owned byPUID:PGIDso you never encounter permission errors on Unraid array shares.
π» Local Development
Prerequisites
- Node.js 20+
- npm
1. Setup Backend
cd backend
npm install
npm run dev
Backend runs on http://localhost:3000.
2. Setup Frontend
cd frontend
npm install
npm run dev
Frontend runs on http://localhost:5173 with automatic API proxying to backend.
π§ͺ Testing
Slip has complete test coverage across both frontend and backend suites (192 tests total):
# Run backend test suite (120 tests across 9 test suites: SQLite, FTS5, Auth, Scraper, Queue, Netscape IO, AI Service, Crypto, Clips & Soft Delete)
cd backend && npm test
# Run frontend UI tests (72 tests in Vitest: TagInput, Responsive Masonry, Mobile FAB, Sync, AI Connection, Recycle Clip & Soft Delete, Note Assist)
cd frontend && npm test
βοΈ Environment Variables
| Variable | Default | Description |
|---|---|---|
HOST_PORT |
3000 |
Port on your host/Unraid to access Slip (e.g. 3080). |
PORT |
3000 |
Port for the HTTP server inside the container. |
HOST |
0.0.0.0 |
Bind host address. |
NODE_ENV |
production |
Node environment (production, development, test). |
DB_PATH |
/config/bookmarks.db |
Absolute path to SQLite database. |
CACHE_DIR |
/config/cache |
Directory where thumbnails and screenshots are cached. |
PUID |
99 |
Process user ID for Unraid file permissions. |
PGID |
100 |
Process group ID for Unraid file permissions. |
COOKIE_SECURE |
false |
Set to true if hosting behind an HTTPS reverse proxy. |
π License
MIT Β© Akshay Bhandare
Related apps
Explore more like this
Explore allDetails
ghcr.io/akshaybhandare/slip:latestRuntime arguments
- Web UI
http://[IP]:[PORT:3000]- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Port used by the Slip web interface.
- Target
- 3000
- Default
- 3000
Persistent directory for storing Slip's SQLite database (bookmarks.db) and thumbnail cache.
- Target
- /config
- Default
- /mnt/user/appdata/slip
User ID to run the container (default 99 for Unraid nobody user).
- Default
- 99
Group ID to run the container (default 100 for Unraid users group).
- Default
- 100
Set to true if hosting behind an HTTPS reverse proxy.
- Default
- false