โจ Your Credentials. Your Security. Your Rules. โจ
A modern, secure, self-hosted credential management application for storing and organizing your digital credentials with complete privacy and control.
๐ Quick Start โข ๐ผ๏ธ Screenshots โข ๐ฆ Installation โข ๐๏ธ Setup โข ๐ฑ PWA โข ๐ง Troubleshooting
Desktop installers are available on the Keyper website.
| Platform | Package | Download |
|---|---|---|
| ๐ช Windows | NSIS installer | KeyperSetup.v1.1.1.exe |
| ๐ง Linux | AppImage | Keyper-1.1.1.AppImage |
| ๐ง Linux | .deb (x86_64) |
keyper_1.1.1_amd64.deb |
| ๐ง Linux | .deb (ARM64) |
keyper_1.1.1_arm64.deb |
- ๐ API Keys - Store and organize your API credentials
- ๐ Login Credentials - Username/password combinations
- ๐คซ Secrets - Sensitive configuration values
- ๐ซ Tokens - Authentication and access tokens
- ๐ Certificates - SSL certificates and keys
- ๐ Documents - Secure file uploads for
.pdf,.doc,.docx,.odt,.txt,.md - ๐งฉ Miscellaneous - Large multiline secure notes/commands/scripts that donโt fit fixed types
- ๐ Categories - Group credentials by service or type
- ๐ Tags - Flexible labeling system
- โก Priority Levels - Low, Medium, High, Critical
- ๐ Expiration Tracking - Never miss renewal dates
- ๐ Real-time Search - Find credentials instantly
- ๐๏ธ Quick Reveal & Copy - Reveal and copy sensitive values directly from the credential detail view
- ๐๏ธ Inline Text Document Preview - Text-like document credentials (
.txt,.md,text/*) can be previewed inline in credential detail view - โฌ๏ธ Secure Document Download - All document credentials can be downloaded from detail view
- ๐ Row Level Security (RLS) - Database-level isolation
- ๐ End-to-End Encryption - Client-side encryption, zero-knowledge architecture
- ๐ค Multi-User Support - Self-service registration, account switching, and per-user vault isolation
- ๐ Secure Connections - HTTPS/TLS encryption
- ๐ Self-Hosted - Complete control over your data
- Zero-Knowledge Architecture - All encryption happens client-side
- AES-256-GCM Encryption - Industry-standard authenticated encryption
- Argon2id Key Derivation - Memory-hard, ASIC-resistant (with PBKDF2 fallback)
- Auto-Lock Protection - 15-minute inactivity timeout with activity detection
- Simplified Bcrypt Master Passphrase - Secure bcrypt-only authentication for new users
- Backwards Compatibility - Legacy wrapped DEK system maintained for existing users
- User-Controlled Reset - Secure emergency passphrase reset without admin backdoors
- Database-Only Storage - No localStorage usage except for database config
- Professional Security Audit - EXCELLENT security rating
- ๐ Dark Theme - Easy on the eyes
- ๐ฑ Responsive Design - Works on all devices
- โก Progressive Web App - Install like a native app
- ๐ Fast Performance - Built with Vite and React 19
- ๐จ Beautiful UI - Modern glassmorphism design
Get Keyper running on your own infrastructure in under 5 minutes!
- Node.js 18+ installed on your system
- Database (choose one):
- ๐๏ธ SQLite (local mode) โ no account or server required, zero configuration, works in browser and Electron desktop
- โ๏ธ Supabase โ free tier works perfectly for hosted/remote/multi-device usage
- Modern web browser (Chrome, Firefox, Safari, Edge)
# Install Keyper globally
npm install -g @pinkpixel/keyper
# Start the server (default port 4173)
keyper
# Or start with custom port
keyper --port 3000
# Open in your browser
# ๐ http://localhost:4173 (or your custom port)That's it! ๐ Follow the in-app setup wizard to configure your database (choose SQLite for zero-config local storage, or Supabase for hosted cloud storage).
Want to try Keyper before installing? Visit our hosted demo:
๐ app.keyper.icu
Just enter your own Supabase credentials and start managing your encrypted credentials instantly! Your data stays completely private since all encryption happens in your browser.
Demo Usage:
- โ Completely Secure - Zero-knowledge architecture means your data never leaves your browser
- โ Real Functionality - Full Keyper experience with your own Supabase instance
- โ No External Signup Required - Just bring your Supabase URL and anon/publishable key
- โ In-App User Registration Available - Create multiple isolated user vaults directly inside Keyper
โ ๏ธ Demo Limitations - Recommended for testing and light usage only- ๐ Self-Host for Production - Install locally for best performance and full control
Note: The demo uses the same secure architecture as self-hosted Keyper. Your Supabase credentials are stored only in your browser's localStorage and never transmitted to our servers.
npm install -g @pinkpixel/keyperAvailable Commands:
keyper- Start Keyper serverkeyper --port 3000- Start on custom portkeyper --help- Show help and usagecredential-manager- Alternative commandkeyper-dashboard- Another alternative
npx @pinkpixel/keypergit clone https://github.com/pinkpixel-dev/keyper.git
cd keyper
npm install
npm run build
npm startRun Keyper as a containerised web app โ no Node.js required on the host!
# Clone the repo
git clone https://github.com/pinkpixel-dev/keyper.git
cd keyper
# Build & start (serves on http://localhost:8080)
docker compose up -d
# Or on a custom port
HOST_PORT=3030 docker compose up -d
# Force rebuild after source changes
docker compose up -d --build
# Stop
docker compose down
# Follow logs
docker compose logs -fTo build and run the image directly (without Compose):
docker build -t keyper .
docker run -d -p 8080:80 --name keyper --restart unless-stopped keyperNote: Keyper stores all configuration (Supabase credentials or SQLite provider selection) in browser
localStorageโ no environment variables or volumes are required.
Run Keyper as a native desktop app on Windows or Linux!
- Windows installer: KeyperSetup.v1.1.1.exe
- Linux AppImage: Keyper-1.1.1.AppImage
- Linux
.deb(x86_64): keyper_1.1.1_amd64.deb - Linux
.deb(ARM64): keyper_1.1.1_arm64.deb
git clone https://github.com/pinkpixel-dev/keyper.git
cd keyper
npm install
npm run electron:preview# desktop packaging from source
npm run electron:build:linux # AppImage + deb
npm run electron:build:win # NSIS installerInstallers are output to dist-electron/.
Keyper supports two database backends โ choose the one that fits your workflow:
| Feature | SQLite (Local) | Supabase (Cloud) |
|---|---|---|
| Setup required | None โ auto-configured | Project creation + SQL script |
| Internet connection | โ Not required | โ Required |
| Multi-device sync | โ Not supported | โ Supported |
| Works in browser/PWA | โ Yes | โ Yes |
| Works in Electron desktop | โ Yes | โ Yes |
| Data location | Your device (IndexedDB in browser/PWA, optional file path in Electron) | Your Supabase project |
- Start Keyper and open the app in your browser, PWA, or Electron desktop build
- In the setup wizard, select "SQLite (Local)" as your database provider
- Master Passphrase: Create your encryption passphrase
- Start Managing: Add your first encrypted credential! ๐
SQLite mode stores your encrypted vault locally with no external service required. In browser/PWA mode it uses IndexedDB automatically; in Electron you can also point Keyper at a SQLite file on disk.
-
Visit supabase.com and sign up/login
-
Click "New Project"
-
Configure your project:
- Name:
keyper-db(or your preference) - Database Password: Generate a strong password
- Region: Choose closest to your location
- Name:
-
Wait 1-2 minutes for setup completion
- In Supabase dashboard: Settings โ API
- Copy these values:
- Project URL:
https://your-project.supabase.co - anon/public key:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
- Project URL:
-
Start Keyper:
keyper -
Database Setup: Configure your Supabase connection
- Enter your Supabase URL and anon/publishable key
- Copy and run the complete SQL setup script in Supabase SQL Editor
- If you already have an existing Keyper database, run the update script too (
migration-add-document-misc-types.sql) sodocumentandmisccredential types work - The script creates tables with the latest security features:
raw_dekandbcrypt_hashcolumns for the new simplified security model- Backwards compatibility for existing users with legacy
wrapped_deksystem - Latest credential type support (
api_key,login,secret,token,certificate,document,misc)
- Test the connection
-
Master Passphrase: Create your encryption passphrase
- Choose a strong passphrase (8+ characters recommended)
- New users get the simplified bcrypt-only authentication system
- This encrypts all your credentials client-side with secure emergency reset capabilities
-
Start Managing: Add your first encrypted credential! ๐
Keyper works as a Progressive Web App for a native app experience!
- Open Keyper in Chrome/Edge/Firefox
- Look for the install icon in the address bar
- Click to install as a desktop app
- Access from your applications menu
- Open Keyper in your mobile browser
- Tap the browser menu (โฎ)
- Select "Add to Home Screen" or "Install App"
- Access from your home screen
- ๐ฑ Native app experience
- ๐ Faster loading times
- ๐ Offline functionality
- ๐ Background updates
- ๐ฒ Push notifications (coming soon)
โ "Connection failed: Database connection failed"
- Verify URL format - now supports any valid HTTP/HTTPS URL (v1.0.6+)
- โ
Cloud:
https://your-project.supabase.co - โ
Local:
http://localhost:54321,http://192.168.1.100:8000 - โ
Custom:
https://supabase.mydomain.com
- โ
Cloud:
- Use anon/public key, not service_role
- Check that your Supabase project is active
โ "relation 'credentials' does not exist"
- Run the complete SQL setup script in Supabase SQL Editor
- Ensure the script completed without errors
โ New document or misc credentials fail to save
- Run the existing-database update script:
migration-add-document-misc-types.sql - Confirm
credentials_credential_type_checkincludesdocumentandmisc
โ Dashboard shows "No credentials found"
- Click "Refresh App" button
- Clear browser cache and reload
- For PWA: Uninstall and reinstall the app
โ Can't enter new credentials after clearing configuration
- Refresh the page after clearing configuration
- Ensure you're using a valid HTTP/HTTPS URL (any format supported in v1.0.6+)
- Try clearing browser cache if form inputs appear stuck
โ Categories dropdown is empty when using custom username
- This issue has been resolved in the latest version
- Categories should now appear for all usernames (both default and custom)
- If still experiencing issues, try refreshing the page after setting your username
โ App doesn't show setup wizard after clearing database
- Clear browser cache and cookies for the site
- For Chrome/Edge: Settings โ Privacy โ Clear browsing data โ Cookies and cached files
- For Firefox: Settings โ Privacy โ Clear Data โ Cookies and Site Data + Cached Web Content
- Refresh the page to see the initial setup screen
โ Stuck in configuration loops or can't access settings
- Clear browser cache and localStorage completely
- Refresh the page and reconfigure your database connection
- Ensure your Supabase credentials are correct
- Use the built-in database health checks to verify table integrity
โ Multi-user vault conflicts
- Each user has their own isolated encrypted vault
- Use Dashboard Settings โ User Management to switch users
- Use Create New User from the lock screen or Add New User in user management
- Refresh after user-switch actions if prompted for the cleanest vault context handoff
- Each user's data is completely separate and encrypted individually
Forgot your master passphrase? No problem! Your encrypted data is completely safe and you can securely reset your passphrase:
Important: It's not possible to view your current master passphrase, but you can update/change it using our secure bcrypt-based reset system.
๐ Complete Reset Guide: For detailed step-by-step instructions, see our comprehensive Emergency Passphrase Reset Guide
Quick Overview:
For Supabase users:
- Access your Supabase dashboard and navigate to the
vault_configtable - Generate a new bcrypt hash using your desired new passphrase
- Replace the
bcrypt_hashvalue in your database - Login with your new passphrase
For SQLite (local) users:
- Open your browser's DevTools โ Application โ IndexedDB โ find the Keyper database
- Alternatively, use the in-app Settings โ Reset tab for guided instructions
- Generate a new bcrypt hash using your desired new passphrase
- Replace the
bcrypt_hashvalue in thevault_configtable and reload
Security Benefits:
- โ No Backdoors: Complete elimination of admin override capabilities
- โ User Control: Only you can reset your own passphrase
- โ Data Safety: Your encrypted credentials remain completely safe
- โ Industry Standard: Uses proven bcrypt hashing technology
- โ Zero Knowledge: Hash-only storage ensures maximum security
- Check the Self-Hosting Guide
- Review browser console for errors (F12 โ Console)
- Verify your database provider logs (Supabase dashboard โ Logs, or browser DevTools โ Console for SQLite errors)
- Use the master passphrase reset process above for password issues
- Report issues on GitHub
- โ Self-Hosted - Run on your own infrastructure
- โ Private Database - Your Supabase instance or local SQLite storage
- โ No Tracking - Zero telemetry or analytics
- โ Open Source - Fully auditable code
- ๐ Row Level Security - Database-level access control
- ๐ Encryption - Data encrypted at rest and in transit
- ๐ค User Isolation - Each user sees only their data
- ๐ก๏ธ Offline-First Option - SQLite mode requires no internet and stores data entirely on-device
- Registration: Users can self-register from the lock screen via Create New User; no admin account is required.
- User Management: Dashboard includes a User Management area that lists registered users and supports secure switching.
- Isolation: Every username has its own
vault_config, passphrase verifier, encryption key material, credentials, and categories. - No Backdoors: Switching users never bypasses passphrase verification, and there is no admin recovery path.
- Reset Model: Emergency passphrase reset remains self-service per user via that userโs
bcrypt_hashrecord.
- Frontend: React 19.1 + TypeScript
- Build Tool: Vite 7.0
- Styling: Tailwind CSS + shadcn/ui
- Database: Supabase (PostgreSQL + Auth) or SQLite (sql.js / IndexedDB)
- State Management: TanStack Query
- Forms: React Hook Form + Zod
- PWA: Vite PWA Plugin + Workbox
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
We welcome contributions! Please see our Contributing Guide for details.
Created by Pink Pixel โจ Dream it, Pixel it
- ๐ Website: pinkpixel.dev
- ๐ง Email: admin@pinkpixel.dev
- ๐ฌ Discord: @sizzlebop
- โ Support: Buy me a coffee
โญ Star this repo if Keyper helps secure your digital life! โญ