HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
JuliaPackaging
PkgServer.jl
Julia2020–2020
JuliaPackaging / PkgServer.jl

PkgServer.jl

Discover this repository through its Hacker News conversations.

2Distinct people
2Mentions
0Explicit recommenders
45GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A public description has not been verified.

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 1:49:46 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by 3-hour interval2 dated mentions

Observed mentions: 2020-08-03 18:16:37 UTC to 2020-08-07 16:18:37 UTC.

012020-08-03 18:00:00 UTC to 2020-08-03 21:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsAug 3, 18:002020-08-03 21:00:00 UTC to 2020-08-04 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-04 00:00:00 UTC to 2020-08-04 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-04 03:00:00 UTC to 2020-08-04 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-04 06:00:00 UTC to 2020-08-04 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-04 09:00:00 UTC to 2020-08-04 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-04 12:00:00 UTC to 2020-08-04 15:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-04 15:00:00 UTC to 2020-08-04 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-04 18:00:00 UTC to 2020-08-04 21:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-04 21:00:00 UTC to 2020-08-05 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-05 00:00:00 UTC to 2020-08-05 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-05 03:00:00 UTC to 2020-08-05 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-05 06:00:00 UTC to 2020-08-05 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-05 09:00:00 UTC to 2020-08-05 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-05 12:00:00 UTC to 2020-08-05 15:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-05 15:00:00 UTC to 2020-08-05 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 commentsAug 5, 15:002020-08-05 18:00:00 UTC to 2020-08-05 21:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-05 21:00:00 UTC to 2020-08-06 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-06 00:00:00 UTC to 2020-08-06 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-06 03:00:00 UTC to 2020-08-06 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-06 06:00:00 UTC to 2020-08-06 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-06 09:00:00 UTC to 2020-08-06 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-06 12:00:00 UTC to 2020-08-06 15:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-06 15:00:00 UTC to 2020-08-06 18:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-06 18:00:00 UTC to 2020-08-06 21:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-06 21:00:00 UTC to 2020-08-07 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-07 00:00:00 UTC to 2020-08-07 03:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-07 03:00:00 UTC to 2020-08-07 06:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-07 06:00:00 UTC to 2020-08-07 09:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-07 09:00:00 UTC to 2020-08-07 12:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-07 12:00:00 UTC to 2020-08-07 15:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-08-07 15:00:00 UTC to 2020-08-07 18:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsAug 7, 15:00

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Aug 3, 18:002020-08-03 18:00:00 UTC2020-08-03 21:00:00 UTC101
Aug 3, 21:002020-08-03 21:00:00 UTC2020-08-04 00:00:00 UTC000
Aug 4, 00:002020-08-04 00:00:00 UTC2020-08-04 03:00:00 UTC000
Aug 4, 03:002020-08-04 03:00:00 UTC2020-08-04 06:00:00 UTC000
Aug 4, 06:002020-08-04 06:00:00 UTC2020-08-04 09:00:00 UTC000
Aug 4, 09:002020-08-04 09:00:00 UTC2020-08-04 12:00:00 UTC000
Aug 4, 12:002020-08-04 12:00:00 UTC2020-08-04 15:00:00 UTC000
Aug 4, 15:002020-08-04 15:00:00 UTC2020-08-04 18:00:00 UTC000
Aug 4, 18:002020-08-04 18:00:00 UTC2020-08-04 21:00:00 UTC000
Aug 4, 21:002020-08-04 21:00:00 UTC2020-08-05 00:00:00 UTC000
Aug 5, 00:002020-08-05 00:00:00 UTC2020-08-05 03:00:00 UTC000
Aug 5, 03:002020-08-05 03:00:00 UTC2020-08-05 06:00:00 UTC000
Aug 5, 06:002020-08-05 06:00:00 UTC2020-08-05 09:00:00 UTC000
Aug 5, 09:002020-08-05 09:00:00 UTC2020-08-05 12:00:00 UTC000
Aug 5, 12:002020-08-05 12:00:00 UTC2020-08-05 15:00:00 UTC000
Aug 5, 15:002020-08-05 15:00:00 UTC2020-08-05 18:00:00 UTC000
Aug 5, 18:002020-08-05 18:00:00 UTC2020-08-05 21:00:00 UTC000
Aug 5, 21:002020-08-05 21:00:00 UTC2020-08-06 00:00:00 UTC000
Aug 6, 00:002020-08-06 00:00:00 UTC2020-08-06 03:00:00 UTC000
Aug 6, 03:002020-08-06 03:00:00 UTC2020-08-06 06:00:00 UTC000
Aug 6, 06:002020-08-06 06:00:00 UTC2020-08-06 09:00:00 UTC000
Aug 6, 09:002020-08-06 09:00:00 UTC2020-08-06 12:00:00 UTC000
Aug 6, 12:002020-08-06 12:00:00 UTC2020-08-06 15:00:00 UTC000
Aug 6, 15:002020-08-06 15:00:00 UTC2020-08-06 18:00:00 UTC000
Aug 6, 18:002020-08-06 18:00:00 UTC2020-08-06 21:00:00 UTC000
Aug 6, 21:002020-08-06 21:00:00 UTC2020-08-07 00:00:00 UTC000
Aug 7, 00:002020-08-07 00:00:00 UTC2020-08-07 03:00:00 UTC000
Aug 7, 03:002020-08-07 03:00:00 UTC2020-08-07 06:00:00 UTC000
Aug 7, 06:002020-08-07 06:00:00 UTC2020-08-07 09:00:00 UTC000
Aug 7, 09:002020-08-07 09:00:00 UTC2020-08-07 12:00:00 UTC000
Aug 7, 12:002020-08-07 12:00:00 UTC2020-08-07 15:00:00 UTC000
Aug 7, 15:002020-08-07 15:00:00 UTC2020-08-07 18:00:00 UTC101

