Private Notes is a secure, open-source web application designed for managing personal notes locally on your device. It offers optional password-based encryption, ensuring your data remains private and protected without the need for cloud storage or external servers. With features like tagging, search functionality, and backup options, Private Notes provides a user-friendly platform for all your note-taking needs.
- π Local Storage: All notes are stored locally in your browser using IndexedDB (with localStorage fallback).
- π Optional Encryption: Password-based encryption using AES-GCM for sensitive notes.
- π·οΈ Tag Organization: Organize notes with customizable tags.
- π¨ Color Coding: Personalize notes with custom colors.
- π± PWA Support: Install as a standalone app on mobile and desktop.
- π Import/Export: Backup and restore your notes in JSON format.
- π Rich Text Support: Basic text formatting capabilities.
- π Search: Full-text search across notes and tags.
- π― Filters: Filter notes by tags and sort by various criteria.
- π±οΈ Drag & Drop: Manual note reordering.
- π Offline First: Works without an internet connection.
- π Auto Updates: Automatic updates when new versions are available.
You can try out the application live here.
No installation is required for online use. Simply visit the live demo to start managing your notes.
To run Private Notes locally for testing purposes, follow these steps:
-
Clone the Repository
git clone https://github.com/idrassi/private-notes.git
-
Navigate to the Project Directory
cd private-notes -
Serve the Application
You can use any static server to serve the application. For example, using Python's built-in server:
python -m http.server 8000
-
Access the Application
Open your browser and navigate to
http://localhost:8000.
To deploy Private Notes on a server, follow these steps:
-
Clone the Repository to Your Server
git clone https://github.com/idrassi/private-notes.git
-
Configure HTTPS
Private Notes requires HTTPS to function correctly, especially for service workers and secure storage. Ensure your server is configured with a valid SSL certificate.
-
Modify Configuration Files
-
.htaccessFile: The repository includes an.htaccessfile with various configurations for Apache servers, including security headers and HTTPS enforcement. If you're not using an Apache server, you'll need to translate the.htaccessconfigurations to your server's configuration format. This includes setting up the correct security headers and HTTPS redirection. -
Update URLs: Replace instances of
notes.idrix.frin the.htaccessfile andindex.htmlwith your actual domain name.- In
.htaccess, update theContent-Security-Policyheader to reflect your domain. - In
index.html, update any meta tags or links that referencenotes.idrix.fr.
- In
-
-
Deploy Files to Server
Upload the application files to the appropriate directory on your web server.
-
Restart Web Server
After making configuration changes, restart your web server to apply the new settings.
-
Access the Application
Open your browser and navigate to your domain to access Private Notes.
- Click on the Add Note button (floating action button with a plus icon).
- Enter your note title and content.
- Optionally, set a background color, add tags, or enable encryption.
- Click Save to store the note locally.
- While creating or editing a note, click on the Lock icon.
- Check the Encrypt note option.
- Enter and confirm your password when prompted.
- The note content will be encrypted and can only be viewed or edited with the correct password.
- Use the search bar at the top to find notes by title, content, or tags.
- Results will appear in real-time as you type.
- Add tags to your notes to organize them.
- Click on the Filter button to filter notes by tags or change the sort order.
- Export Notes: Click on the Export Notes option in the menu to download all your notes as a JSON file.
- Import Notes: Click on the Import Notes option and select a JSON file to restore notes.
- Click on the Install App button when prompted to install Private Notes as a Progressive Web App on your device.
- The app can then be used offline and will appear in your app list.
- IndexedDB: Primary storage mechanism for notes, providing efficient and structured data management.
- LocalStorage: Automatic fallback if IndexedDB is not supported by the browser.
- Key Derivation: Uses PBKDF2-HMAC-SHA256 with 1,000,000 iterations to derive a strong key from your password.
- Encryption Algorithm: Employs AES-GCM for encrypting note content, providing both confidentiality and integrity.
- Salt and IV: Generates unique random salt and initialization vector (IV) for each encrypted note.
- Web Crypto API: All cryptographic operations are performed using the browser's built-in Web Crypto API.
- Notes can be exported and imported in JSON format.
- No external services are involved; all operations are performed locally.
The application includes a .htaccess file configured with security headers to enhance security:
- Strict-Transport-Security: Enforces HTTPS.
- Content Security Policy: Restricts sources for scripts, styles, images, etc.
- Referrer Policy: Controls the information sent in the
Refererheader. - X-Content-Type-Options: Prevents MIME type sniffing.
- X-Frame-Options: Protects against clickjacking.
- Permissions Policy: Disables unused features like geolocation and camera.
Note: If you're using a different web server, you'll need to adapt these configurations accordingly.
- HTML5 & CSS3: For structuring and styling the application.
- JavaScript (ES6+): Core logic and functionality.
- IndexedDB & LocalStorage: Local data storage solutions.
- Web Crypto API: Secure cryptographic operations.
- Service Workers: Enabling PWA features and offline access.
- Font Awesome: Iconography.
Contributions are welcome! Please follow these steps:
-
Fork the Repository
Click the Fork button at the top-right corner of this page.
-
Create a Branch
git checkout -b feature/YourFeatureName
-
Commit Your Changes
git commit -m "Add your message" -
Push to Your Fork
git push origin feature/YourFeatureName
-
Create a Pull Request
Go to the original repository and click on Pull Requests, then New Pull Request.
This project is licensed under the MIT License.
Created by Mounir IDRASSI.
For questions or suggestions, feel free to open an issue or contact me directly via GitHub.
Note: Private Notes is designed with privacy and security in mind. However, always ensure you use strong, unique passwords and keep backups of your important data.