Release File Publisher

by Christina
5
4
3
2
1
Score: 50/100

Description

Upload local files to daily GitHub Release assets and automatically insert ready-to-use links or media players into Obsidian notes.

Reviews

No reviews yet.

Stats

0
stars
52
downloads
0
forks
51
days
51
days
51
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
3
commits

Latest Version

2 months ago

Changelog

Release File Publisher 1.0.2

This release addresses compatibility issues identified during the Obsidian Community Plugins review.

Changes

  • Updated the minimum supported Obsidian version to 1.13.0.
  • Added searchable settings using Obsidian's declarative settings API.
  • Improved Unicode and Chinese filename sanitization.
  • Improved compatibility with Obsidian popout windows.
  • Updated destructive file actions to use the current Obsidian API.
  • Added GitHub artifact attestations for release assets.
  • Continued to insert only the newly uploaded file into the active note.

Release assets

  • main.js
  • manifest.json
  • styles.css

README file from

Github

Release File Publisher

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