Everything Carets ships with.
The editor surface
Carets's editor is CodeMirror 6 in a WebView, not a native text input. That choice is deliberate: a native TextInput cannot deliver real syntax highlighting, regex find/replace, and line numbers convincingly, and we wanted the editor half of the app to be a real editor — the kind that earns its monospace font.
What you get from that decision, in order of how often you'll notice it:
- Syntax highlighting for the common languages — JavaScript / TypeScript, Python, Ruby, Go, Rust, Swift, Kotlin, Java, C / C++, JSON, YAML, TOML, HTML, CSS, SQL, Markdown, shell — auto-detected from extension and overridable per document.
- Line numbers, gutter, current-line highlight, and a fold marker for languages that support it.
- Code-aware behaviour — auto-indent, bracket matching, tag-pair closing, smart Home that toggles between the start of the indent and the start of the line.
- Multi-cursor and go-to-line — drop multiple cursors to edit in several places at once, and jump straight to any line number from the command palette.
- Auto-save on every keystroke into the local SQLite store, with a per-document cursor and scroll position so re-opening a file lands you exactly where you left off.
- Crash recovery. If the app is killed mid-edit, the next launch surfaces an unsaved-buffer banner with a single tap to restore.
What you won't find: a minimap, split panes, a plugin ecosystem, or project-wide search across multiple files. Those are desktop features. Shipping them on a phone would make the app worse at both of its real jobs.
Opening & editing external files
The second core pillar. Carets can open files from anywhere the OS exposes through its document picker — Files, iCloud Drive, Google Drive, Dropbox if you have the provider extension installed — and save changes back to the original location, not to a copy inside our sandbox.
The mechanism is the OS's security-scoped file model. When you open a file from the picker, the system grants Carets a time-limited permission to read and write that specific URI. We start the access, read the file into the editor, and write your edits back to the same URI when you save. We do not copy the file into our database, we do not upload it anywhere, and we do not retain a copy when you close the tab — only a pointer (the security-scoped URI) and your cursor position, so the file shows up in your recent list.
A few consequences worth knowing:
- External file editing is uncapped on every tier, including the free tier. It is a core editor function, not a stored note. The 30-note free cap only counts internal notes you create inside Carets.
- iCloud Drive and Google Drive files just work. They show up in the same OS picker as everything else; the provider handles the network round-trip transparently.
- The grant can expire. If you background the app for a long time and the OS revokes the scoped access, the next save fails — and Carets holds your edits in a recovery buffer until you re-open the file once. No data lost.
Find & replace, with regex
Sublime Text's signature, faithfully ported. Tap the lens in the editor toolbar to bring up a search row; tap .* to switch to regex. The flavour is ECMAScript regex (the JavaScript one), with the g flag implied — so \d, \w, capture groups, lookarounds, and non-greedy quantifiers all work. Replacement supports $1, $2, etc.
The find row is touch-tuned: a one-handed input bar, match counter, jump-to-next / jump-to-previous buttons sized for thumbs, and a long-press on the input that surfaces a quick palette of common patterns (digits, words, whitespace, end-of-line). Regex on a phone is fiddly; we've put the work in.
Goto Anything
A command palette reimagined for touch. Swipe down from the top of the editor (or tap the ⌘ icon) to bring up Goto Anything: a fuzzy-search sheet that mixes notes, recent external files, and actions in one list.
- Type a few characters of a note title to jump to it.
- Type a colon-prefixed action —
:theme,:preview,:export,:cloud— to run it without leaving the editor. - Type a
@followed by a symbol name (for languages where Carets's parser can index symbols) to jump to the definition inside the current document. - Type a
#followed by a line number to go straight there.
The palette is the keyboard's best friend — and, because the phone keyboard is always the constraint, it's how power users will actually move around inside Carets.
Notes, lists, and Markdown
The notes half of the product. Where the editor surface is for opening real files, the notes section is for the small, fast, frequent capture loop — a one-tap new-note button, instant autosave, no friction.
- Markdown with live preview. Swipe between edit and rendered modes; the preview honours the same theme as the editor.
- Lists and checklists. Tap-to-toggle to-dos; auto-continue on bullet and numbered lists; nested indentation with a single tab.
- Folders and tags. Lightweight organisation — drag-and-drop into folders, tag a note with
#labelinline, browse by tag from the sidebar. - Internal notes only, by default.Notes live in the app's local SQLite store; the free tier caps them at 30. External files you opened from the picker are a separate concept — they live in their original location and never count.
Instant full-text search
We use SQLite's FTS5 virtual table as the notes index. Every internal note has a mirrored row in notes_ftscovering title and body, and the index is updated on every save. The result is the kind of search that doesn't need a spinner: type a query, results land, you tap one.
Search runs against:
- Every internal note's title and body.
- Tag names.
- The display names of recent external files (so a file you edited last week is still findable, even though we don't store its contents).
The same search is wired into the Goto Anything palette and into a dedicated search tab — whichever you reach for first.
Themes & fonts
Two themes ship with the free tier: a clean Light theme and a signature Dark — warm terracotta accent, muted ink on near-black, the kind of editor look that gets out of your way at 1am. Both set syntax-highlight colours that meet WCAG AA contrast.
Pro unlocks every theme, including Coder Light and Coder Dark (the phosphor-green pair for people who like their editor to glow), plus the full set of monospace fonts. Themes and fonts are a per-device choice.
Cloud sync & restore (Pro)
When you turn on cloud sync with Pro, Carets mirrors your internal notes and a small metadata manifest to your own cloud. iOS notes go into an iCloud container tied to your Apple ID; Android notes go into a private appDataFolder in your Google Drive that only Carets can see. We host nothing on our servers.
A few things to be deliberate about:
- Sync is per-ecosystem.v1 backs iOS to iCloud and Android to Drive; the two don't talk yet. Cross-platform sync needs a neutral hosted layer we haven't built, and it's on the v1.1 list.
- Restore is one button. Reinstall on a new phone, sign back in to the same Apple ID or Google account, tap Restore, and your notes rehydrate from the manifest.
- External files are never synced by us.They already live in your cloud (iCloud Drive, Google Drive, Files); we just edit them in place. Your provider's versioning is their problem to solve and ours to respect.
Export & share (Pro)
Pro can export internal notes to Markdown, PDF, or plain .txt, either one note at a time or in bulk from Settings → Export. The output is yours, in standard formats, with no lock-in. Free can still copy or share individual notes via the OS share sheet.
Why we paywalled this: export is the feature that converts power users from a 30-note hobbyist tier into long-term archives. We want the notes half of Carets to scale with you, and export is the seam.
Settings & control
The settings screen is structured so you can find what you need in one tap from anywhere in the app:
- Editor — font family, size, line height, tab width, wrap, line numbers, bracket matching, auto-indent.
- Appearance — theme, light/dark toggle, premium theme pack picker.
- Cloud — sync on/off, last-sync timestamp, restore, sign-out.
- Data management — recover from crash buffer, export, Delete all data.
- About— version, leave a review, privacy & terms links.
What we deliberately didn't build
A short, opinionated list — because the things Carets doesn't do are part of why the things it does do feel sharp.
- No iPad or Mac build.Tablets and desktops need a different app — keyboard-first multi-cursor, split panes, plugin ecosystem. We'd rather be the best phone-native editor than a watered-down desktop one.
- No account system. The free tier never asks you to sign in. Pro cloud sync uses Sign in with Apple or Google Sign-In, borrowed from the OS, never a password we see.
- No telemetry from the app.No advertising IDs, no crash reporters, no third-party analytics — local-first isn't a tagline, it's the architecture.
- No publishing platform. Carets is a personal editor. There is no shared workspace, no comment thread, no public profile. Your notes are yours.
- No AI features in v1.Possibly later, only on terms that don't break local-first.