Your notes, your way
Keep the speed, simplicity, and colorful notes you love. Use Kept offline on iOS and Android, run your own server, or let Kept Cloud handle the hosting, backups, and updates.
👋 Welcome to Kept
Kept is designed for people who love fast, low-friction note capture. Whether you need a quick checklist, a drawing, or a simple text note, Kept makes it effortless to jot things down and organize them visually with colors and labels.
If you're migrating from Google Keep, we've even included a simple import tool to bring all your existing notes over seamlessly.
✨ What you get with Kept
📝 Rich Note Capture
Create text, checklist, image, and drawing notes. Drag and drop to sort checklists, pin important items, and organize with labels, binders, colors, and backgrounds.
📒 Binders
Binders are optional named homepages: dedicated pages of your curated notes for a project, topic, or area of your life. Create a binder from the sidebar, then move notes into it from an individual note menu. Notes in your binders stay out of your main Notes view, but search can still find them.
⏰ Reminders that Work
Set one-shot or scheduled reminders with snooze functionality. Get push notifications directly to your browser or phone, and sync them to Google Calendar or any CalDAV-friendly calendar if you want everything in one place.
📱 Installable on Mobile
Add Kept to your home screen on iOS or Android as a PWA, or use the native mobile apps for location reminders, quick share, and deeper device integration.
📴 Offline Mobile Notes
Use device-only notes on iOS and Android or connect to a server for syncing across devices. The choice is yours. Connected apps also save edits offline and sync when the server is reachable again. Learn about offline mode.
🍎 Native iOS App
Kept Notes on the App Store supports device-only use, Kept Cloud, and self-hosted servers. It includes native Apple Reminders integration, quick share, and Apple Intelligence-powered Smart Capture on supported devices.
🤖 Native Android App
Kept Notes on Google Play supports device-only use, Kept Cloud, and self-hosted servers. It includes native reminders, saved places, quick share, home screen widgets, and on-device Smart Capture on supported devices.
📐 Foldable-Friendly Layouts
Kept adapts better on expanded foldables, with a mobile-style editor where it belongs and wider multi-column note grids when the device has room.
🤝 Real-Time Sharing
Collaborate with others! Share notes with other users on your instance and edit together in real-time, just like a modern document editor.
📦 Bring Your Notes
Moving over from Google Keep? Drop in a Google Takeout export and Kept can import your notes, checklists, labels, colors, drawings, and images in one go.
💾 Backups Without Drama
Save and restore a complete device library from the native apps. On a server, schedule daily, weekly, or monthly backups, or create one on demand.
🔌 External Access
Enable optional OAuth and MCP access for trusted tools and agents. Access is scoped, revocable, and off by default.
🔑 Optional SSO
Connect an OpenID Connect provider such as Google, Authentik, or Pocket ID while keeping normal Kept username/password login available.
📤 Your Data, Your Exit
Export your notes whenever you like in JSON, CSV, or Markdown. Handy for backups, migrations, audits, or just the warm glow of knowing the door is open.
🔐 Privacy First
Your data stays with you. Includes local user accounts, custom profile avatars, and optional two-factor authentication (2FA) for extra security.
🚀 How to Install
Just want notes on your phone or tablet? Install a native iOS or Android app and choose Use on this device. You do not need to set up a server.
Set up a Kept server
For web access, sharing, and sync across devices, choose Kept Cloud or run your own Kept server using the published Docker image, ghcr.io/ericerkz/kept:latest.
git clone https://github.com/ericerkz/kept.git
cd kept
docker compose up -d
That's it! Open your browser and go to http://localhost:6767. You'll be greeted by a friendly setup wizard to create your admin account.
Kept Cloud — hosting handled for you
Want web access, sharing, and sync across devices without setting up Docker or managing a server? Kept Cloud runs and maintains your own private Kept server for you, with automatic backups and updates included.
- Open Kept Cloud and follow the steps to create your account and set up your server.
- Create your Kept login when prompted, then open your private server address.
- Connect the iOS or Android app to the same server to sync your notes across devices.
Add family, friends, or teammates to the same server. Everyone shares one subscription, with no per-user charge. Kept remains free to self-host, and device-only mode in the native apps needs no subscription.
Prefer to build it yourself?
If you want to build from the local source instead of pulling the published image, use the dev compose override.
git clone https://github.com/ericerkz/kept.git
cd kept
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build
Reverse proxy examples
For public HTTPS access, point your domain at Kept and proxy traffic to 127.0.0.1:6767. Online status and live collaboration use WebSockets at /api/realtime, so that rule must come before the catch-all app proxy.
If you still need to set up HTTPS certificates, DigitalOcean has clear walkthroughs for Apache with Let's Encrypt and Nginx with Let's Encrypt. This is not a referral; we just love their detailed knowledgebase.
Apache
# Required once:
# sudo a2enmod proxy proxy_http proxy_wstunnel rewrite ssl
# sudo systemctl reload apache2
<VirtualHost *:80>
ServerName kept.example.com
Redirect permanent / https://kept.example.com/
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName kept.example.com
ProxyRequests Off
ProxyPreserveHost On
# WebSocket realtime: online status + live collaboration.
ProxyPass /api/realtime ws://127.0.0.1:6767/api/realtime
ProxyPassReverse /api/realtime ws://127.0.0.1:6767/api/realtime
# Normal app/API traffic.
ProxyPass / http://127.0.0.1:6767/
ProxyPassReverse / http://127.0.0.1:6767/
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/kept.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/kept.example.com/privkey.pem
</VirtualHost>
</IfModule>
Nginx
server {
listen 80;
server_name kept.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name kept.example.com;
ssl_certificate /etc/letsencrypt/live/kept.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kept.example.com/privkey.pem;
# WebSocket realtime: online status + live collaboration.
location /api/realtime {
proxy_pass http://127.0.0.1:6767/api/realtime;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Normal app/API traffic.
location / {
proxy_pass http://127.0.0.1:6767;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Advanced config
VPN/Tailscale/WireGuard setups
If you access Kept through Tailscale, WireGuard, another VPN, a LAN hostname/IP, or more than one reverse-proxy domain, the CORS settings may be relevant. These setups do not require special CORS settings by themselves; CORS only matters when the browser page and Kept API are reached through different origins, or when you restrict origins with KEPT_CORS_ORIGINS. If you use KEPT_CORS_ORIGINS, include each exact browser origin you use, such as your Tailnet name, VPN-only domain, LAN IP, or public reverse-proxy domain, including the scheme and port when applicable. Same-origin access does not need extra CORS configuration. Browser sessions use HttpOnly cookies: a separate SPA origin requires an explicit KEPT_CORS_ORIGINS allowlist and must be on the same site as the API. KEPT_CORS_ALLOW_ALL=1 supports bearer-authenticated native/API clients; it cannot authorize cross-origin browser cookies.
Custom header support in the mobile apps
The native iOS and Android apps support optional custom connection headers for reverse proxies or access gateways that require them, such as Cloudflare Access service tokens or shared-secret proxy headers. Configure these only if your proxy setup requires them.
Custom headers help the mobile apps pass normal Kept HTTP requests through a header-auth gateway, including login, loading notes, saving notes, attachments, and settings. They are not a replacement for Kept login; users still need a Kept account/session.
Custom headers do not apply to realtime WebSocket connections. Realtime presence and live collaboration use WebSockets at /api/realtime, and browser/WebView WebSockets cannot attach arbitrary custom headers. Behind gateways that require header auth on WebSocket upgrade requests, normal reads/writes should still work, but live updates may only appear after refocusing the app or manually refreshing.
External access, MCP, and SSO
Kept can connect to trusted external tools, but these paths stay off until each user enables them from Settings. Normal Kept setup does not require OAuth, MCP, or SSO.
OpenID Connect SSO
Server admins can configure one OpenID Connect provider, such as Google, Authentik, Pocket ID, or another compatible identity provider. Users still need a local Kept account first, then they can connect their SSO identity from Settings.
BASE_URL=https://kept.example.com
KEPT_OIDC_ISSUER=https://accounts.google.com
KEPT_OIDC_CLIENT_ID=your-client-id
KEPT_OIDC_CLIENT_SECRET=your-client-secret
KEPT_OIDC_NAME=Google
Register this redirect URI with the provider: https://kept.example.com/api/auth/oidc/callback. See the OIDC setup guide for Google, Authentik, and Pocket ID examples.
OAuth app access
Kept includes an OAuth 2.1 authorization server for approved external apps. Users enable OAuth app access in Settings, approve each connection, and can revoke connected apps later without changing their password.
OAuth clients can request read-only or read/write scopes. Remote MCP clients, including ChatGPT-style MCP connections, use this same OAuth layer. See the OAuth integration guide.
MCP access
Kept's MCP server lets trusted clients search and read notes, create notes and checklists, manage reminders, work with images and attachments, add collaborators, and archive or trash notes through Kept's normal API permissions.
Local MCP access uses a dedicated token generated in Settings. Remote MCP uses https://kept.example.com/mcp with OAuth. Locked-note access and permanent deletion remain separate opt-ins. See the MCP setup and security guide.
Install on iOS and Android
Choose a native app to use Kept on your device, with Kept Cloud, or with your own server. You can also install the server's web app as a Progressive Web App.
Use Kept locally without a server
With the 1.9 native iOS and Android apps, choose Use on this device on the welcome screen to start without a server or Kept account. Create and organize notes, checklists, images, drawings, attachments, labels, and reminders on the device.
Sharing, collaboration, web access, access across devices, and server integrations still require a Kept server. If you want those later, choose Settings → Notes on this device → Move my notes to a server. This seamlessly transfers your entire local library to your Kept server, including images and attachments.
Device-only libraries can be saved with Save a complete backup and restored on an iOS or Android device with Restore a backup. Keep a backup outside the app: deleting the app or losing the device can mean losing its local notes.
Native iPhone and iPad app
Kept Notes is available on the App Store for iPhone and iPad. Use device-only mode, Kept Cloud, or your self-hosted server. The app includes native Apple Reminders integration, quick share from other apps, and Apple Intelligence-powered Smart Capture for private, on-device note creation and updates on supported devices.
The app has a nominal one-time cost. That helps cover the charge required to distribute Kept through the App Store.
Download on theApp StoreNative Android app
Kept Notes is available on Google Play with device-only mode, Kept Cloud, or your self-hosted server. It includes native time and location reminders, saved places, quick share from other apps, home screen widgets for browsing and capturing notes, and on-device Smart Capture on supported devices.
Get it onGoogle PlayPWA setup (requires a server)
The browser-installed PWA connects to a Kept server. Device-only mode is available in the native apps. Location-based reminders also require a native app.
- Put Kept behind a public
https://domain. Mobile push will not work from plain HTTP or a raw local network address. Need help with certificates? See the Apache or Nginx Let's Encrypt tutorials linked above in the Reverse proxy section.
Install the PWA on iPhone or iPad
- Open your Kept URL in Safari.
- Tap Share, then Add to Home Screen.
- Open Kept from the new Home Screen icon, not from the Safari tab.
- Sign in and allow notifications when Kept asks.
iOS only allows web push for installed home-screen web apps, so the Safari tab is just for installing.
Install the PWA on Android
- Open your Kept URL in Chrome or another browser with PWA support.
- Use the browser menu and choose Install app or Add to Home screen.
- Open Kept from the installed app icon and allow notifications when prompted.
If PWA notifications do not arrive
- Check that the installed app is using your HTTPS domain.
- Confirm notifications are allowed in the browser or OS settings.
- Kept auto-generates VAPID keys for web push. If push still fails behind a reverse proxy, set
VAPID_SUBJECTindocker-compose.ymlto your public Kept URL, for examplehttps://kept.example.com. - On iOS, remove and reinstall the Home Screen app after changing domains or VAPID settings.
💾 Peace of mind with Backups
For device-only notes, use Settings → Notes on this device → Save a complete backup. The backup includes your notes, images, attachments, reminders, and preferences. Use Restore a backup in either native app to restore the library on a device. Optional backup reminders are in-app prompts; backups are saved when you choose to create them.
For self-hosted servers:
- Automated Schedules: Set Kept to automatically back up your data daily, weekly, or monthly. You never have to think about it.
- One-Click Restore: If you ever need to set up a new server or recover your data, you can upload your backup file during setup to restore everything instantly.
Server data is stored in a single folder (./data), making it easy to copy, move, or back up to your own storage.
Privacy Policy
Short version: your Kept library lives on your device in device-only mode, or on the server you choose in connected mode.
- What Kept stores: Device-only notes, images, attachments, reminders, and settings are stored on your device. Connected libraries and account details are stored on your Kept server, with downloaded notes also kept on your device for offline use.
- Location data: If you use location-based reminders or saved places, Kept may access your device location and store the places, coordinates, reminder radius, and arrive/leave preference needed to make those reminders work. These are stored with your device-only library or on your Kept server, depending on the mode you use.
- Who controls it: You control your device-only library. Whoever runs a connected Kept server controls the data stored there.
- Third-party services: Apple Reminders integration follows the Reminders account and sync settings on your device. Google Calendar and CalDAV connections are optional server features.
- Moving your data: You can back it up, export it, delete it, or move it somewhere else.
- This docs site: This page has no accounts, forms, cookies, ads, or analytics scripts. Your web host may still keep normal server logs.
This is not fancy legal armor. It is the basic truth of the app: Kept is built so your notes stay under your control.