MCPcopy
hub / github.com/tagspaces/tagspaces

github.com/tagspaces/tagspaces @v6.13.9 sqlite

repository ↗ · DeepWiki ↗ · release v6.13.9 ↗
2,457 symbols 7,955 edges 547 files 95 documented · 4%
README

TagSpaces Logo

GitHub All Releases

TagSpaces

TagSpaces is a free and open-source platform for organizing, tagging, and managing your local files. It runs completely offline, with no need for cloud services, internet connection, or vendor lock-in. Available for Windows, Linux, and macOS, it also includes a browser extension (Web Clipper) for Firefox, Edge, and Chrome to capture online content as local files.

TagSpaces with the Markdown Editor

🌐 Learn More


📦 Downloads

Grab the latest release from the GitHub Releases Page.
Check out the full changelog for recent updates.


🚀 Features at a Glance

  • File & Folder Management – Browse, organize, and manage local files in a powerful interface.
  • Tagging System – Add tags directly into filenames or use sidecar files for metadata storage.
  • Flexible Search – Filter and find files by name or tags using fuzzy search.
  • Offline First – 100% offline, serverless, and privacy-focused.
  • Cross-platform – Runs seamlessly on Windows, Linux, and macOS.
  • Note Taking – Create notes in TXT, Markdown, or HTML.
  • To-Do Support – Manage task lists using the built-in HTML editor.
  • Media Player – Play common audio and video formats directly within the app.
  • Web Clipper – Save web pages or screenshots locally using our browser extension.

👩‍💻 Developer Guide

🛠️ Technologies

📁 Project Structure

src/
  renderer/         # Core application logic
  main/             # Electron main process
  locales/          # Language translation files
  node_modules/     # TagSpaces extension modules

capacitor/          # Mobile (Android/iOS) build
dll/                # Live reload support for development
docker/             # Docker container setup
internals/          # Flow and ESLint configurations
resources/          # Images and build resources
scripts/            # NPM task-related scripts
test/               # Unit and E2E tests
web/                # Assets for web version

▶️ Running from Source

Prerequisites

Install the following tools:

Setup Steps

git clone https://github.com/tagspaces/tagspaces.git
cd tagspaces
git checkout develop  # or 'master' for stable release
npm install

Set Up Local Web Service

Create a .env file in release/app/ with a custom key to avoid conflicts:

The desktop version of the application uses a web service which is running locally as a separate process. The web service is responsible for the search index creation and the generation of the thumbnails for most of the images formats. A key is required in order for the main application to communicate with the web server. It should be generated from webpack script in the .env file located in release/app folder. This is an example for an .env file.

KEY=a_custom_key

Having a custom key, ensures that another instance of TagSpaces will not communicate with the web service of the initial instance, since it is always running on the same port.

Build & Start

npm run build
npm run start

Start in Development Mode

npm run dev

This will start a development server in background, which watches for changes in background and refreshes the application automatically once you have done some changes in the source code.

🧪 Testing

Run unit and integration tests:

npm run test-unit
npm run test-playwright
npm run test-playwright-web

💻 Packaging the Desktop App

Build native apps for each platform:

npm run package-win
npm run package-linux
npm run package-mac
npm run package-mac-arm64

The commands will create packages for Windows, Linux, Mac OS and Mac OS with the M1 processor respectively.

⚠️ Run npm run build before packaging.

📱 Mobile Build (Capacitor)

Build and run the Android or iOS app via Capacitor:

npm run run-android-cap
npm run run-ios-cap

🌐 Web Version

Start the web version locally:

npm run run-web

🔌 Extend with Custom Viewers & Editors

TagSpaces supports extension modules for opening and editing different file types. Learn more on our Extensions Page.

🤝 Contributing

We welcome contributions! See CONTRIBUTING.md, and review and sign the Contributor License Agreement (CLA) before submitting PRs.

🌍 Localization

TagSpaces is available in over 20 languages. Help us translate the app by joining our team on Transifex.

💡 Ideas & Suggestions

Have an idea or a feature request? Share it on our community forum and join the discussion.

🐞 Support & Bug Reports

If you encounter a bug or need help, open an issue on GitHub.

⚠️ Known Limitations

TagSpaces is not optimized for locations with more than 100,000 files.

📡 Feeds

📄 License

TagSpaces is dual-licensed under the AGPL (GNU Affero General Public License) v3 for open-source projects and a commercial license for vendors or resellers. Contact us if you're interested in using TagSpaces under different terms.

The TagSpaces Pro components (tagspacespro/) are proprietary and governed by a separate EULA. For the full picture — the open-source/proprietary boundary, how the combined builds are distributed, and third-party notices — see LICENSING.md.

Extension points exported contracts — how you extend this code

HistoryItem (Interface)
* path: path or title to be shown
src/renderer/tagspaces.namespace.d.ts
Changed (Interface)
(no doc)
src/main/chokidarWatcher.ts
WorkSpace (Interface)
(no doc)
src/renderer/tagspaces.namespace.d.ts
Extensions (Interface)
(no doc)
src/main/types.ts
Location (Interface)
(no doc)
src/renderer/tagspaces.namespace.d.ts
ApiResponse (Interface)
(no doc)
src/main/types.ts
S3Location (Interface)
(no doc)
src/renderer/tagspaces.namespace.d.ts
FileExistenceCheck (Interface)
(no doc)
src/renderer/tagspaces.namespace.d.ts

Core symbols most depended-on inside this repo

clickOn
called by 720
tests/e2e/general.helpers.js
expectElementExist
called by 488
tests/e2e/general.helpers.js
push
called by 287
src/renderer/services/FixedSizeArray.ts
getGridFileSelector
called by 200
tests/e2e/general.helpers.js
showNotification
called by 156
src/renderer/hooks/NotificationContextProvider.tsx
slice
called by 139
src/renderer/services/FixedSizeArray.ts
findLocation
called by 122
src/renderer/hooks/CurrentLocationContextProvider.tsx
useCurrentLocationContext
called by 79
src/renderer/hooks/useCurrentLocationContext.tsx

Shape

Function 2,189
Interface 207
Method 37
Class 23
Enum 1

Languages

TypeScript99%
Java1%

Modules by API surface

src/renderer/reducers/settings.ts79 symbols
src/renderer/services/utils-io.ts73 symbols
tests/e2e/general.helpers.js67 symbols
src/renderer/hooks/IOActionsContextProvider.tsx60 symbols
src/renderer/services/io-capacitor.ts59 symbols
src/renderer/hooks/DirectoryContentContextProvider.tsx54 symbols
src/renderer/hooks/ChatProvider.tsx38 symbols
src/renderer/hooks/TaggingActionsContextProvider.tsx36 symbols
src/renderer/utils/dates.ts35 symbols
src/main/main.ts35 symbols
src/renderer/hooks/LocationIndexContextProvider.tsx34 symbols
src/renderer/hooks/CurrentLocationContextProvider.tsx31 symbols

Dependencies from manifests, versioned

@anuradev/capacitor-background-mode7.2.1 · 1×
@capacitor-community/file-opener8.0.1 · 1×
@capacitor/android8.3.0 · 1×
@capacitor/app8.1.0 · 1×
@capacitor/browser8.0.3 · 1×
@capacitor/camera8.0.2 · 1×
@capacitor/cli8.3.0 · 1×
@capacitor/core8.3.4 · 1×
@capacitor/device8.0.2 · 1×
@capacitor/filesystem8.1.2 · 1×
@capacitor/ios8.3.0 · 1×
@capacitor/share8.0.1 · 1×

For agents

$ claude mcp add tagspaces \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact