MCPcopy Index your code
hub / github.com/gomods/athens

github.com/gomods/athens @v0.18.0 sqlite

repository ↗ · DeepWiki ↗ · release v0.18.0 ↗
14,822 symbols 55,086 edges 328 files 302 documented · 2%
README

Welcome To Athens, Gophers!

Athens Banner

Build Status GoDoc Go Report Card codecov Docker Pulls PRs Welcome Open Source Helpers

Welcome to the Athens project! Athens is an open source, enterprise ready implementation of the Go Module proxy for the Go Modules download API.

See our documentation site https://docs.gomods.io for more details on the project.

We are looking for people who would like to become core maintainers of this project. Please see issue #1734 for more details.

Project Status

Development teams at several companies are using Athens in their everyday development workflows.

This means that they are running their own Athens servers, hooking them up to their own storage backends (see here for the list of storage backends that Athens supports), and configuring their local Go development environments to use that Athens server.

We encourage you to try it out, consider using it in your development workflow, and letting us know if you are using it by adding a comment to this GitHub issue.

More Details Please!

The proxy implements the Go modules download protocol.

Athens proxies are highly configurable, so they can work for lots of different deployments. For example, proxies support a wide variety of storage drivers including:

  • Cloud blob storage services
  • MongoDB
  • Content distribution networks (CDNs)
  • Shared disk
  • In-memory

Development

See DEVELOPMENT.md for details on how to set up your development environment and start contributing code.

Speaking of contributing, read on!

Contributing

If you use Athens for your development workflow, we hope that you'll consider contributing back to the project. Athens is widely used and has plenty of interesting work to do, from technical challenges to technical documentation to release management. We have a wonderful community that we would love you to be a part of. Absolutely everyone is welcome.

The quickest way to get involved is by filing issues if you find bugs or find that you need Athens to do something it doesn't.

If you'd like to help us tackle some of the technical / code challenges and you're familiar with the GitHub contribution process, you'll probably be familiar with our process for contributions. You can optionally find or submit an issue, and then submit a pull request (PR) to fix that issue. See here for more of the project-specific details.

If you're not familiar with the standard GitHub contribution process, which Athens mostly follows, please see this section of our documentation to learn how to contribute. You can also take advantage of @bketelsen's great video on how to contribute code. The information in these documents and videos will help you not only with this project, but can also help you contribute to many other projects on GitHub.

If you decide to contribute but aren't sure what to work on, we have a well maintained list of good first issues that you should look at. If you find one that you would like to work on, please post a comment saying "I want to work on this", and then it's all yours to begin working on.

We do recommend that you choose one of the issues on the above list, but you may also consider a different one from our entire list. Many of the issues on that list are more complex and challenging.

Before you do start getting involved or contributing, we want to let you know that we follow a general philosophy in how we work together, and we'd really appreciate you getting familiar with it before you start.

It's not too long and it's ok for you to "skim" it (or even just read the first two sections :smile:), just as long as you understand the spirit of who we are and how we work.

Getting Involved Without Contributing Pull Requests or Issues

If you're not ready to contribute code yet, there are plenty of other great ways to get involved:

  • Come talk to us in the #athens channel in the Gophers slack. We’re a really friendly group, so come say hi and join us! Ping me (@arschles on slack) in the channel and I’ll give you the lowdown
  • Get familiar with the technology. There's lots to read about. Here are some places to start:

Built on the Shoulders of Giants

The Athens project would not be possible without the amazing projects it builds on. Please see SHOULDERS.md to see a list of them.

Coding Guidelines

We all strive to write nice and readable code which can be understood by every person of the team. To achieve that we follow principles described in Brian's talk Code like the Go team.

Code of Conduct

This project follows the Contributor Covenant (English version here) code of conduct.

If you have concerns, notice a code of conduct violation, or otherwise would like to talk about something related to this code of conduct, please reach out @arschles on the Gophers Slack.


Athens banner attributed to Golda Manuel

Extension points exported contracts — how you extend this code

