Self-hosted service
Sync-in/server avatar
Sync-in/server

Sync-in Server: Self-Hosted File Storage and Team Collaboration

Sync-in · Sovereign platform for file storage, sharing, synchronization, and collaboration.

1,789 stars140 forksTypeScriptAGPL-3.0

At a glance

What is it?
Sync-in is a self-hosted platform for file storage, synchronization, and team collaboration, licensed under AGPL-3.0 and deployable via Docker or npm on Node.js 22. It keeps files directly readable on the host filesystem while adding OIDC and LDAP authentication, online document editing, full-text search, and WebDAV support.
Who is it for?
Sync-in is a reasonable choice for organizations that need to host their own file storage with document collaboration and fine-grained sharing controls, and that can accept the AGPL-3.0 license terms. It is not the right choice for teams that want a SaaS product without infrastructure management, or for environments where the AGPL copyleft requirements would affect proprietary internal tooling.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Sync-in Solves and Who It Is For

Self-hosting file storage has two common motivations: data sovereignty and cost control. Teams at organizations with strict data residency requirements, regulated industries, or simply a preference for not sending files to a third-party cloud service need a platform they can run on their own infrastructure. Sync-in targets this need directly.

The README summarizes the design goal as staying fast, lightweight, and centered on your data, keeping files readable on your filesystem while adding collaboration features only where they are needed. That last phrase is a distinguishing constraint: unlike some self-hosted platforms that store files in a database or object store, Sync-in keeps files as ordinary files on the host, readable without the application running.

The primary audience is teams and small-to-medium organizations that want functionality comparable to a cloud storage and collaboration tool but running entirely on-premise or in a private cloud. Desktop and CLI clients for Windows, macOS, and Linux extend the platform to non-browser workflows.

Authentication, Permissions, and Sharing Architecture

Sync-in provides multiple authentication paths. Local accounts are the baseline. OIDC (OpenID Connect) integration allows single sign-on with identity providers such as Keycloak, Authentik, or any OIDC-compliant provider. LDAP integration connects to directory services like Active Directory. MFA (multi-factor authentication), recovery codes, and application passwords round out the authentication surface.

The permission model is organized around Spaces: a space is a bounded area where files and folders live, with its own set of roles and members. Guests can be invited to specific spaces without requiring a full account. Personal groups allow users to create reusable sets of collaborators. Fine-grained permissions control what each role can read, write, share, or delete.

Sharing is handled through protected public links. The README lists access limits, expiration dates, and passwords as configurable options per share link, and specifies that the owner retains full control over shared content. This is a different model from platforms that generate permanent, unrevocable public URLs.

Deploying Sync-in with Docker

The Dockerfile in the repository uses a multi-stage build. The build stage starts from node:24-alpine, installs build dependencies, runs npm ci and npm run build, then resets and reinstalls only production dependencies. The final runtime image is built from node:24-alpine with su-exec added:

dockerfile
FROM node:24-alpine AS sync-in
RUN apk add --no-cache su-exec && \
    mkdir -p /app/data /app/environment
WORKDIR /app

The server exposes port 8080. The PUID and PGID environment variables default to 8888 and control the user context for the running process. A health check polls the /healthz/ready endpoint at 30-second intervals with a 5-second timeout, starting after 60 seconds to allow initialization.

The README links a Docker setup guide at sync-in.com/docs/setup-guide/docker. The npm installation path is documented at sync-in.com/docs/setup-guide/npm and requires Node.js 22 or later, which the package.json engines field enforces. The os field in package.json marks Windows as unsupported for the npm server installation, though the Docker image works on any host that can run Linux containers.

Document Editing, Full-Text Search, and WebDAV

Online collaborative document editing requires one of three supported integrations: Collabora Online, OnlyOffice, or Euro-Office. These are external services that Sync-in connects to; the README lists them as features but does not describe the configuration steps in the README itself, referring to the documentation site instead.

Full-text search indexes the content of documents, not just filenames. The README specifies deep document content indexing across common office and document formats. This means a search for a phrase inside a Word document or a PDF returns the file in results rather than requiring an exact filename match. The implementation uses an embedded search component rather than requiring an external Elasticsearch or similar service, based on the absence of any external search service in the Docker build.

WebDAV support makes Sync-in accessible from file explorers, network drive mounts, mobile apps, and any third-party client that speaks the WebDAV protocol. This is relevant for teams that want to access Sync-in storage from a Windows Explorer network drive, a macOS Finder mount, or a mobile files app without using the dedicated desktop client.

Limitations and When Sync-in Is Not the Right Choice

The AGPL-3.0 license has significant implications for some deployment contexts. AGPL requires that anyone who runs a modified version of Sync-in over a network must make the modified source code available. For organizations building internal tooling on top of Sync-in that they do not intend to open-source, this is a license constraint worth verifying with legal counsel.

Online document editing requires running Collabora Online, OnlyOffice, or Euro-Office as a separate service. Teams that want out-of-the-box document editing without deploying a companion editing service need to factor that operational overhead into their decision.

The npm server installation explicitly excludes Windows (the os field in package.json lists !win32), which means Windows Server environments cannot use the npm path. Docker on Windows with WSL2 is the workaround, but it adds another layer of infrastructure.

A comparable alternative is Nextcloud, a PHP-based self-hosted platform that covers overlapping functionality including file storage, WebDAV, OIDC, and document editing integrations. Nextcloud uses a PHP runtime and a traditional database backend, whereas Sync-in is TypeScript on Node.js with files stored directly on the filesystem. The architectural difference matters for teams with existing PHP infrastructure versus Node.js expertise.

Maintenance and License

The latest release is v2.5.2, published on 2026-09-21. Previous releases were v2.5.1 (2026-09-14) and v2.5.0 (2026-09-02), suggesting a roughly two-week release cadence for recent patch versions. The last repository push was also on 2026-09-21.

The project is licensed under AGPL-3.0-or-later. Sync-in is a registered trademark with a trademark policy linked from the README. The repository includes a CLA.md (Contributor License Agreement) that contributors must accept before submitting pull requests.

The server package is listed on Docker Hub as syncin/server and on npm as @sync-in/server. The Docker-Sponsored Open Source Program and SignPath.io (for Windows code signing) are listed as sponsors in the README.

Editorial conclusion

Sync-in is a reasonable choice for organizations that need to host their own file storage with document collaboration and fine-grained sharing controls, and that can accept the AGPL-3.0 license terms. It is not the right choice for teams that want a SaaS product without infrastructure management, or for environments where the AGPL copyleft requirements would affect proprietary internal tooling. Before deploying, verify that Collabora Online, OnlyOffice, or Euro-Office is available in your environment if you need in-browser document editing, since those integrations are listed as features but require their own setup. The current release is v2.5.2 from 2026-09-21.

Frequently asked questions

How do I deploy Sync-in with Docker?

The README links a Docker setup guide at sync-in.com/docs/setup-guide/docker. The repository includes a Dockerfile that builds a production image exposing port 8080, with PUID and PGID environment variables for user context and a built-in health check against the /healthz/ready endpoint.

Does Sync-in support LDAP authentication?

The README lists LDAP as a supported authentication method alongside local accounts, OIDC, MFA, recovery codes, and application passwords.

Which document editors does Sync-in integrate with for online editing?

The README lists Collabora Online, OnlyOffice, and Euro-Office as supported integrations for online document editing. These are external services that must be available and configured separately.

Official sources

  1. License: AGPL-3.0
  2. Project website
  3. README
  4. Releases
  5. Sync-in/server on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/sync-in-server.svg)](https://hysenlabs.com/projects/sync-in-server)