An extension for GNOME Shell that enhances the user experience for devices with a touchscreen – primarily focused (and tested) on tablets.
TouchUp does not strive to reinvent the wheel and instead provides many features well known from mobile OSes, such as a system navigation bar, notification swipe gestures or onscreen keyboard enhancements. Have a look at the roadmap below for the full picture.
The aim is to make Linux on mobile more competitive and accessible by providing an intuitive, elegant, configurable and stable interface that feels native to the touch form factor and stays out of your way. However, please be aware this is not always possible nor easy since GNOME Shell extension development does not come without challenges or limits – should you find a bug please do not hesitate to open an issue so it can be fixed quickly.
🛠️ or build and install from source: npm run enable:release
This is a rough overview over the implemented features and goals (in no particular order). Please be aware that I have limited time to work on this project and don't expect new features very frequently – you can help speed up progress by donating.
- Navigation bar, as known from Android/iOS
- Gesture mode
- Buttons mode
- Invisible gestures mode
- Compatibility with:
- DashToDock (move the dock above the navigation bar, dock swipe up gesture)
- DashToPanel (move the panel above the navigation bar)
- Edge swipe actions (left/right edge: back, top/bottom edge: show panel and navigation bar)
- Touch gestures for GNOME Shell notifications
- Touchscreen swipe gesture
- Touchpad two-finger gestures
- Add "copy"/"open" button in notifications for elements like 2FA codes or links
- Onscreen Keyboard (OSK)
- Key popups
- "Extended" keys (make padding between keys reactive)
- Swipe-close keyboard
- Swipe space bar to switch input methods
- Show a quick paste action in suggestion bar when having copied something to the clipboard recently
- Compatibility with the "GJS OSK" extension (?)
- Virtual Touchpad (use device as touchpad when connected to a second monitor) [WIP]
- Floating temporary screen rotation button when auto-rotation is disabled but device is being rotated (as in android)
- Pattern unlock
- Improved swipe gestures in the overview
- Swipe up windows in overview to close them
- Single-finger swipe left/right to switch workspace
- Hold and move to drag and drop windows
- Single-finger swipe up/down to open/close overview/app list
- Move windows to another screen via dragging to the corner
- Gesture-driven top menu pull down/swipe up animations
- Touch-enabled volume controls
- Voice input in onscreen keyboard
- Option to display individual windows instead of workspaces when navigating using gesture navigation bar
- Run arbitrary commands on touch-mode change
- Double-tap top panel, lockscreen or desktop background to sleep
- Hide window close buttons in touch mode
Each of these features can be enabled/disabled individually and most can be further customized in the extension settings. Note that TouchUp does not even load the code for disabled features into memory; thus, the extension stays as slim as you'd like it to be.
In case you'd like to suggest a feature or work on one yourself, please don't hesitate to create an issue so we can discuss it!
TouchUp is developed for and actively tested on upstream GNOME Shell. It is not tested on derivations thereof, such as in Ubuntu, and I don't have capacity to include those at the moment (should you be willing to contribute as a long-term beta tester, and to investigate issues on a specific shell derivation yourself, please open an issue to get in touch).
However, TouchUp will automatically disable features that fail to initialize and show a notification for these. Other features might work on your shell derivation. Consider logging out and back in when a feature failed to initialize – this way you ensure the failed feature leaves no traces in your session.
Developing this functionality in the form of a Shell extension allows a seamless interplay between a touch-centered usage and one based on keyboard and mouse. It facilitates a dual usage of devices such as tablets with removable keyboards or convertibles, without the need to manually switch between login sessions or to compromise on awkward user interfaces. Elements of the interface that are useful in both, touch and non-touch mode (e.g. notification swipe gestures) will always be active, while elements that are useless or annoying when having a keyboard and touchpad at hand (e.g. the gesture navigation bar) will only be active in touch mode.
This also means that users can just use their well-known and stable GNOME Shell (with their favorite extensions) and can add the additional touch functionality at the press of a button. There is no need to set up a different shell to have decent touch interaction with the device, which reduces the hurdle and thereby makes linux on touch devices more accessible.
Lastly, as the development of an extension like this one is decoupled from GNOME Shell itself, it can make faster iterations and profit off using more modern tooling such as typescript (though extension review can of course also take its time).
TouchUp does not contain LLM-written code. The project is crafted and designed carefully by hand, and I intend to keep it that way to ensure the goals stated at the beginning of this readme are met.
However, please do know that I'm not setting a fixed rule for the future with this; the policy might be reevaluated and adjusted at some point. Rest assured though that this will never become a vibe-coded project – code running inside the Shell's process is way too critical to be written that carelessly.
Should you wish to contribute, which I'd greatly appreciate, please first have a look at CONTRIBUTING.md. This is especially important if you plan to contribute more than just a simple typo- or bugfix.
At this convenience, allow me to spread a word of encouragement: Everything you really need to contribute is the ability to write typescript and the patience to examine the upstream Shell code's inner workings; I'm happy to help with anything else and guide you around.
Your support fuels this work and helps TouchUp to make GNOME Shell an alternative to corporate touch operating systems. It'll also allow me to allocate more time to this project, thereby making progress faster. Even a dollar a month helps!
To donate, choose a platform below:
Recommended! Most payment methods, one-time or recurring donations, no sign up required.
Donate by card, no sign up required.
As of 2026, a substantial portion of the milestones in the above roadmap is kindly funded through NGI0 Commons Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program. Learn more at TouchUp's NLnet project page.
- GNOME Shell ↗ – It goes without saying that this project would not be possible without the excellent work on the Shell and its awesome extension ecosystem.
- Gjsify ↗ – Thanks for providing typescript type definitions that make the work a lot more fun and TouchUp more stable.
- GNOME Shell Mobile ↗ – Thanks to the upstreamed improvements to Clutter's gesture system, TouchUp's gesture handling could be simplified quite a bit.
- NLNet ↗ and all supporters ↗ – Thanks for moving TouchUp forward and enabling me to dedicate time to this project!
Importantly: Thanks a lot to everyone who contributes in any way to this project!
This project is licensed under GPL-3.0-or-later. In the unlikely event that you have any requirements not permitted by this license, I'm willing to talk as long as the FOSS ethos is retained.