Darke Files is a version control and file synchronization system. Its goal is to scale seamlessly between the two extremes:

  • a full-featured version control system. It lets you work with branches and inspect and act on a rich version history. It works like version control systems programmers use today, for example Git.
  • a file synchronization tool. It uploads your changed files to cloud storage so that you can forget it exists in the day-to-day operation. It works like cloud synchronization services everyone else uses, for example Dropbox or Google Drive.

Darke Files can scale between those two extremes in a single repository. This enables teams with a wide range of requirements for such a system to work on the same project.


Features

Works with every file

  • Regardless whether you're using small text files or huge binary files, Darke Files handles them all.
  • No matter what OS you're using, Darke Files won't try to change your line endings out from under you.

Quick to use or advanced even in a CLI

  • Synchronize your changes with the server with one command with daf sync if you don't care about the details.
  • Darke Files supports all the details with individual commits, refs (branches and tags) on both client and server, full-featured history, and merges when you need them.

Leaves your files alone

  • Darke Files knows its limits and won't change your files.
  • You know better how to solve merge conflicts. Darke Files lets you handle it.

Powerful, customizable, machine-readable access to a repository

  • daf info and its powerful template language lets you read out everything from a repository.

Can I start using this right now?

Darke Files is still alpha software so please don't use it in production. Additionally Darke Files is missing many missing many features one might expect from a version control system (or a software forge, or a devops platform). Keep good backups of your data if you decide to try it out.


Changelog

0.5.0 - 2022-12-15

  • Features
    • Added export-to-git command
    • Added delta / incremental Git import and export functionality
    • Added Visual Studio Code extension
    • Added blob, path and statusVerbose functions to repo info command
    • Added webhook functionality on server and configure-webhook command
  • Changes
    • import-git command renamed to import-from-git
    • The info command now adds a trailing line break when not using a template file and writing the result to a file
  • Fixes
    • Multiple merges into a single commit now correctly keep all parents
    • Fix several edge cases in import-from-git command
    • Fix some files not correctly shown as ignored in status command
    • Fix filepaths with backslash not working in ignores and restore commands

0.4.0 - 2022-11-01

  • Features
    • Added Scalable Repository feature
    • Added daf scale command to configure exclusion rules
    • Added daf cleanup command to run garbage collection on repository
    • Added daf download-commit command
    • Added --current flag to daf clone
    • Added --all flag to daf push
  • Changes
    • Everything can now handle a locally incomplete repository
    • daf log and daf switch inform you if the operation touches files not available locally
  • Fixes
    • Fixed output of daf push command when ref does not exist on server
    • Fixed edge case in files matcher (as used in ignores feature)
    • Fixed edge case in daf pull which didn't use --server-ref option when set

0.3.2 - 2022-09-18

  • Features
    • Added daf ignores command for easier management of ignored files and directories
  • Changes
    • Improved ignore pattern functionality, now supports ** pattern
  • Fixes
    • Fixed output of daf status command, including with --debug flag

0.3.1 - 2022-08-31

  • Features
    • Add option to add TOTP as second factor to login

0.3.0 - 2022-07-23

  • Features
    • Registration on server with invite codes with darke register
    • Login on server with darke login and darke logout
    • Ability to restrict write access to a repository with darke files configure-roles
    • darke serverctl command
    • Metrics about users and sessions at /admin/metrics
  • Fixes
    • Made maintenance job log at /admin/maintenance clearer

0.2.1 - 2022-06-19

  • Features
    • Added status function to daf info
    • Added --keep-changes flag to daf switch
    • Enable upload progress bars
    • Added admin endpoint to server at /admin including metrics at /admin/metrics
    • Automatically renew data protocol certificates
  • Changes
    • Specify minimum supported TLS version of data protocol as TLS 1.2
    • Guard better against path traversal attacks
  • Fixes
    • Clone command overwriting an already existing local repo
    • A few visual bugs of the progress bar
    • Server not showing anything when a directory is empty
    • Various fixes related to repo metadata on the server

0.2.0 - 2022-05-21

  • Features
    • Added daf download-file and daf upload-file commands
    • Added daf info command
    • Added ignoring files with daf ignore and daf ignore -p
    • Added option to specify file in darke config
  • Changes
    • Made TLS for data protocol mandatory using self-signed certificates
    • Major improvements to diffing and merging
    • Major improvements to daf sync
  • Fixes
    • Fixed edge cases everywhere

0.1.0 - 2021-10-03

  • Initial release

Recent Activity

With the release of Darke Files 0.5.0, I included a webhook feature that lets you configure Darke Files server to post some info to a specified URL whenever a new commit is pushed. I wanted to integrate Darke Files into a CI system but I didn't find any that fit my needs, so the webhook was the only feature you got. I went into more detail back when I released that version here https://discord.com/channels/239737791225790464/1053016918023487549/1053018234628087828

Times have changed and now I have a build server that can do the things I want it to do. Aura now contains an endpoint specific to the webhook payloads Darke Files server sends out. You just have to map between the two systems in Aura's config and provide the missing pieces of information. You can read more about the integration in the expanded Aura README and the submit-darke docs.