What Hacker News says

2 sources
Another example is that all the infrastructure for serving Julia packages to Julia users in the new 1.5 release is implemented in Julia. This is a content distribution network served by highly concurrent servers over HTTPS. The systems interacts with git servers, GitHub APIs and AWS S3 among many other moving pieces. Code can be found here: https://github.com/JuliaPackaging/PkgServer.jl. Writing servers in Julia is really pleasant thanks to the clean coroutine-based task model. Under the hood, Julia uses libuv to get efficient high-concurrency I/O with an event loop. But from the user's perspective, you just write simple blocking code and use `@sync` and `@async` to spawn concurrent tasks. If you want to use multiple threads, just use `@spawn` instead of `@async`. This is very similar to Go's highly successful I/O and concurrency model.
In JuliaCon2020: Julia Is Production Ready
The PkgServer is an open source caching server, available here: https://github.com/JuliaPackaging/PkgServer.jl The PkgServer protocol serves content-addressed chunks of data to Julia Pkg clients, so to download a certain version of a package, the Pkg client will request things like `GET /package/${pkg_uuid}/${content_hash}`. If you can pre-fill a PkgServer with all of the packages that you want, then it can serve a client just fine. The full design is that there are a small number of "Storage Servers" that continually explore the global registry of packages (called `General`, located here: https://github.com/JuliaRegistries/General), downloading and storing tarballs for every version of every package that is available. These storage servers store everything forever, while Pkg servers contain an LRU cache to allow them to be deployed clo
Read the rest
se to whatever compute resources will be requesting packages. For an airgapped solution, you could generate a static snapshot of some selection of the packages you want to serve, then serve them with nginx and point to that "static storage server" with the opensource Pkg Server, and it would all "just work". An example of how to generate a static storage server is here: https://github.com/JuliaPackaging/PkgServer.jl/blob/master/b..., you would serve the resultant directory structure with something like nginx, then point the Pkg Server to that server as the upstream storage server. I will note that Julia Computing offers an enterprise solution for dealing with secure/restrictive environments called JuliaTeam which provides this in a convenient, managed bundle, along with many other useful features. EDIT: Ah, I forgot to mention, Stefan and I gave a talk at JuliaCon 2020 that touches on some of this, here's a link to the timestamp of the relevant section: https://youtu.be/xPhnJCAkI4k?t=350 And for more info, here's the original planning issue (note some things have changed as we've implemented it over the last year, but the bones are the same): https://github.com/JuliaLang/Pkg.jl/issues/1377#issue-492482...
In Julia 1.5 Highlights

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.