Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Release File Publisher

ChristinaChristina48 downloads

Upload files to daily GitHub Release assets and insert ready-to-use links or media players.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates3

Upload any local file to a GitHub repository's Release assets, then insert a ready-to-use player or link into the active note and copy the download URL.

The plugin is designed for a simple workflow: choose a file → upload → insert → copy link. It does not use Git commands and does not commit uploaded files to the repository.

简体中文说明

Features

  • Creates or reuses a published Release named with the current date (YYYY-MM-DD) in your configured timezone.
  • Uploads files only as GitHub Release assets.
  • Shows upload progress and waits for GitHub to confirm the upload before reporting success.
  • Inserts only the file from the current upload into the active Markdown editor.
  • Generates audio and video players, Markdown images, or icon-labelled download links according to file type.
  • Copies the returned browser_download_url to the clipboard.
  • Preserves Chinese and other Unicode filenames while replacing unsafe filename characters.
  • Supports Replace existing and Keep both filename-conflict modes.
  • Browses remote assets by date and deletes selected files after confirmation.
  • Removes a date Release after its final asset is deleted and the Release is confirmed empty.

Requirements

  • Obsidian Desktop 1.8.7 or later. Mobile is not supported because upload progress uses Node.js HTTPS APIs.
  • A GitHub repository. Use a public repository if links must work for readers who are not signed in to GitHub.
  • A fine-grained personal access token limited to the selected repository.
  • The repository must be initialized and must not use immutable Releases.

Setup

1. Prepare a repository

Create or choose a repository for uploaded files. Initialize it with a README if it is otherwise empty. Uploaded files will not appear in the repository tree; they are stored in Releases.

Do not enable immutable Releases. The plugin needs to add, replace, and delete assets after each daily Release is published.

2. Create a fine-grained token

In GitHub, create a fine-grained personal access token with the smallest practical scope:

Setting Value
Repository access Only selected repositories
Selected repositories Only the repository used by this plugin
Contents Read and write
Metadata Read
Other permissions No access

Organization-owned repositories may require administrator approval.

3. Configure the plugin

Open Settings → Release File Publisher, then enter:

  • Owner: the GitHub user or organization that owns the repository.
  • Repository: the repository name only.
  • Fine-grained Token: the token created above.
  • Timezone: an IANA timezone such as Europe/Berlin or America/New_York. The detected system timezone is used initially.

Select Test connection. A successful check shows GitHub connection successful. The check verifies read access; the first upload confirms write access.

Usage

Use either ribbon icon or the Command Palette:

  • Upload & insert uploads one selected file, inserts it at the current Markdown cursor when it is still safe to do so, and copies the URL when enabled.
  • Upload & copy link uploads one file and copies its URL without changing a note.
  • Browse uploaded files lists daily Releases and lets you delete a selected asset.

If no editable Markdown note is active, the plugin still uploads the file and copies the URL. If the active note, selection, or cursor changes while an upload is running, the plugin avoids inserting into the wrong location and falls back to copying.

Smart insert formats

Type Extensions Inserted content
Audio mp3, wav, m4a, ogg, flac HTML audio player with matching MIME type
Images png, jpg, jpeg, gif, webp, svg Markdown image
Video mp4, webm, mov, m4v Responsive HTML video player
PDF and documents pdf, doc, docx, odt, rtf Document download link
Spreadsheets xls, xlsx, csv, ods Spreadsheet download link
Presentations ppt, pptx, odp Presentation download link
Archives zip, rar, 7z, tar, gz, tgz Archive download link
Other files Any extension Generic download link

The asset list is used only for conflict checks and management. A successful upload calls the editor insertion once for the newly uploaded file; it never inserts every asset from that day's Release.

Filename conflicts

  • Replace existing deletes the same-named asset and uploads the new file. This usually preserves the download URL, but replacement is not atomic: a network failure after deletion can temporarily leave the link unavailable. Upload the local file again to recover.
  • Keep both chooses the next available name, for example recording-2.mp3 and recording-3.mp3.

Deleting uploaded files

Open Browse uploaded files, choose a date, select Delete, and confirm. The local file and note are never changed. Existing links to that asset stop working.

