TabForge: Code Keyboard is a keyboard extension and companion app for programming, scripting, terminals, and remote desktops on iPhone and iPad. This policy explains the information TabForge uses while you type, what it stores locally, and how its optional features work.
TabForge's app and keyboard contain no analytics, advertising, account system, application networking service, or automatic diagnostic uploader. The keyboard does not transmit keystrokes, surrounding text, snippets, swipe gestures, or spelling requests to a TabForge server. The code is available for inspection under the repository's MIT license.
This policy covers the app and keyboard extension. It does not describe this website, the apps you type into, terminal or remote-desktop services, Apple system features, external websites, or device backup providers, which have their own data practices.
Typing Context and Information Held in Memory
iOS and the host app may expose limited text and field information to the keyboard through Apple's UITextDocumentProxy interface. TabForge uses that context on the device for editing, indentation, completions, cursor movement, and optional spelling correction. Host apps can limit or withhold context. TabForge does not build a keystroke history or save the host document.
The optional, experimental swipe recognizer uses an included coding vocabulary. Gesture traces and alternatives are temporary; they are not uploaded or used to train a model. Swipe recognition is off by default.
Optional English prose correction uses Apple's UITextChecker on the device. When enabled, it can request Apple's supplementary keyboard lexicon, which may include names and text shortcuts. A bounded set is held in memory to avoid correcting those words; TabForge does not save or log the lexicon.
Correction state, spelling resources, swipe traces, repeat tasks, and held-key state are released when the keyboard is dismissed or receives a memory warning. Normal operating-system memory management still applies; this is not a guarantee of secure memory erasure.
Information Saved on Your Device
TabForge deliberately saves the following information in local preferences storage:
- Keyboard preferences: layout, profile, theme, and editing choices in the keyboard extension's local UserDefaults.
- Custom snippets: text you choose to save for insertion later, stored with the keyboard extension's preferences.
- Playground draft: the companion app's editor content in the app's separate local UserDefaults, so it can be restored between launches.
The saved playground draft is separate from the keyboard's temporary typing context. Text entered or inserted into the playground is saved, including a voice transcript after you choose to insert it.
The companion's keyboard and layout previews use a separate, in-memory set of settings and snippets. Preview changes are discarded when that app process ends. They do not configure the installed keyboard and are not saved as companion keyboard preferences. The playground draft remains saved independently.
Do not put secrets in drafts or snippets.
These records use the iOS application sandbox and the device's normal storage protections. TabForge does not add separate encryption or password protection to drafts, snippets, or preferences. Device backups and operating-system retention rules may apply.
Managing and Deleting Local Data
Resetting keyboard preferences in the keyboard clears its current settings and custom snippets. It does not clear the playground draft; delete or replace the playground text separately.
The update retains an existing keyboard-local settings record when one is present. It does not read, import, or erase an older App Group record or the companion app's old keyboard preferences. Settings or snippets that existed only in those old locations are not automatically transferred.
Those legacy records may remain under iOS storage and backup rules; removing the sharing capability is not a guarantee of erasure. Removing the app and keyboard removes their installed containers subject to iOS behavior; backups may retain earlier data.
No Full Access or Shared Container
This version does not request keyboard Full Access and does not configure an App Group. Keyboard settings and custom snippets are managed from the keyboard's gear menu and saved in its own container. The companion app does not read, write, or synchronize those records.
Snippet names and text are edited in the keyboard's own settings interface. An unfinished snippet edit stays in memory until saved or cancelled; editing a snippet does not type its draft into the host app. The keyboard inserts a saved snippet into the host only when the user selects it for insertion.
Voice Input, Dictation, and Writing Tools
The keyboard extension does not record microphone audio. System dictation remains available where iOS provides it, and you can switch to the Apple keyboard.
The companion app's Voice to code feature starts only after a user action and requests microphone and Speech Recognition permissions. It requires on-device English recognition. If that capability or language support is unavailable, TabForge does not fall back to cloud recognition.
Audio buffers are passed to Apple's on-device Speech service; TabForge does not write recordings to a file. The transcript remains in the voice view until you dismiss it or insert it into the saved playground draft. Recording is cancelled when the view is dismissed, the app enters the background, or a relevant audio interruption occurs.
Apple controls system Dictation and Writing Tools. Their availability and data handling depend on Apple's services and your system settings, rather than TabForge's on-device voice implementation. Review Apple's disclosures before invoking those features with sensitive material.
Other Apps, Sharing, and External Links
When you use the keyboard extension, TabForge inserts text into the selected host app. That app may store or transmit it, including to a remote terminal or desktop. TabForge cannot control the recipient's processing. iOS uses the system keyboard in secure/password and phone fields, and apps may decline third-party keyboards.
The playground's Share code action sends the current draft to the system share sheet only when you choose it. The destination you select receives the text and handles it under its own policies. Review the draft and recipient before sharing.
Opening a repository or other external link is a user-initiated action handled by the system or browser. The destination receives an ordinary web request under its own privacy policy. TabForge does not attach typing context to these links. Licenses and notices are bundled and read locally.
The keyboard extension does not launch the companion app. Configure the installed keyboard from its gear menu. The companion app contains setup and compatibility information, source/privacy links, credits, and licenses; it does not contain controls for the installed keyboard.
Diagnostics and Reports
TabForge contains no typed-text logging or automatic diagnostic uploader. Apple may provide crash reports, TestFlight feedback, and device diagnostics according to your system and testing choices. The project does not intentionally add document text to those reports.
If you choose to submit a bug report, any screenshots, logs, or other information you include are shared by your action. Use synthetic examples and check screenshots and logs before sharing. For a suspected vulnerability, follow the TabForge security policy and avoid including private typing in a public issue.
Availability and Policy Updates
TabForge is provided as-is, without a guarantee of availability, compatibility, data recovery, or continued support.
This policy must be updated when the app changes its permissions, storage, dependencies, or data flow. Updates will appear on this page with a revised effective date. The app's privacy and data-handling documentation and public source code provide implementation details and license notices.
Contact
For questions about this policy, contact jeremy@jeremycollins.net.