simonbs / Runestone

πŸ“ Performant plain text editor for iOS with syntax highlighting, line numbers, invisible characters and much more.
MIT License
2.68k stars 150 forks source link
ios swift tree-sitter

πŸ‘‹ Welcome to Runestone - a performant plain text editor for iOS with code editing features

Runestone uses GitHub's Tree-sitter to parse code to a syntax tree which is used for features that require an understanding of the code in the editor, for example syntax highlighting.

Build and Test Build Documentation Build Example Project CodeQL SwiftLint Twitter Mastodon

✨ Features

πŸš€ Getting Started

Please refer to the Getting Started article in the documentation and the Meet Runestone series of tutorials.

πŸ“– Documentation

The documentation of all public types is available at docs.runestone.app. The documentation is generated from the Swift code using Apple's DocC documentation compiler.

🏎 Performance

Runestone was built to be fast. Its good performance is by far mostly thanks to Tree-sitter's incremental parsing and AvalonEdit's approach for managing lines in a document.

When judging the performance of Runestone, it is key to build your app in the release configuration. The optimizations applied by the compiler when using the release configuration becomes very apparent when opening large documents.

πŸ–₯ Catalyst

The project should mostly work with Catalyst on the Mac, however, it isn't fully tested and the implementation isn't considered done. The focus is currently on the iPhone and iPad.

πŸ“± Projects

The Runestone framework is used by an app of the same name. The Runestone app is a plain text editor for iPhone and iPad that uses all the features of this framework.

Runestone app icon

Download on the App Store

πŸ‘¨β€πŸ’» Contributing

Pull requests with bugfixes and new features are much appreciated. I'll be happy to review them and merge them once they're ready, as long as they contain change that fit within the vision of Runestone and provide generally useful functionality.

Clone the repository to get started working on the project. Note that Runestone depends on Tree-sitter through a submodule. This submodule must be cloned as well before Runestone can be built. Pass the --recursive option when cloning the repository to clone all submodules.

git clone --recursive git@github.com:simonbs/Runestone.git

❀️ Acknowledgments