{"id":26473072,"url":"https://github.com/ragedunicorn/obsidian-plugin-s3-link","last_synced_at":"2025-10-19T14:46:12.960Z","repository":{"id":185331943,"uuid":"673355959","full_name":"RagedUnicorn/obsidian-plugin-s3-link","owner":"RagedUnicorn","description":"An Obsidian Plugin for Linking to AWS S3 Objects","archived":false,"fork":false,"pushed_at":"2025-06-29T09:27:22.000Z","size":5325,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-29T09:36:04.623Z","etag":null,"topics":["aws","aws-s3","aws-s3-bucket","obsidian","obsidian-plugin"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RagedUnicorn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-08-01T12:51:48.000Z","updated_at":"2023-11-05T17:58:32.000Z","dependencies_parsed_at":"2023-08-01T14:39:11.497Z","dependency_job_id":"aa3b93e3-e60a-4c20-8c48-9d34fd47593d","html_url":"https://github.com/RagedUnicorn/obsidian-plugin-s3-link","commit_stats":null,"previous_names":["ragedunicorn/obsidian-plugin-s3-link"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RagedUnicorn/obsidian-plugin-s3-link","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RagedUnicorn%2Fobsidian-plugin-s3-link","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RagedUnicorn%2Fobsidian-plugin-s3-link/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RagedUnicorn%2Fobsidian-plugin-s3-link/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RagedUnicorn%2Fobsidian-plugin-s3-link/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RagedUnicorn","download_url":"https://codeload.github.com/RagedUnicorn/obsidian-plugin-s3-link/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RagedUnicorn%2Fobsidian-plugin-s3-link/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279832368,"owners_count":26233462,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-19T02:00:07.647Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","aws-s3","aws-s3-bucket","obsidian","obsidian-plugin"],"created_at":"2025-03-19T21:50:49.185Z","updated_at":"2025-10-19T14:46:12.925Z","avatar_url":"https://github.com/RagedUnicorn.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# 🪨 obsidian-plugin-s3-link\n\n![](docs/plugin_banner.png)\n\n\u003e A plugin that retrieves and caches objects from AWS S3 Buckets\n\n## Overview\n\nThe plugin supports custom URLs to an AWS S3 Bucket, allowing users to retrieve and cache files from S3 efficiently.\n\n### Usage\n\nTo retrieve files:\n\n* **Standard URL:** `s3:[objectKey]`\n    * Downloads and caches the file locally. It checks periodically for newer versions in the S3 bucket but only downloads if a newer version exists.\n* **Signed URL:** `s3-sign[objectKey]`\n    * Creates a signed URL instead of downloading the file. The generated signed URL is valid for 7 days and will be automatically renewed after expiration.\n\n\u003e Note: Signed URLs cannot be used with embed functionality, as embedded links expect a local file. The documentation below specifies which links support signed URLs.\n\n### Embedding Content\n\n- **Image Links:**\n```markdown\n![](s3:[objectKey])\n![](s3-sign:[objectKey])\n```\n\n- **Anchor Links:**\n```markdown\n[Name of the link](s3:[objectKey])\n[Name of the link](s3-sign:[objectKey])\n```\n\n\u003e The first link opens the file within Obsidian, while the second opens it in the browser.\n\n- **Video Links:**\n```markdown\n\u003cvideo src=\"s3:[objectKey]\" controls\u003e\u003c/video\u003e\n\u003cvideo src=\"s3-sign:[objectKey]\" controls\u003e\u003c/video\u003e\n```\n\n\u003e Note: Signed URLs are not supported for obsidian video embeds.\n\n- **PDF \u0026 Sound Links:**\n```markdown\n![[s3:[objectKey]]]\n```\n\n\u003e Note: Signed URLs are not supported.\n\n### Configuration\n\nBefore using the plugin, some basic configuration is needed:\n\n- **S3 Bucket Name:** Specify the AWS S3 Bucket name.\n- **S3 Bucket Region:** Define the region where the AWS S3 Bucket resides.\n- **AWS Credentials:** Authenticate using the `~/.aws/credentials` file or the Access Key Id and Secret Access Key.\n    - **AWS Profile:** The plugin checks all profiles in `~/.aws/credentials`.\n    - **AWS Access Key ID:** Your AWS IAM user's Access Key ID.\n    - **AWS Secret Access Key:** Your AWS IAM user's Secret Access Key.\n\n\u003e Note: Using the profile is recommended to avoid storing credentials directly within Obsidian.\n\n- **S3 Bucket CORS Configuration:** Ensure the S3 Bucket has CORS configured to accept requests from Obsidian.\n```json\n[\n    {\n        \"AllowedHeaders\": [\n            \"*\"\n        ],\n        \"AllowedMethods\": [\n            \"GET\",\n            \"HEAD\"\n        ],\n        \"AllowedOrigins\": [\n            \"*\"\n        ],\n        \"ExposeHeaders\": [],\n        \"MaxAgeSeconds\": 3000\n    }\n]\n```\n- **AWS IAM User:** An example IAM configuration for user read access to an S3 Bucket. \n```json\n{\n    \"Statement\": [\n        {\n            \"Action\": [\n                \"s3:ListBucketVersions\",\n                \"s3:ListBucket\",\n                \"s3:GetBucketLocation\"\n            ],\n            \"Effect\": \"Allow\",\n            \"Resource\": \"arn:aws:s3:::[bucketname]\",\n            \"Sid\": \"\"\n        },\n        {\n            \"Action\": [\n                \"s3:GetObjectVersion\",\n                \"s3:GetObject\"\n            ],\n            \"Effect\": \"Allow\",\n            \"Resource\": \"arn:aws:s3:::[bucketname]/*\",\n            \"Sid\": \"\"\n        }\n    ],\n    \"Version\": \"2012-10-17\"\n}\n```\n\n## Development\n\n### Setting up\n\n1. **Dependencies:**\n```bash\nnpm install\n```\n2. **Run Project:** This watches for project changes. After the build finishes, reload Obsidian using the `Reload app without saving` command.\n```bash\nnpm run dev\n```\n3. **Linting:**\n```bash\nnpx eslint .\n```\n\n### Creating Releases\n\nReleases for this project are automated using GitHub Actions. Here's how it works:\n\n1. **Tagging a Release:** To initiate a new release, you need to create a new git tag. Use the following convention for versioning: `vx.x.x`.\n\n```bash\ngit tag vx.x.x\n```\n\n2. **Pushing the Tag:** After creating the tag, push it to the repository. This will trigger the GitHub Action to create a new release.\n\n```bash\ngit push --tags\n```\n\n3. **GitHub Actions:** Once the tag is pushed, the GitHub Action associated with release creation is automatically invoked. You can view the workflow in the `.github/workflows/release.yaml` directory of the repository.\n\n## License\n\nMIT License\n\nCopyright (c) 2023 Michael Wiesendanger\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fragedunicorn%2Fobsidian-plugin-s3-link","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fragedunicorn%2Fobsidian-plugin-s3-link","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fragedunicorn%2Fobsidian-plugin-s3-link/lists"}