UpstreamLister (Interface)
UpstreamLister retrieves a list of available module versions from upstream i.e. VCS, and a Storage backend. [15 implementers]
pkg/module/upstream_lister.go
Deleter (Interface)
Deleter deletes module metadata and its source from underlying storage. [7 implementers]
pkg/storage/deleter.go
Stasher (Interface)
Stasher has the job of taking a module from an upstream entity and stashing it to a Storage Backend and Index. It also r [14 …
pkg/stash/stasher.go
Indexer (Interface)
Indexer is an interface that can process new module@versions and also retrieve 'limit' module@versions that were indexed [4 …
pkg/index/indexer.go
Protocol (Interface)
Protocol is the download protocol which mirrors the http requests that cmd/go makes to the proxy. [3 implementers]
pkg/download/protocol.go
Entry (Interface)
Entry is an abstraction to the Logger and the underlying slog logger so that *Logger always creates an Entry copy which [2 …
pkg/log/entry.go
Fetcher (Interface)
Fetcher fetches module from an upstream source. [4 implementers]
pkg/module/fetcher.go
Cataloger (Interface)
Cataloger is the interface that lists all the modules and version contained in the storage. [6 implementers]
pkg/storage/cataloger.go

Core symbols most depended-on inside this repo

push
called by 4479
docs/themes/hugo-theme-relearn/static/js/swagger-ui/swagger-ui-bundle.js
get
called by 3021
docs/themes/hugo-theme-relearn/static/js/swagger-ui/swagger-ui-bundle.js
u
called by 1330
docs/themes/hugo-theme-relearn/static/js/swagger-ui/swagger-ui-bundle.js
append
called by 1230
docs/themes/hugo-theme-relearn/static/js/swagger-ui/swagger-ui-bundle.js
r
called by 1203
docs/themes/hugo-theme-relearn/static/js/mathjax/tex-svg-full.js
r
called by 1193
docs/themes/hugo-theme-relearn/static/js/mathjax/tex-chtml-full.js
set
called by 1097
docs/themes/hugo-theme-relearn/static/js/swagger-ui/swagger-ui-bundle.js
keys
called by 1088
docs/themes/hugo-theme-relearn/static/js/swagger-ui/swagger-ui-bundle.js

Shape

Function 12,552
Method 1,471
Class 648
Struct 122
Interface 15
TypeAlias 9
FuncType 5

Languages

TypeScript95%
Go5%

Modules by API surface

docs/themes/hugo-theme-relearn/static/js/mermaid.min.js8,829 symbols
docs/themes/hugo-theme-relearn/static/js/swagger-ui/swagger-ui-bundle.js3,393 symbols
docs/themes/hugo-theme-relearn/static/js/swagger-ui/swagger-ui-standalone-preset.js373 symbols
docs/themes/hugo-theme-relearn/static/js/lunr/wordcut.js139 symbols
docs/themes/hugo-theme-relearn/static/js/theme.js85 symbols
docs/themes/hugo-theme-relearn/static/js/d3/d3-selection.min.js69 symbols
docs/themes/hugo-theme-relearn/static/js/js-yaml.min.js57 symbols
docs/themes/hugo-theme-relearn/static/js/lunr/lunr.tr.min.js55 symbols
docs/themes/hugo-theme-relearn/static/js/d3/d3-color.min.js44 symbols
docs/themes/hugo-theme-relearn/static/js/d3/d3-transition.min.js40 symbols
pkg/download/protocol_test.go34 symbols
docs/themes/hugo-theme-relearn/static/js/mathjax/node-main.js32 symbols

Dependencies from manifests, versioned

cel.dev/exprv0.25.1 · 1×
cloud.google.com/gov0.123.0 · 1×
cloud.google.com/go/auth/oauth2adaptv0.2.8 · 1×
cloud.google.com/go/compute/metadatav0.9.0 · 1×
cloud.google.com/go/monitoringv1.27.0 · 1×
cloud.google.com/go/storagev1.62.1 · 1×
cloud.google.com/go/tracev1.14.0 · 1×
contrib.go.opencensus.io/exporter/stackdriverv0.13.14 · 1×

Datastores touched

modulesCollection · 1 repos
(mongodb)Database · 1 repos
athensDatabase · 1 repos

For agents

$ claude mcp add athens \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact