A modern note-taking app (Obsidian-lite / Apple Notes–style) with to-dos and task management for GNUStep in Objective-C.
- Notes: Plain text / Markdown notes stored as
.mdfiles in a configurable folder (default: Application Support/SmallNote/Notes). - To-dos: Markdown-style checkboxes (
- [ ]/- [x]) in note body; toggle with Cmd+Enter or menu Toggle To-Do. - UI: Main window with a note list (sidebar) and editor; New Note, Open Notes Folder, Delete Note, Quit.
- GNUStep (base, gui)
- SmallStep (../SmallStep): app lifecycle, file system, main menu, file dialog
Core logic uses Foundation only (no extra FOSS libraries): note storage via SmallStep’s SSFileSystem, checkbox parsing in Objective-C.
- Build SmallStep first (must link with libobjc for NSView+SSTag; SmallStep GNUmakefile sets
SmallStep_LIBRARIES_DEPEND_UPON = -lobjc):. /usr/share/GNUstep/Makefiles/GNUstep.sh cd ../SmallStep && make && make install cd ../SmallNote
- Build SmallNote:
If you see undefined reference to
. /usr/share/GNUstep/Makefiles/GNUstep.sh makeobjc_getAssociatedObjectwhen linking, ensure SmallStep was rebuilt withSmallStep_LIBRARIES_DEPEND_UPON = -lobjcso thatlibSmallStep.sohaslibobjcin its NEEDED list. SmallNote uses-Wl,--allow-shlib-undefinedso the linker allows SmallStep’s runtime dependency on libobjc to be resolved at load time. - Run:
Or:
openapp ./SmallNote.app
./SmallNote.app/SmallNote
main.m– entry point, usesSSHostApplication runWithDelegate:.app/SNAppDelegate– implementsSSAppDelegate; builds menu viaSSMainMenu, ownsMainWindow.core/NoteStore– list/load/save/create/delete notes; usesSSFileSystem.core/TodoParser– parse and toggle- [ ]/- [x]in text.ui/MainWindow– split view: note list + editor.ui/NoteListController– table data source, selection.ui/NoteEditorController– load/save text, toggle to-do at current line.
See SMALLCORE.md for shared patterns across Small* apps and possible refactoring into a common core.
GNU AGPLv3 (see LICENSE).