Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Which libraries to use for Clojure development #1

Open
practicalli-johnny opened this issue Mar 20, 2022 · 0 comments
Open

Which libraries to use for Clojure development #1

practicalli-johnny opened this issue Mar 20, 2022 · 0 comments

Comments

@practicalli-johnny
Copy link

practicalli-johnny commented Mar 20, 2022

The challenge

Finding what libraries are available for Clojure is predominantly an internet search. There is a lack of central advice as to which of the many libraries available libraries to use and inconsistent opinions often provided.

Whilst there are many commonly used libraries, there are many commonly used alternatives. There are numerous questions in the Clojurians Slack regarding libraries, from those new to Clojure and those more experienced.

Goal

The Practicalli "Which Clojure Library" project would provide a consistent way to find and understand the purpose of Clojure libraries. Each library description would be based on commercial and community experiences, not rely on unfiltered social media content. The community would be able to update aspects of each library description to keep the information as relevant as possible.

Major Features

  • search for libraries by topic, e.g. web server, routing, html template, etc
  • consistent information for each library (integration with Git for common project information)
  • provide rationale, characteristics and usefulness of each project
  • common stacks and describe their benefits and constraints (in a consistent way)
    • link to the major libraries that compose the stack

The first phase of the project would provide a website that included the most commonly used libraries, each with a comprehensive description of their purpose and related libraries / stacks.

Library Detail Page

Each Library page should contain

  • project description: a curated description of the project that clearly defines its purpose e.g similar to some of the work by Freshcode
  • Project usefulness: an unbiased guide to the library benefits and constraints
  • Project status: stable, active, deprecated
  • Project shared repository: url, changelog, stars, followers, software license, status badges, frequency of commits, number of (active) maintainers
  • Project languages: predominant languages used to create the project
  • Documentation:
    • clj-docs available?
    • curated list of (up to date) tutorials
    • recommended getting started guide
    • standards the project provides or uses
    • code examples (where relevant)
  • support channels: slack, zulip, discord, etc (highlight active channel)
  • related libraries and technology stacks
  • alternatives: libraries providing similar features
  • community usage statistics: manual use added by community users directly or pulled from shared community user projects
  • community rating (favourite, ease of use, docs quality)
  • community comments (heavily moderated)

Which stack

Once libraries are built up to a usable level, start defining stacks that are commonly constructed from those libraries

  • commonly used stacks by high level architecture
  • project templates

Identify Clojure libraries

Use tools.deps find-libs and similar tools)

  • query maven central and clojars
  • published versions available
  • software license

Categorise libraries

Identify standard topic categories for libraries and assign each library one or more of the topics

Related Libraries & Stacks

When a user views the details of a library, they see related libraries and technical stacks that use that library

Each related library has a brief definition of its relationship

Register actual use of a library

enable developers to say they actually use the library (optionally identifying commercial use)

  • manually
  • scan project dependencies on shared Git repository

Identify commonly used transitive dependencies

Identify common 'helper' libraries to support library and project developers

Additional: Clojure Architecture Patterns & Kata

Common patterns found in Clojure solutions

  • Atomic architecture (JUXT)
  • Immutable Event Streams

Related tools

Library sources

  • Clojure.org Contrib libraries a list of additional projects managed by the Clojure maintainers showing their status
  • ClojureWerkz maintained libraries has very minimal descriptions of each library
  • clj Commons a collective of community projects and maintainers
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: No status
Development

No branches or pull requests

1 participant