{"id":22164737,"url":"https://github.com/axelson/nerves_live_reload","last_synced_at":"2026-02-01T18:32:21.963Z","repository":{"id":265538319,"uuid":"375781010","full_name":"axelson/nerves_live_reload","owner":"axelson","description":null,"archived":false,"fork":false,"pushed_at":"2024-09-21T07:15:17.000Z","size":317,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-08T12:58:15.318Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/axelson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2021-06-10T17:39:35.000Z","updated_at":"2025-02-24T01:28:21.000Z","dependencies_parsed_at":"2024-11-29T20:46:29.599Z","dependency_job_id":null,"html_url":"https://github.com/axelson/nerves_live_reload","commit_stats":null,"previous_names":["axelson/nerves_live_reload"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/axelson/nerves_live_reload","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axelson%2Fnerves_live_reload","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axelson%2Fnerves_live_reload/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axelson%2Fnerves_live_reload/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axelson%2Fnerves_live_reload/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/axelson","download_url":"https://codeload.github.com/axelson/nerves_live_reload/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axelson%2Fnerves_live_reload/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279012191,"owners_count":26085079,"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-12T02:00:06.719Z","response_time":53,"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":[],"created_at":"2024-12-02T05:09:48.448Z","updated_at":"2025-10-12T17:31:53.443Z","avatar_url":"https://github.com/axelson.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"*Warning*: This is currently more of a proof-of-concept and I'm not sure if or when I'll have the time and inclination to take it further.\n\nThe idea behind NervesLiveReload is that as you edit files in your editor on your development machine, after being compiled those files are then sent to your nerves device and \"hot reloaded\" there.\n\nThis works by using `:peer` to start a node on the remote machine and transfer configuration over to it.\n\n## Current status\n\nNervesLiveReload is isn't finished or documented. I don't currently have any plans to take it further.\n\n## Raw WIP notes\n\nNerves Livebook (inky):\n\n    iex --name \"reload@192.168.1.4\" --cookie nerves_livebook_cookie -S mix phx.server\n    NervesLiveReload.watch_application(\"/home/jason/dev/inky_impression_livebook/mix.exs\", \"rpi0\", node: :\"livebook@nerves-517f.local\")\n\nImpression Dash:\n\n    iex --name \"reload@192.168.1.4\" --cookie nerves_livebook_cookie -S mix phx.server\n    NervesLiveReload.watch_application(\"/home/jason/dev/inky_impression_livebook/mix.exs\", \"rpi0\", node: :\"livebook@nerves-517f.local\")\n\nScenic Side Screen:\n\n``` elixir\niex --name \"reload@192.168.1.4\" --cookie fw_cookie -S mix phx.server\nNode.connect(:\"fw@192.168.1.6\")\nNervesLiveReload.watch_application(\"/home/jason/dev/scenic-side-screen/fw/mix.exs\", \"rpi3\", node: :\"fw@192.168.1.6\")\nNervesLiveReload.watch_application(\"/home/jason/dev/scenic-side-screen/fw/mix.exs\", \"rpi3\", node: :\"fw@192.168.1.6\", scenic_live_reload: true)\n```\n\nOther\n\n    recompile; NervesLiveReload.Server.run(\"/home/jason/dev/forks/nerves_examples/blinky/mix.exs\")\n\n\nTODO:\n- [x] Look at LiveBook's evaluator node (via a Port) https://github.com/elixir-nx/livebook/pull/20\n  - I think this approach could work quite well. Should start up one instance to fetch all the paths that need to be watched by ExSync.\n  - NOTE: Ended up running an elixir script with eval instead (and beam_notify)\n- [ ] Write up notes about the NervesLiveReload architecture\n- [ ] When the device restarts we have to push all the modules again\n- [ ] Create a GenServer to be linked to the watching of a project\n- [ ] The GenServer should be the one calling:\n  - [ ]`ExSyncLib.DynamicSupervisor.start_child(:exsync_lib_supervisor, src_dirs, src_extensions)`\n  - [ ] Also needs to pass the beam_dirs (might need changes in ExSyncLib)\n- [ ] Create a LiveView that interfaces with the watching GenServer\n- [ ] Clean way to stop watching the project\n- [ ] Don't hardcode method of getting mix config\n- [ ] Check if phoenix views are reloaded\n- [ ] Try to get PhoenixLiveReload to work?\n- [ ] auto-set/detect cookie when possible\n  - Read from a file like `./_build/rpi3_dev/rel/fw/releases/COOKIE` or from `mix.exs -\u003e releases -\u003e cookie`\n  - https://hexdocs.pm/mix/Mix.Tasks.Release.html#module-options\n- [ ] Fix this error on startup\n  - \u003e iex(reload@192.168.1.4)10\u003e Couldn't watch /home/jason/dev/inky_impression_livebook/.nerves-live-reload/build/rpi0_dev/lib/scenic_widget_contrib/ebin: No such file or directory\n  - Related to not using a path dep?\n\nError checking:\n- [ ] Ensure that `nerves_bootstrap` archive is installed\n- [ ] Verify that every source directory is using the same version of elixir and erlang\n  - This will prevent errors like:\n  ``` sh\n  13:54:38.683 [error] beam/beam_load.c(1879): Error loading module telemetry:\n    This BEAM file was compiled for a later version of the run-time system than 23.\n    To fix this, please recompile this module with an 23 compiler.\n    (Use of opcode 172; this emulator supports only up to 170.)\n  ```\n- [ ] Return an error when the scenic scene has a name of `:nil`\n\n# How it Works\n\nBuilt on ExSyncLib\n\nExSyncLib.DynamicSupervisor is used to watch the project\n\nUses ExSyncLib to watch the target project, when changes are detected, the files are recompiled and then Beam clustering is used to push the changed BEAM files.\n\n# NervesLiveReload\n\nNOTE: Umbrella projects are not supported, they may or may not work.\n\nContains a vendored version of [ScenicLiveReload](https://github.com/axelson/scenic_live_reload/)\n\nTo start your Phoenix server:\n\n  * Install dependencies with `mix deps.get`\n  * Install Node.js dependencies with `npm install` inside the `assets` directory\n  * Start Phoenix endpoint with `mix phx.server`\n\nNow you can visit [`localhost:4000`](http://localhost:4000) from your browser.\n\nReady to run in production? Please [check our deployment guides](https://hexdocs.pm/phoenix/deployment.html).\n\n## Attributions\n\nSounds:\n- i-did-it-message-tone.mp3\n  - https://notificationsounds.com/notification-sounds/i-did-it-message-tone\n- eventually-590.mp3\n  - https://notificationsounds.com/notification-sounds/eventually-590\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxelson%2Fnerves_live_reload","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxelson%2Fnerves_live_reload","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxelson%2Fnerves_live_reload/lists"}