# Copyous: a GNOME clipboard manager with a DBus surface and SQLite history

> Copyous is a GNOME Shell extension written in TypeScript that keeps clipboard history for text, code, images, files, links, characters and colors, and can be driven over DBus. It is licensed GPL-3.0-or-later, so the licence has real consequences for anyone who wants to fork it.

**boerdereinar/copyous** — Modern Clipboard Manager for GNOME

- Repository: https://github.com/boerdereinar/copyous
- Website: https://extensions.gnome.org/extension/8834/copyous/
- Stars: 631 · Forks: 58
- Language: TypeScript
- License: GPL-3.0
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/boerdereinar-copyous

## A clipboard manager that opens at the pointer or the cursor

Copyous is a GNOME Shell extension, written in TypeScript, that replaces the single-slot clipboard with a searchable history. The feature list is specific about what the history holds: text, code, images, files, links, characters and colors. Two of those entries, code and characters, are things most clipboard managers do not distinguish, which tells you the project is aimed at people who copy fragments rather than prose.

The interaction detail that distinguishes it is where the dialog appears. It can be opened at the mouse pointer or at the text cursor, so the selection list shows up next to the thing you were working on instead of in a fixed corner of the screen. The panel indicator, the settings entry and the keyboard shortcut all reach the same dialog.

Items can be pinned as favorites and organised with nine colored tags, and the clipboard actions themselves are customizable, meaning the default action bound to an item type can be changed rather than fixed by the project. For a GNOME user moving between a terminal, an editor and a browser, the pitch is a single searchable buffer that understands what was copied rather than one that stores text and images as an undifferentiated blob.

## History is a SQLite database created during the build

The storage layer is visible in the build files rather than in prose. The Makefile carries a `database` target that creates a `dist` directory, copies `resources/database` into it, and pipes `resources/database/database.sql` through `sed` to substitute the distribution path before handing it to `sqlite3`. A second file, `resources/database/json.sql`, is loaded into the same database and its output redirected to a JSON file alongside the database.

That is why the installation instructions list Libgda 5.0 or 6.0 with SQLite support as a dependency. The extension talks to its own database through Libgda's GObject introspection bindings, and the dev dependencies pin typings for both the 5.0 and 6.0 lines, `@girs/gda-5.0` and `@girs/gda-6.0`, alongside `@girs/gsound-1.0` for the sound dependency. The build also has a `DBPATH` variable that points at a test database by default and is emptied when `sqlite3` is not installed, so the test target skips the database steps instead of failing.

Copying the history out as JSON is worth noting for investigative or migration use, since the tool produces a plain file rather than only a proprietary database.

## Installing from a release zip with gnome-extensions

The project documents three routes. The recommended one is the GNOME Extensions listing, where the extension is published under its own identifier. The manual route is to download the latest release archive and install it with the `gnome-extensions` tool:

```shell
   gnome-extensions install -f ~/Downloads/copyous@boerdereinar.dev.zip
```

The archive name carries the extension UUID, `copyous@boerdereinar.dev`, which is also the identifier the Makefile uses for its distribution zip. After installing, the session has to be restarted by logging out, and the extension then has to be enabled:

```shell
   gnome-extensions enable copyous@boerdereinar.dev
```

The same enable command is used whether the extension came from the Extensions site or from a GitHub release. Settings are then opened from the panel indicator, from Extension Manager, or from the command line:

```shell
gnome-extensions prefs copyous@boerdereinar.dev
```

Building from source needs Make, Node.js, pnpm and jq, and the repository is cloned with its submodules, which matters because the tree contains a `submodules/` directory:

```shell
   git clone --recurse-submodules https://github.com/boerdereinar/copyous
```

The build step itself is a single pnpm invocation, because the package scripts delegate to the Makefile:

```shell
   pnpm install
```

The `package.json` is marked `private` and `type: module`, and its scripts are thin wrappers such as `make build`, `make install`, `make launch` and `make test`, so the Makefile remains the single source of truth for what those commands do.

## A DBus interface for scripts that need to clear or open the dialog

The extension exposes a DBus object on the session bus. The name is `org.gnome.Shell.Extensions.Copyous` and the object path is `/org/gnome/Shell/Extensions/Copyous`. Four methods are documented: `Toggle` to show or hide the clipboard dialog, `Show`, `Hide`, and `ClearHistory`, which takes a boolean named `all`. When `all` is `true` the entire history is cleared; when it is `false`, only unpinned and untagged items are removed, so pinned favorites and tagged groups survive a cleanup.

That distinction is the reason the interface exists. A script that wants to wipe the clipboard trail can do so without destroying the entries the user deliberately kept, and it can do so without a screen scraper.

Calling the interface from a shell uses `gdbus`. This example toggles the dialog:

```shell
gdbus call --session \
    --dest org.gnome.Shell.Extensions.Copyous \
    --object-path /org/gnome/Shell/Extensions/Copyous \
    --method org.gnome.Shell.Extensions.Copyous.Toggle
```

The same shape with `ClearHistory` and the argument `false` clears everything except the pinned and tagged items. For a user who copies credentials for a workflow and then wants them gone, that distinction removes the need to unpin everything by hand first.

## Keyboard-driven cycling across item types and tags