The screenshot montage contains (from top to bottom):

  • the repository on Darke Files server
  • the project in Aura
  • the config for the integration in Aura

Yes, this is a crossover showcase-post.
https://darke.handmade.network/ | https://darkedev.itch.io/darke-files | &darke
https://handmade.network/p/431/aura/ | https://github.com/unnamedtiger/aura | &aura

I've released version 0.5.0 of Darke Files, my version control system.
It features

  • completely rewritten Git import feature, new Git export feature, and the option to do delta / incremental imports and exports
  • a Visual Studio Code Extension for a quick overview on the state of the files in your repository
  • a webhook feature so you can trigger other systems after a commit
    Hop in the thread for a lot more info.

https://darke.handmade.network | &darke

I've worked my way through TypeScript and especially the Visual Studio Code Extension API the past week to build such an extension for Darke Files.
It populates the Source Control menu with the status of the files in your repository and clicking on them brings up the diff view you're probably familiar with. Additionally the extension colors filenames in the editor tabs according to the file's status and adds colored gutters in a text editor to show you which lines have changed.
Replacing the CLI is explicitly a non-goal for the extension, so you'll still be using the CLI to commit changes but the extension will help you stay on top of the status of your repository and let you review changes easily before committing.
All this - and more - in the next release. &darke

Finished up work on improving Git interoperability in Darke Files today. I've rewritten the Git importer from the ground up which fixed a few bugs and uncool edge cases that were still hiding in the code. I've added a command to export a Darke Files repository to Git so you're not stuck with this version control system and can mirror your code to public software forges. And additionally both commands now support delta operations, ie. the option to only im-/export the data that changed since the last im-/export. All this - and more - in the next release. &darke

I've just released version 0.4.0 of Darke Files. The big new feature is the Scalable Repository. It lets you select exactly which older files should be saved on your computer and which should only be available on the server. Learn more in the thread.

The screenshot shows how you would configure your repository to exclude all files older than 30 days and all assets older than 7 days from your computer.

https://darke.handmade.network/ | &darke

In the next version of Darke Files you'll be able to decide exactly what files and commits to keep on your local machine. When trying to access something you don't have downloaded the CLI will let you know and helpfully spit out the command you can use to get it. In this example I've decided I only want to keep one commit in my local repository and so daf log ends up pretty short. &darke

I've just released version 0.3.2 of Darke Files. It comes with two improvements to ignoring files:
First, an all-new daf ignores command for easy viewing and editing of all file patterns you ignored (see screenshot).
Second, a rewritten-from-scratch pattern matching algorithm which now also supports patterns with ** wildcards.

https://darke.handmade.network | &darke

I added support for two-factor authentication with TOTP to Darke Files (0.3.1 just released) so if that's something you want in your security model the new release is for you. Simply get started with darke account register-mfa.

https://darke.handmade.network/ | &darke

I've released version 0.3.0 of Darke Files, my version control system. Key new features in 0.3.0 are registering accounts on a server, login and permission management for repos. Find the full changelog on the project page. Download: https://darkedev.itch.io/darke-files | Project page: https://darke.handmade.network/ | &darke

I'm currently working on repository permissions for Darke. With the next release you - as the owner of a repository - will be able to choose who may write to your repository. When write access is enforced you need to be logged-in when writing to the repo. &darke

I've released version 0.2.1 of Darke, my version control system. It's a bit of an incremental update containing fixes and additions suggested by y'all. I've also made changes to make the inner workings clearer, for example with the new /admin page on the server, pictured below. Find more info, the complete changelog, and download link over at https://darke.handmade.network/ &darke

I've just released the new version of my version control system Darke Files.

Darke Files' goal - if you haven't heard - is to scale seamlessly between a full-featured version control system and an easy-to-use file synchronization tool in a single repository. You can find more info about the programs features on the project page.

Since the first release I've done a bunch of clean-up and bug fixes, but more importantly major improvements. I've completely rewritten daf sync which gets your changes to the server easily in a single command. I've also upgraded the algorithm for merging changes to a three-way merge which allows it to deal with a few more situations automatically. The big new feature is daf info which I've already teased a week ago (see snippets on project page); with it you can process a template file (written in Go template syntax) with access to the info contained in a repository to extract whatever output you want from the repository. A list of all changes is available in the changelog file in the download package.

Download: https://darkedev.itch.io/darke-files

More info: https://handmade.network/p/213/darke/

&darke

This is probably the single most important / powerful feature in Darke. Even with everything else I have planned. &darke

With the amount of tasks in the 0.2.0 milestone for Darke actually going down I've spent the last few days unifying and improving the design system. Therefore I have finally produced something visual to show again. Below are "covers" so that the Darke products can look good on the virtual shelf. &darke

I love my beta testers for being able to put a whole bug report into a single screenshot. I'll have to make a pass over errors, not just this one but all of them. &darke

I've been working on a version control system for the last few months. The goal is to have a system that can handle small text files as well as huge binary files while being as full-featured as Git if you want it to or as easy to use as Dropbox if you don't.

Recently I've added a few web pages to the server so I finally have something pretty to show off that isn't just the screenshot of a terminal. The image shows the history of one of my testing repositories. &darke