- Markdown Support - Write notes using simple markdown formatting
- Live Preview: See your formatted content instantly as you type.
- Quick Format : Quick format buttons for easier writing in markdown format.
- Tags : Organize your notes with tags.
- Note Management : View, edit, delete and download saved notes from within the app.
- Image Embedding - Paste images directly from your clipboard
- Search Functionality - Filter notes with a search term.
- Local Storage - All notes are stored locally in plain-text, no database required.
- Import - Simply place markdown notes in kurup's notes folder
- Export - Download notes as zip files with images included
- Simple Interface - Simple, no-frills and lightweight
If you find this project helpful, please consider giving it a β to show your support.
- Open the "New" tab
- Enter a title (optional)
- Write your note content using markdown syntax and quick format buttons
- Quick format : Bold, Italic, Underline, Strikethrough, H1, H2, H3, code
- Press the "Save" button
Syntax | Output | Example |
---|---|---|
**bold** |
bold | **This is bold** |
*italic* |
italic | *This is italic* |
<u>underline</u> |
underline | <u>This is underlined</u> |
<s>strike</s> |
<s>This is struck</s> |
|
# Heading 1 |
Heading 1 | # Heading 1 |
## Heading 2 |
Heading 2 | ## Heading 2 |
### Heading 3 |
Heading 3 | ### Heading 3 |
`inline code` |
inline code |
`code` |
For code blocks use :
```python
def hello_world():
print('This is kurup.')
which renders to:
def hello_world():
print('This is kurup.')
Simply paste images from your clipboard directly into the note area. Images are automatically:
- Displayed in the preview
- Stored locally with your note
- Included when you export the note
In the "Saved" tab you can:
- Search - Search notes and its contents
- Select - Select saved notes to view from a dropdown
- Preview - Read your notes with formatted markdown, a small preview is also shown when hovered.
- Raw - View the raw markdown
- Edit - Make changes to existing notes
- Delete - Remove notes you no longer need (irreversible!)
- Download - Export individual notes as zip files (includes images)
This project is under active development. Please make a separate backup of your notes.
mkdir -p kurup/notes
mkdir -p kurup/temp
cd kurup
services:
kurup:
image: ghcr.io/davistdaniel/kurup:latest
container_name: kurup
ports:
- "9494:9494"
volumes:
- ./notes:/app/notes # make sure the notes folder exists before running the containerβ otherwise the folder will be owned by root.
- ./temp:/app/temp # make sure the notes temp folder exists
# you can also use a custom path for the notes directory
#- /home/yourusername/Documents/notes:/app/notes
command: ["--notes_dir", "/app/notes"]
user: "1000:1000" # set to your own local UID:GID, run `id -u` to find UID and run `id -g` to find GID
sudo docker compose up -d
- Python 3.11 or higher
# Clone the repository
git clone https://github.com/davistdaniel/kurup
cd kurup
# Install dependencies
python -m pip install "nicegui>=2.17.0"
# Run the application
python main.py
# Open your web browser and navigate to:
http://localhost:9494
Note
It is recommended to make a backup of your notes
folder before updating.
# Pull the latest changes from the repository
git pull origin main
# (Optional) Reinstall dependencies in case of updates
python -m pip install -r requirements.txt
# Run the updated application
python main.py
# Open your web browser and navigate to:
http://localhost:9494
# restart the container
sudo docker compose down
# pull the latest image
sudo docker compose pull
# start the container
sudo docker compose up -d
# Open your web browser and navigate to:
http://localhost:9494
Run with custom options:
python main.py --notes_dir 'custom_directory' --port 8080
Command-line arguments:
--notes_dir
: Specify where to store notes (default: "notes")--port
: Set the app server port (default: 9494)
kurup/
βββ main.py # Main application file
βββ static/ # Static assets (logo, favicon, JS etc.)
βββ notes/ # Notes storage directory, contains an example note
βββ utils/
βββ fun.py # Random label generation
βββ image_handler.py # Image processing module
βββ notes_handler.py # Note management module
kurup uses a simple approach to note management:
- Notes are stored as markdown files in the
notes
directory - When images are pasted to clipboard, they are stored in the
temp
directory. - Images are copied from the
temp
directory to thenotes
directory when the note is saved. - A hidden
.kurup
metadata file tracks image references for each note. - The web interface is built with NiceGUI.
Feel free to fork and contribute! Feature ideas or bug fixes are always welcome.
This project is licensed under the terms of the GNU General Public License v3.0.