The dialog is built for keyboard use, and the shortcut table lists the operations that matter most. The clipboard dialog opens with Super, Shift and V, and Super, Shift and Ctrl with V toggles incognito mode, a mode for copies that should not be recorded in the history. Inside the dialog, Enter or Space copies the selected item, Ctrl with Enter or Space runs the default action for that item, Ctrl with S pins it, and Delete removes it, with Shift held to force the delete. Tab and the arrow keys move around, and Ctrl with a digit jumps straight to an item.

Two shortcuts show how the data model is meant to be explored. Ctrl with Tab and Shift with Ctrl with Tab cycle the item type filter, which is how you narrow a long history down to just the images or just the links. Ctrl with the backtick key and its shifted variant cycle the tag filter, and Alt toggles a pinned-only search. Nine colored tags give that filter something to bite on.

The documentation notes that some shortcuts can be changed in the extension settings, and that the complete list of available shortcuts lives there too. That is the sensible place to change the Super, Shift and V binding if it collides with something in your session.

## A rewrite of Pano under GPL-3.0-or-later

The project states its own history plainly: Copyous is a full rewrite of Pano, which lives at `oae/gnome-shell-pano`. The acknowledgement is a fact about lineage rather than a comparison, and the project description does not set out Pano's own features, so the useful comparison is between the two design approaches that are visible here and the older codebase it replaces.

The implementation choices point one way. Copyous is TypeScript compiled for GJS with ESM modules, it keeps history in a SQLite database reached through Libgda rather than in a flat file, and it generates its translations with `xgettext` into `resources/po/main.pot` using the package name and a copyright holder of Copyous. Its dev dependencies pin GNOME Shell 50 typings and use `pnpm` with a lock file, and a separate `pyproject.toml` requires Python 3.13 or newer for one tool, `shexli`, which the `shexli` make target runs over the built zip and pipes through a TypeScript transform script.

The licence is the part with teeth. The package manifest records `GPL-3.0-or-later` and the README states the project is licensed under the GNU General Public License 3 or Later. That is a copyleft licence: distributing a modified or integrated version obliges you to offer the corresponding source under the same terms. Anyone planning to embed this extension in a product that is not GPL compatible has a decision to make before writing a single line. This is a description of what the licence text says, not advice on your obligations.

## Fast release cadence and a Makefile that owns the build

The project is being worked on actively. The last push was on 2026-10-21, and three tagged releases landed in the days before that: v2.1.0 on 2026-10-13, v2.1.1 on 2026-10-16 and v2.1.2 on 2026-10-18. A cadence that tight means you should read the release notes between versions rather than assuming a patch bump changes nothing, and it means an extension installed from the Extensions site can change behaviour under you.

The build itself is organised so that one tool drives everything. The Makefile defines the UUID, the source and test directories, the distribution zip path, and the database paths, and it exposes targets for building, installing, uninstalling, launching, launching a profile, launching the settings, linting, lint fixing and testing. Linting runs eslint over `src` and prettier over `src` and `resources/css` in check mode. The test target is available separately, and the Makefile falls back to skipping database setup when `sqlite3` is missing.

Upgrading therefore means running the same build and install path again, or pulling a new zip from the releases page. What you should check after an upgrade is the dependency list rather than the code, because a new Libgda major version or a missing GSound library will break the extension before any feature matters.

## Conclusion

Copyous suits GNOME users who want history for rich clipboard payloads, tags and pinning, and who want to script the dialog through the org.gnome.Shell.Extensions.Copyous DBus interface. It does not suit users of other desktops, and it does not suit organisations that need to redistribute it in a closed source product, because the GPL-3.0-or-later terms require derivatives to stay under the same licence. Before installing, check that Libgda with SQLite support and GSound are present, since the project lists both as required dependencies for optimal behaviour.

## FAQ

### What does Copyous store in its clipboard history?

The feature list covers text, code, images, files, links, characters and colors. Items can be pinned as favorites and grouped with nine colored tags, and the history itself is kept in a SQLite database.

### How do I install Copyous on GNOME?

The recommended route is the GNOME Extensions listing. To install manually, download the latest release zip and run `gnome-extensions install -f ~/Downloads/copyous@boerdereinar.dev.zip`, log out and back in, then run `gnome-extensions enable copyous@boerdereinar.dev`.

### Can I clear the Copyous history from a script?

Yes. The DBus interface on `org.gnome.Shell.Extensions.Copyous` exposes a `ClearHistory` method that takes a boolean. Passing `true` clears all history, while `false` clears only unpinned and untagged items.

### What dependencies does Copyous need at runtime?

The project lists Libgda 5.0 or 6.0 with SQLite support and GSound for the extension to work optimally. Distribution specific install commands for those libraries are given for Fedora, Arch Linux, Ubuntu and Debian, and openSUSE.

### Can I use Copyous outside GNOME?

No. It is a GNOME Shell extension that relies on GNOME Shell APIs, and the extension identifier is `copyous@boerdereinar.dev`. The other desktop environments have their own clipboard managers, and none of them are covered by this project.

## Sources

- [boerdereinar/copyous on GitHub](https://github.com/boerdereinar/copyous)
- [License: GPL-3.0](https://github.com/boerdereinar/copyous/blob/main/LICENSE)
- [Project website](https://extensions.gnome.org/extension/8834/copyous/)
- [README](https://github.com/boerdereinar/copyous/blob/main/README.md)
- [Releases](https://github.com/boerdereinar/copyous/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/boerdereinar-copyous
