{"id":24541171,"url":"https://github.com/dchristl/macless-haystack","last_synced_at":"2025-10-03T17:30:34.159Z","repository":{"id":65582076,"uuid":"589547242","full_name":"dchristl/macless-haystack","owner":"dchristl","description":"Create your own AirTag with  OpenHaystack, but without the need to own an Apple device","archived":false,"fork":false,"pushed_at":"2024-04-22T12:50:41.000Z","size":71196,"stargazers_count":195,"open_issues_count":21,"forks_count":41,"subscribers_count":13,"default_branch":"main","last_synced_at":"2024-04-22T13:03:46.496Z","etag":null,"topics":["esp32","findmy","openhaystack"],"latest_commit_sha":null,"homepage":"","language":"Dart","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/dchristl.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":"2023-01-16T11:30:55.000Z","updated_at":"2024-05-01T07:38:03.473Z","dependencies_parsed_at":"2024-05-01T07:50:56.186Z","dependency_job_id":null,"html_url":"https://github.com/dchristl/macless-haystack","commit_stats":null,"previous_names":["dchristl/macless-haystack"],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dchristl%2Fmacless-haystack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dchristl%2Fmacless-haystack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dchristl%2Fmacless-haystack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dchristl%2Fmacless-haystack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dchristl","download_url":"https://codeload.github.com/dchristl/macless-haystack/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235161516,"owners_count":18945537,"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":["esp32","findmy","openhaystack"],"created_at":"2025-01-22T18:17:16.561Z","updated_at":"2025-10-03T17:30:34.154Z","avatar_url":"https://github.com/dchristl.png","language":"Dart","readme":"# Macless-Haystack\n\n![last commit](https://img.shields.io/github/last-commit/dchristl/macless-haystack)\n[![Docker Hub](https://img.shields.io/badge/Docker%20Hub-Info-blue)](https://hub.docker.com/r/christld/macless-haystack)\n[![Docker Pulls](https://img.shields.io/docker/pulls/christld/macless-haystack)](https://hub.docker.com/r/christld/macless-haystack)\n\n\nThis project tries to unify several projects for an easy-to-use and easy-to-setup custom FindMy network. The goal is to run a FindMy network without the need to own a real Mac or virtual Mac. Also you don't have to install the mail plugin or openhaystack itself. (As needed by the original OpenHaystack project).\n\n\u003cimg src=\"images/dashboard_web.png\" width=\"500\" /\u003e\n\n## Table of Contents\n\n- [Setup](#setup)\n  - [Prerequisites](#prerequisites)\n  - [Hardware setup](#hardware-setup)\n  - [Server setup](#server-setup)\n  - [Frontend setup](#frontend-setup)\n- [Problems / Issues / Questions](#problems--issues--questions)\n- [Included projects and changes](#included-projects-and-changes)\n- [Screenshots](#screenshots)\n\n## Setup\n\nIn this section, you will find a step-by-step guide on how to set up your own Macless-Haystack network.\n\n\u003cdetails\u003e\u003csummary\u003e1. Prerequisites\u003c/summary\u003e\n\n## Prerequisites\n\n- [Docker](https://www.docker.com/) installed\n- [Python3](https://www.python.org/) and [pip3](https://pypi.org/project/pip/) installed\n- Apple-ID with 2FA enabled. Only sms/text message as second factor is supported!\n\n---\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e2. Hardware setup\u003c/summary\u003e\n\n## Hardware setup\n\n1. Head over to the [releases](https://github.com/dchristl/macless-haystack/releases/latest) section and download `generate_keys.py` and your needed firmware (ESP32 or NRF5x) zip file.\n\n2. Execute the `generate_keys.py` script to generate your keypair. (Note: dependency `cryptography` is needed. Install it with `pip install cryptography`)\n\n3. Unzip the firmware and flash it to your device (see [Install ESP32-firmware with your key](firmware/ESP32/README.md) or [Install NRF5x-firmware with your key](firmware/nrf5x/README.md))\n\n###### Note: In general, any OpenHaystack-compatible device or its firmware is also compatible with Macless-Haystack (i.e. [the ST17H66](https://github.com/biemster/FindMy/tree/main/Lenze_ST17H66)). Typically, only the Base64-encoded advertisement key is required, which can be found in the .keys file after key generation\n\n---\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e3. Server setup\u003c/summary\u003e\n\n## Server setup\n\n1. Create a new docker network\n\n```bash\ndocker network create mh-network\n```\n\n2. Install [Anisette Server](https://github.com/Dadoum/anisette-v3-server):\n\n```bash\ndocker run -d --restart always --name anisette -p 6969:6969 --volume anisette-v3_data:/home/Alcoholic/.config/anisette-v3 --network mh-network dadoum/anisette-v3-server\n```\n\n3. Start and set up your Macless Haystack endpoint in interactive mode:\n\n```bash\ndocker run -it --restart unless-stopped --name macless-haystack -p 6176:6176 --volume mh_data:/app/endpoint/data --network mh-network christld/macless-haystack\n```\n\n###### You will be asked for your Apple-ID, password and your 2FA. If you see `serving at port 6176 over HTTP` you have all set up correctly\n\n4. Restart your server now in background by restarting it in an other terminal\n\n```bash\ndocker restart macless-haystack\n```\n\n---\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003e4. Frontend setup\u003c/summary\u003e\n\n## Frontend setup\n\nYou can either use the frontend provided by GitHub, host the webserver for yourself or use the Android application\n\n- *Optional*: Mobile: Install application\n- *Optional*: Host: Browse to [Github Page](https://dchristl.github.io/macless-haystack/) (s. [Notes on SSL usage](FAQ.md#how-can-i-use-ssl-if-the-endpoint-runs-on-another-machine-than-the-ui))\n- Import PREFIX_devices.json to your application\n- If you run the frontend not on the same machine as your endpoint, you have to configure your Url in the settings\n\n---\n\n\u003c/details\u003e\n\n### Problems / Issues / Questions\n\nIf you have any problems, issues or questions, please check the [FAQ](FAQ.md) first. If this doesn't help you, create a new issue.\n\n## Included projects and changes\n\nIncluded projects are (Credits goes to them for the hard work):\n\n- The original [Openhaystack](https://github.com/seemoo-lab/openhaystack)\n  - Stripped down to the mobile application (Android) and ESP32 firmware. ESP32 firmware combined with FindYou project and optimizations in power usage.\n  - Android application\n  - ESP32 firmware\n- [Biemster's FindMy](https://github.com/biemster/FindMy)\n  - Customization in keypair generator to output an array for the ESP32 firmware and a json for import in the Android application.\n  - The standalone python webserver for fetching the FindMy reports\n- [Positive security's Find you](https://github.com/positive-security/find-you)\n  - ESP32 firmware customization for battery optimization\n- [acalatrava's OpenHaystack-Fimware alternative](https://github.com/acalatrava/openhaystack-firmware)\n  - NRF5x firmware customization for battery optimization\n\n## Screenshots\n\n\u003cdetails\u003e\u003csummary\u003eAndroid App\u003c/summary\u003e\n\n### Android\n\n![Dashboard](images/history_mobile.png)\n![Dashboard](images/history_mobile_2.png)\n![Dashboard](images/accessories_mobile.png)\n![Dashboard](images/settings_mobile.png)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eWebsite\u003c/summary\u003e\n\n### Web\n\n![Dashboard](images/history_web.png)\n![Dashboard](images/history_web_light.png)\n![Dashboard](images/accessories_web.png)\n\n\u003c/details\u003e\n\n## Contributing\n\nPull requests are welcome. Please fork from dev-branch. For major changes, please open an issue first to discuss what you would like to change.\n\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)\n\n## Disclaimer\n\nThis repository is for research purposes only, the use of this code is your responsibility.\n\nI take NO responsibility and/or liability for how you choose to use any of the source code available here. By using any of the files available in this repository, you understand that you are AGREEING TO USE AT YOUR OWN RISK. Once again, ALL files available here are for EDUCATION and/or RESEARCH purposes ONLY.\n","funding_links":[],"categories":["Dart"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdchristl%2Fmacless-haystack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdchristl%2Fmacless-haystack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdchristl%2Fmacless-haystack/lists"}