{"id":13435274,"url":"https://github.com/mdouchement/standardfile","last_synced_at":"2025-04-05T23:08:12.896Z","repository":{"id":41867091,"uuid":"179999395","full_name":"mdouchement/standardfile","owner":"mdouchement","description":"Yet Another Standardfile (standardnotes server) Implementation written in Golang","archived":false,"fork":false,"pushed_at":"2025-01-05T10:57:29.000Z","size":315,"stargazers_count":80,"open_issues_count":12,"forks_count":9,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-29T22:06:31.287Z","etag":null,"topics":["client-library","golang","notes","standard-notes","standardfile","standardnotes","terminal-ui","text-editor"],"latest_commit_sha":null,"homepage":"","language":"Go","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/mdouchement.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}},"created_at":"2019-04-07T17:27:43.000Z","updated_at":"2025-03-22T01:48:38.000Z","dependencies_parsed_at":"2023-01-21T20:35:06.604Z","dependency_job_id":"da3feac8-6538-4ff5-bc5d-69875db0c932","html_url":"https://github.com/mdouchement/standardfile","commit_stats":null,"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdouchement%2Fstandardfile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdouchement%2Fstandardfile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdouchement%2Fstandardfile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mdouchement%2Fstandardfile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mdouchement","download_url":"https://codeload.github.com/mdouchement/standardfile/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247411234,"owners_count":20934653,"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","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":["client-library","golang","notes","standard-notes","standardfile","standardnotes","terminal-ui","text-editor"],"created_at":"2024-07-31T03:00:34.450Z","updated_at":"2025-04-05T23:08:12.866Z","avatar_url":"https://github.com/mdouchement.png","language":"Go","funding_links":[],"categories":["Go","Servers"],"sub_categories":["Importers, Exporters, and Converters"],"readme":"# Yet Another Standardfile Implementation in Go\n\nThis project is **maintained for the basic features** as encrypted notes because on its own it already takes hours to figure out what is the issue when a breaking change or bug happens (e.g. [#87](https://github.com/mdouchement/standardfile/issues/87)).\n\nPeople's pull requests that implement or fix extra features (revision, file storage, etc.) will be gladly reviewed and merged.\n\n- For any bug linked to the code or its faulty behavior, please take a look to the existing [Issues](https://github.com/mdouchement/standardfile/issues) and feel free to open a new one if nothing match your issue\n- For any question about this project, the configuration, integrations, related projects and so one, please take a look to the existing [Discussions](https://github.com/mdouchement/standardfile/discussions) and feel free to open a new one\n\n\u003chr\u003e\n\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/mdouchement/standardfile)\n[![Go Report Card](https://goreportcard.com/badge/github.com/mdouchement/standardfile)](https://goreportcard.com/report/github.com/mdouchement/standardfile)\n[![License](https://img.shields.io/github/license/mdouchement/standardfile.svg)](http://opensource.org/licenses/MIT)\n\nThis is a 100% Golang implementation of the [Standard Notes](https://docs.standardnotes.com/specification/sync) protocol. It aims to be **portable** and **lightweight**.\n\n### Running your own server\n\nYou can run your own Standard File server, and use it with any SF compatible client (like Standard Notes).\nThis allows you to have 100% control of your data.\nThis server implementation is built with Go and can be deployed in seconds.\n\nhttps://hub.docker.com/r/mdouchement/standardfile\n\n### Client library\n\nGo to `pgk/libsf` for more details.\nhttps://godoc.org/github.com/mdouchement/standardfile/pkg/libsf\n\nIt is an alternative to https://github.com/jonhadfield/gosn\n\n### SF client\n\n```sh\ngo run cmd/sfc/main.go -h\n```\n\nTerminal UI client:\n![sfc note](https://user-images.githubusercontent.com/6150317/62490536-c997f780-b7c9-11e9-867a-bc619d286b31.png)\n\n## Requirements\n\n- Golang 1.16.x (Go Modules)\n\n### Technologies / Frameworks\n\n- [Cobra](https://github.com/spf13/cobra)\n- [Echo](https://github.com/labstack/echo)\n- [BoltDB](https://github.com/etcd-io/bbolt) + [Storm](https://github.com/asdine/storm) Toolkit\n- [Gowid](https://github.com/gcla/gowid)\n\n\n## Differences with reference implementation\n\n\u003cdetails\u003e\n\u003csummary\u003eDrop legacy support for clients which hardcoded the \"api\" path to the base url (iOS)\u003c/summary\u003e\n\n\u003e [Permalink](https://github.com/standardfile/ruby-server/blob/0a48c2625afc21966b110e0f73a1ff7bd212dbf4/config/routes.rb#L19-L26)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eDrop the POST request done on Extensions (backups too)\u003c/summary\u003e\n\n\u003e [Permalink](https://github.com/standardfile/ruby-server/blob/09b2020313a54668b7c6c0e122bbc8a530767d06/app/controllers/api/items_controller.rb#L20-L45)\n\nThis feature is pretty undocumented and I feel uncomfortable about the outgoing traffic from my server on unknown URLs.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eDrop V1 support\u003c/summary\u003e\n\n\u003e [All stuff used in v1 and not in v2 nor v3](https://github.com/standardfile/standardfile.github.io/blob/master/doc/spec-001.md)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eJWT revocation strategy after password update\u003c/summary\u003e\n\n\u003e Reference implementation use a [pw_hash](https://github.com/standardfile/ruby-server/blob/0a48c2625afc21966b110e0f73a1ff7bd212dbf4/app/controllers/api/api_controller.rb#L37-L43) claim to check if the user has changed their pw and thus forbid them from access if they have an old jwt.\n\n\u003chr\u003e\n\n\u003e Here we will revoke JWT based on its `iat` claim and `User.PasswordUpdatedAt` field.\n\u003e Looks more safer than publicly expose any sort of password stuff.\n\u003e See `internal/server/middlewares/current_user.go`\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eSession use PASETO tokens instead of random tokens\u003c/summary\u003e\n\n\u003e Here we will be using PASETO to strengthen authentication to ensure that the tokens are issued by the server.\n\n\u003c/details\u003e\n\n## Not implemented (yet)\n\n- **2FA** (aka `verify_mfa`)\n- Postgres if a more stronger database is needed\n- A console for admin usage\n\n\n## License\n\n**MIT**\n\n\n## Contributing\n\nAll PRs are welcome.\n\n1. Fork it\n2. Create your feature branch (git checkout -b my-new-feature)\n3. Commit your changes (git commit -am 'Add some feature')\n5. Push to the branch (git push origin my-new-feature)\n6. Create new Pull Request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmdouchement%2Fstandardfile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmdouchement%2Fstandardfile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmdouchement%2Fstandardfile/lists"}