{"id":16711760,"url":"https://github.com/bburdette/zknotes","last_synced_at":"2025-03-17T01:31:08.274Z","repository":{"id":37469875,"uuid":"280745117","full_name":"bburdette/zknotes","owner":"bburdette","description":"Zettelkasten implemented in rust, elm","archived":false,"fork":false,"pushed_at":"2025-03-15T22:30:05.000Z","size":2997,"stargazers_count":23,"open_issues_count":4,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-15T23:24:06.327Z","etag":null,"topics":["elm","rust","zettelkasten"],"latest_commit_sha":null,"homepage":"https://www.zknotes.com","language":"Elm","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bburdette.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":"2020-07-18T21:48:26.000Z","updated_at":"2025-03-15T22:30:09.000Z","dependencies_parsed_at":"2024-01-20T08:33:00.130Z","dependency_job_id":"78fe0ff7-39d7-4358-94c1-8cb8db5c1c09","html_url":"https://github.com/bburdette/zknotes","commit_stats":{"total_commits":1180,"total_committers":4,"mean_commits":295.0,"dds":"0.22796610169491527","last_synced_commit":"16b469edfa2a5062151c338b3228b48b37845c64"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bburdette%2Fzknotes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bburdette%2Fzknotes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bburdette%2Fzknotes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bburdette%2Fzknotes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bburdette","download_url":"https://codeload.github.com/bburdette/zknotes/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243835959,"owners_count":20355613,"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":["elm","rust","zettelkasten"],"created_at":"2024-10-12T20:26:21.875Z","updated_at":"2025-03-17T01:31:07.847Z","avatar_url":"https://github.com/bburdette.png","language":"Elm","funding_links":[],"categories":["Uncategorized","Software"],"sub_categories":["Uncategorized"],"readme":"# zknotes\n\nA multiuser zettelkasten implementation in elm and rust, currently storing notes in sqlite.\n\nThere are some [docs](https://www.zknotes.com/page/what%20is%20zknotes) hosted in zknotes itself, with a few screenshots.\n\nNotes are in markdown, specifically [elm-markdown](https://package.elm-lang.org/packages/dillonkearns/elm-markdown/latest/), which should allow for some interesting extensions later on.  Currently you can use formulas as in [cellme](https://github.com/bburdette/cellme/).\n\nzknotes is web based, and is intended to be usable on phones.  As of now there's no provision for integration with 3rd party editors like vim or kakoune.  Document editing happens through a typical web page text box.\n\nThere's a small search language - you can find documents by title, or by content, or by link with other documents, with boolean expressions combining these queries.\n\nzknotes has some multi-user features.  \n - Notes linked to the 'public' system note are available for the internet at large to view.  \n - You can create 'share notes' by linking ordinary notes to the 'share' system note, and then linking users to the share note.  Those users will be able to see any notes linked to the share note.  \n - Notes can be designated as read-only or editable.  \n - There's also a comment system.  Notes that link to the 'comment' system note and to another note show up as comments in the web UI.\n\n## install locally to try it out:\n\nIf you want to compile and run this on your own machine, without bothering with development tools:\n\n- start by installing the [nix package manager](https://nixos.org/download.html) on your system, and [enable flakes](https://nixos.wiki/wiki/Flakes).\n\n- install into a 'result' folder in a local directory (no need to clone this repo!)\n  ```\n  nix build \"git+http://github.com/bburdette/zknotes?submodules=1\"\n  ```\n\n- Make a config.toml file with `./result/bin/zknotes-server -w myconfig.toml`, then edit as needed.\n\nTo create the first zknotes admin account, use the -a option, like so:\n\n`./result/bin/zknotes-server -c myconfig.toml -a the-admin`\n\nAfter finishing the above setup, run it with:\n  ```\n  ./result/bin/zknotes-server -c myconfig.toml\n  ```\n\n## as a nix service (nixos)\n\nIf you have a flake.nix and configuration.nix, then in the flake.nix this line to your inputs:\n\nchecked out locally:\n\n    zknotes = { url = \"git+file:/home/bburdette/code/zknotes/zknotes?submodules=1\"; };\n\nfrom the github repo:\n\n    zknotes = { url = \"github:bburdette/zknotes?submodules=1\"; };\n\nThen add this to your modules:\n\n          inputs.zknotes.nixosModules.zknotes\n\nThen in configuration.nix add:\n```\n  nixpkgs.overlays = [ (final: prev: { zknotes = inputs.zknotes.packages.${pkgs.system}.zknotes; })];\n  services.zknotes.enable = true;\n```\nYou can use custom settings:\n\n```\n   nixpkgs.overlays = [ (final: prev: { zknotes = inputs.zknotes.packages.${pkgs.system}.zknotes; })];\n   services.zknotes = {\n     enable = true;\n     settings = ''\n         ip = '127.0.0.1'\n         port = 8010\n         createdirs = true\n         altmainsite = []\n         file_tmp_path = './temp'\n         file_path = './files'\n \n         [orgauth_config]\n         mainsite = 'http://localhost:8010'\n         appname = 'zknotes'\n         emaildomain = 'zknotes.com'\n         db = './zknotes.db'\n         admin_email = 'admin@admin.admin'\n         regen_login_tokens = true\n         email_token_expiration_ms = 86400000\n         reset_token_expiration_ms = 86400000\n         invite_token_expiration_ms = 604800000\n         open_registration = false\n         send_emails = false\n         non_admin_invite = true\n         remote_registration = true\n       '';\n   };\n```\n\nThe default here is to run zknotes in its own user account, 'zknotes', and store data in /home/zknotes/zknotes.  \n\nTo create the first user with zknotes, so you can log in:\n\n`sudo zknotes-server -c /home/zknotes/zknotes/config.toml -a my-admin-uid`\n\n## invite users\n\nBy default zknotes uses 'invite links' for new users.  To onboard a new user, an admin gets an invite link from the admin panel, and sends that to the new user via email, signal, slack, etc.  Whoever uses the invite link can set their username and password to get an account.\n\n## developing\n\nStrictly speaking you only need git, rust, elm, sqlite and openssl to do development (I think).  But you can use nix to install the full array of gadgets I use which will supply lsp support, formatting, automatic recompiling, etc.\n\ncurrently my orgauth lib is used here with submodules.  so you have to:\n```\n git submodule update --init --recursive\n```\nyes, there is a submodule within a submodule.  hopefully this will change sooner than later.\n\nto install the dev tools needed, clone the zknotes repo locally.  then run `nix develop` in that directory.\n\nthere's a watch_run.sh in the server subdirectory, and a watch_build.sh  in the elm directory.  Run those each in a separate terminal and you'll get automatic rebuilds whenever you make changes to code.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbburdette%2Fzknotes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbburdette%2Fzknotes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbburdette%2Fzknotes/lists"}