On this page:
Xiden:   A Guide for Functional Dependency Management in Racket

Xiden: A Guide for Functional Dependency Management in Racket

Sage L. Gerard <sage at sagegerard dot com>

This is a guide for Xiden, a functional dependency manager for Racket.

This guide is for anyone familiar with Racket who wishes to have more options when distributing their own software, or for using third party code. When you are finished reading, you’ll understand how Xiden works, you’ll understand what it’s strengths/weaknesses are, and you’ll be better equipped to understand the reference material (See Xiden: API Reference).

To track Xiden’s progress as a project, see Project Information.

    1 Introduction

      1.1 How Xiden Fulfils Dependencies

      1.2 Why Symbolic Links?

      1.3 What’s the Catch?

      1.4 Why use Xiden when raco pkg exists?

      1.5 Why use Xiden when Guix and Nix exist?

    2 Setup

      2.1 Required Programs

      2.2 Install from Racket’s Default Package Catalog

      2.3 Install from Source

        2.3.1 Step 1: Get the Code

 Method: Use Git

 Method: Download Archive

        2.3.2 Step 2: Build The Project

    3 Defining Packages

      3.1 Create a New Definition File

      3.2 The Usual Stuff

      3.3 Declare the Version

      3.4 Declare Supported Racket Versions

      3.5 Declare Supported Operating Systems

      3.6 Package Inputs

        3.6.1 Everything is an Input

        3.6.2 Integrity Information

 Creating an Integrity Expression

        3.6.3 Authenticating Inputs

      3.7 Package Outputs

        3.7.1 Monadic Types

        3.7.2 Adding a Second Output

        3.7.3 Outputs Can Create Duplicate Data

      3.8 User-defined Metadata

      3.9 The Finished Definition

    4 Workspaces

    5 Configuration

      5.1 Plugins

      5.2 Why Allow Verbose Commands?

      5.3 Setting the Workspace

      5.4 Trusting Public Keys and Executables

    6 Command Line Interface

      6.1 Running Our First Transaction

        6.1.1 What’s with the Link?

        6.1.2 Tweaking Transaction Flags

        6.1.3 Installing Multiple Packages

        6.1.4 Creating Arbitrary Links

      6.2 Fetching Sources

      6.3 Generating Input Expressions

        6.3.1 Adjusting Generated Sources

        6.3.2 Using Sources

        6.3.3 Adjusting Generated Integrity Information

        6.3.4 Signing Generated Inputs

      6.4 Printing Reports

        6.4.1 View Path to Workspace

        6.4.2 View Installed Outputs

        6.4.3 View Issued Links

        6.4.4 View Runtime Configuration

      6.5 Overriding Inputs

      6.6 Collecting Garbage

    7 Versioning Scheme

      7.1 Editions

      7.2 Revisions

        7.2.1 Revision Numbers

        7.2.2 Revision Names

      7.3 Optional Reading: What About Semantic Versioning?

    8 Package Queries

      8.1 Simple Queries

      8.2 Specifying an Edition

      8.3 Specifying Accepted Revisions

      8.4 Marking Inclusive and Exclusive Endpoints

      8.5 Omitting Information

    9 Catalogs

    10 Perfecting Package Definitions

      10.1 Adapting Inputs to Change

        10.1.1 Declaring Catalog Dependencies

      10.2 Comissioning Packages

      10.3 Abstract and Concrete Package Inputs

    11 Security

    12 Project Information

      12.1 Contributing

        12.1.1 A Note For Programmers

        12.1.2 High-value Contributions