{"id":50911521,"url":"https://github.com/daemonless/affine","last_synced_at":"2026-06-16T10:31:39.957Z","repository":{"id":358134363,"uuid":"1240119929","full_name":"daemonless/affine","owner":"daemonless","description":"AFFiNE is an open-source, privacy-first, local-first knowledge management and collaboration tool.","archived":false,"fork":false,"pushed_at":"2026-06-15T09:27:52.000Z","size":8973,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-15T11:26:59.515Z","etag":null,"topics":["container","freebsd","knowledge-management","podman","productivity"],"latest_commit_sha":null,"homepage":null,"language":"Jinja","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/daemonless.png","metadata":{"files":{"readme":"README.j2","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-15T19:39:25.000Z","updated_at":"2026-06-15T09:27:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/daemonless/affine","commit_stats":null,"previous_names":["daemonless/affine"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/daemonless/affine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daemonless%2Faffine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daemonless%2Faffine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daemonless%2Faffine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daemonless%2Faffine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daemonless","download_url":"https://codeload.github.com/daemonless/affine/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daemonless%2Faffine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34402648,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"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":["container","freebsd","knowledge-management","podman","productivity"],"created_at":"2026-06-16T10:31:39.083Z","updated_at":"2026-06-16T10:31:39.949Z","avatar_url":"https://github.com/daemonless.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# {{ icon }} {{ title }}\n\n[![Build Status](https://img.shields.io/github/actions/workflow/status/daemonless/affine/build.yaml?style=flat-square\u0026label=Build\u0026color=green)](https://github.com/daemonless/affine/actions)\n[![Last Commit](https://img.shields.io/github/last-commit/daemonless/affine?style=flat-square\u0026label=Last+Commit\u0026color=blue)](https://github.com/daemonless/affine/commits)\n\n{{ description }}\n\n| | |\n|---|---|\n| **Registry** | `{{ registry }}/affine` |\n| **Source** | [{{ upstream_url }}]({{ upstream_url }}) |\n| **Website** | [{{ web_url }}]({{ web_url }}) |\n\n## Version Tags\n\n| Tag | Description | Best For |\n| :--- | :--- | :--- |\n| `latest` | **Upstream Binary**. Built from official release. | Most users. Matches Linux Docker behavior. |\n\n## Prerequisites\n\nBefore deploying, ensure your host environment is ready. See the [Quick Start Guide](https://daemonless.io/guides/quick-start) for host setup instructions.\n\n## Deploy\n\n**1.** Save as `.env`:\n\n```env { data-zip-bundle=\"affine-podman\" data-zip-filename=\".env\" }\nDB_DATA_LOCATION=@CONTAINER_CONFIG_ROOT@/@AFFINE_CONFIG_PATH@/postgres\nAFFINE_DATA_LOCATION=@CONTAINER_CONFIG_ROOT@/@AFFINE_CONFIG_PATH@/data\nDB_PASSWORD=changeme\nAFFINE_SERVER_HOST=affine.example.com\nAFFINE_SERVER_HTTPS=false\n```\n\n**2.** Save as `compose.yaml`:\n\n```yaml { data-zip-bundle=\"affine-podman\" data-zip-filename=\"compose.yaml\" }\nname: affine\n\nservices:\n  affine:\n    image: @REGISTRY@/affine:latest\n    container_name: affine\n    network_mode: host\n    restart: unless-stopped\n    environment:\n      DATABASE_URL: postgresql://affine:${DB_PASSWORD}@localhost:5432/affine\n      REDIS_SERVER_HOST: localhost\n      AFFINE_SERVER_EXTERNAL_URL: http${AFFINE_SERVER_HTTPS:+s}://${AFFINE_SERVER_HOST}\n      AFFINE_INDEXER_ENABLED: \"false\"\n    volumes:\n      - ${AFFINE_DATA_LOCATION}:/config\n    depends_on:\n      - redis\n      - postgres\n\n  redis:\n    image: @REGISTRY@/redis:latest\n    container_name: affine_redis\n    network_mode: host\n    restart: unless-stopped\n\n  postgres:\n    image: @REGISTRY@/postgres:latest\n    container_name: affine_postgres\n    network_mode: host\n    restart: unless-stopped\n    annotations:\n      org.freebsd.jail.allow.sysvipc: \"true\"\n    environment:\n      POSTGRES_USER: affine\n      POSTGRES_PASSWORD: ${DB_PASSWORD}\n      POSTGRES_DB: affine\n      POSTGRES_EXTENSIONS: pgvector\n    volumes:\n      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data\n```\n\n**3.** Deploy:\n\n```bash\nmkdir -p @CONTAINER_CONFIG_ROOT@/@AFFINE_CONFIG_PATH@/postgres @CONTAINER_CONFIG_ROOT@/@AFFINE_CONFIG_PATH@/data\nchown -R @PUID@:@PGID@ @CONTAINER_CONFIG_ROOT@/@AFFINE_CONFIG_PATH@\npodman-compose up -d\n```\n\nAccess AFFiNE at: **http://your-host:3010**\n\n\u003cdiv class=\"placeholder-settings-panel\"\u003e\u003c/div\u003e\n\n## Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `DATABASE_URL` | PostgreSQL connection string |\n| `REDIS_SERVER_HOST` | Redis hostname (default: `localhost`) |\n| `AFFINE_SERVER_EXTERNAL_URL` | Public URL for generated links |\n| `AFFINE_INDEXER_ENABLED` | Enable document indexer (default: `false`) |\n\n## FreeBSD Notes\n\n### PostgreSQL Shared Memory\n\nPostgreSQL requires System V IPC. The compose file includes the required annotation:\n\n```yaml\nannotations:\n  org.freebsd.jail.allow.sysvipc: \"true\"\n```\n\n### Network Mode\n\nThe stack uses `network_mode: host` — all services communicate via localhost. Only port `3010` needs to be exposed externally.\n\n## Management\n\n```bash\n# View logs\npodman-compose logs -f\npodman logs -f affine\n\n# Restart\npodman-compose restart\n\n# Update\npodman-compose pull \u0026\u0026 podman-compose up -d\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaemonless%2Faffine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaemonless%2Faffine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaemonless%2Faffine/lists"}