After the final asset is deleted, the plugin reads the remote list again and removes the empty Release and its date entry. An old empty Release can be removed with Remove empty date. GitHub does not provide an atomic “delete only if empty” operation, so avoid uploading to the same date from another device during cleanup.

Privacy, security, and external services

  • Account and network use: this plugin connects directly to api.github.com and uploads.github.com for the repository configured by the user. GitHub's terms and privacy policy apply.
  • Credentials: the token is stored in Obsidian's plugin data file (data.json) without additional encryption. The token is masked in settings and is never placed in download URLs. Protect the vault configuration directory and do not publish or share data.json.
  • Local file access: a native file picker lets the user explicitly select one file from anywhere on the computer. The plugin reads only that selected file for upload.
  • Note access: the plugin reads the active editor state to avoid writing to the wrong location and uses the Obsidian editor API to insert generated text. It does not scan or upload vault notes.
  • Clipboard: the plugin writes the successful download URL when requested or when insertion is unavailable.
  • Deletion: remote deletion occurs only after explicit confirmation. It affects the selected Release asset and, when confirmed empty, that date's Release. It does not delete local files, notes, repository commits, branches, or tags.
  • Telemetry: there is no analytics, advertising, tracking, or custom telemetry.
  • Token safety: credentials are not intentionally written to logs, notices, error messages, or generated links.

Only upload content you are permitted to share. Files in public repositories are publicly accessible. Private-repository links generally require the reader to sign in to GitHub because the plugin does not put credentials in embedded links.

Known limitations

  • Files are read into memory before upload; very large files may use substantial memory. GitHub's current Release asset limits also apply.
  • Uploads cannot be resumed or cancelled after transfer begins, and automatic retry is not implemented.
  • Node.js HTTPS upload traffic may not inherit every system or Obsidian proxy configuration.
  • Playback support depends on the media codecs available in Obsidian's Electron runtime.
  • GitHub may normalize an asset filename. The plugin uses the download URL returned by GitHub rather than constructing one.
  • Cross-device operations have no global lock. Avoid replacing or deleting assets for the same date from multiple devices at the same time.

Development

npm install
npm run typecheck
npm test
npm run build

The production build creates main.js. The project uses TypeScript, the Obsidian API, Node.js, npm, and esbuild. It performs all repository operations through the GitHub REST API and never invokes Git or a shell command at runtime.

License

MIT

HealthExcellent
ReviewSatisfactory
About
Upload local files as GitHub Release assets and create or reuse a date-named Release in your timezone. Insert audio/video players, Markdown images, or download links into the active note, copy the browser_download_url to clipboard, and browse or delete remote assets while preserving Unicode filenames.
PublishingAttachmentsIntegrations
Details
Current version
1.0.2
Last updated
Last month
Created
Last month
Updates
3 releases
Downloads
48
Compatible with
Obsidian 1.13.0+
Platforms
Desktop only
License
MIT
Report bugRequest featureReport plugin
Author
ChristinaChristinachristina
hyahui.com/
GitHubchristinahyh
  1. Community
  2. Plugins
  3. Publishing
  4. Release File Publisher

Related plugins

Share Note

Instantly share/publish a note, with the full theme and content exactly like you see in Obsidian. Data is shared encrypted by default, and only you and the person you send it to have the key.

Image auto upload

Upload images from your clipboard by PicGo.

Digital Garden

Publish your notes to a digital garden for others to enjoy.

GitHub

Share as Gist

Share a note as a GitHub.com Gist.

BRAT

Easily install a beta version of a plugin for testing.

Self-hosted LiveSync

Sync vaults securely to self-hosted servers or WEBRTC.

LanguageTool Integration

Advanced grammar and spell checking, powered by LanguageTool.

Fast Note Sync

Real-time sync of your vaults across server, mobile, and web; shareable with anyone; supports REST and MCP integrations to build your personal AI knowledge base.

Custom Frames

Turn web apps into panes using iframes with custom styling. Also comes with presets for Google Keep, Todoist and more.

Local REST API with MCP

Unlock your automation needs by interacting with your notes over a secure REST API.