Loose Leaf is a notes app for iPad created by Adam Wulf. Learn more and see demo videos at https://getlooseleaf.com. Support this project and download the app on the App Store.
Enjoy the app? Buy me a coffee ☕️ and become a sponsor!
Organize pages into documents:
Duplicate pages and scraps with gestures:
Ink sticks to imported images:
Use ruler for straight or curved lines:
Scissors can cut imported images:
More gesture videos available on the Loose Leaf site.
First, clone the Loose Leaf repository and initialize all submodules:
git clone [email protected]:adamwulf/loose-leaf.git
cd loose-leaf
git submodule update --recursive --init
Next, you'll need to add your own client ids and secrets for MS App Center, Twitter, Facebook, Pinterest, Imgur, and Mixpanel. All of these are stored in a file called AppIds.plist. To get this file setup, copy from the template file:
cp Project/LooseLeaf/AppIds-Template.plist Project/LooseLeaf/AppIds.plist
open Project/LooseLeaf/AppIds.plist
If you don't have ids for some of these services, leaving them blank will still let you build and run the app, though some features may not work.
That's it for configuration - now you can build the app and run it on your iPad!
Help translate Loose Leaf into your language! Join the project and start translating here: https://poeditor.com/join/project/UBaYwL0YTh
Some great places to get involved and help make Loose Leaf better for everyone:
- Feature #279, #696, and #697 - Add additional share options - destinations like Dropbox, Droplr, and Evernote would be nice additions
- Feature #1576 Update the ruler tool to act similar to Apple's Notes app and toggle to stay on the page
- Feature #1618 Support arbitrary page sizes instead of only screen-ratio sized pages
- Feature #1632 Add optional margin to imported PDFs
- Bug #1723 - Exporting multiple pages will often crash if the user has more than 10 documents imported. Super sneaky memory corruption bug going on here.
Loose Leaf includes a spacecommander as a submodule to help with keeping code style consistent. Please format all your code before submitting a PR by using the included format-all.sh and format-staged.sh scripts.
Much of the Loose Leaf codebase is separated into separate submodules:
- PerformanceBezier - A small library to dramatically speed up common operations on UIBezierPath, and also bring its functionality closer to NSBezierPath
- ClippingBezier - Calculates intersection points, paths, and shapes between two UIBezierPaths
- JotUI - OpenGL based drawing view that supports custom brush textures, undo/redo, and asynchronous import and export.
- MMStretchGestureRecognizers - A collection of three gestures that can stretch an arbitrary view with four fingers, used in the clone gesture.
- cloudkit-manager - A simple wrapper to CloudKit to make passing messages with attachments easy between multiple users
- touch-chart - Simplify and smooth UIBezierPaths by reducing the number of elements within the path
The master
branch contains all in-development code. The alpha
branch contains the settings used for App Store releases. Each App Store release is tagged. The marketing
branch shows hand shadows during gestures and is used to record demo videos.
Many of the icons used in Loose Leaf were created in PaintCode. Other icons were created with Photoshop. Both *.paintcode and *.psd files are included in the Icons directory.
This repo also includes two apps used during development of Loose Leaf:
- LittleClipper - This app was used to help test the touch-chart and ClippingBezier libraries during the development of the scissors feature.
- ShapeShifter - This app demonstrates the use of MMStretchGestureRecognizers and helped to tune the clone scrap/page gesture.
The Loose Leaf app and sample code are provided under the MIT License. Attribution is required.
- Download Loose Leaf
- Follow @adamwulf
- Become a Github Sponsor