bytedance / Unpub
Licence: mit
Self-hosted private Dart Pub server for Enterprise
Stars: ✭ 187
Programming Languages
dart
5743 projects
Projects that are alternatives of or similar to Unpub
Hrcloud2
A full-featured home hosted Cloud Drive, Personal Assistant, App Launcher, File Converter, Streamer, Share Tool & More!
Stars: ✭ 134 (-28.34%)
Mutual labels: self-hosted, enterprise
WorkGroup
Self-Hosted private Social Media-Intranet for Companies.
Stars: ✭ 21 (-88.77%)
Mutual labels: enterprise, self-hosted
Ownhealthrecord
This repository is about the OwnHealthRecord Application Web App
Stars: ✭ 162 (-13.37%)
Mutual labels: self-hosted
Changedetection.io
changedetection.io - The best and simplest self-hosted website change detection monitoring service. An alternative to Visualping, Watchtower etc. Designed for simplicity - the main goal is to simply monitor which websites had a text change. Open source web page change detection.
Stars: ✭ 180 (-3.74%)
Mutual labels: self-hosted
Grocy Docker
ERP beyond your fridge - now containerized - this is the docker repo of https://github.com/grocy/grocy
Stars: ✭ 164 (-12.3%)
Mutual labels: self-hosted
Appsmith
Low code project to build admin panels, internal tools, and dashboards. Integrates with 15+ databases and any API.
Stars: ✭ 12,079 (+6359.36%)
Mutual labels: self-hosted
Rebuild
Building your business-systems freely! 高度可定制化的企业管理系统 企业中台
Stars: ✭ 169 (-9.63%)
Mutual labels: enterprise
Katlas
A distributed graph-based platform to automatically collect, discover, explore and relate multi-cluster Kubernetes resources and metadata.
Stars: ✭ 179 (-4.28%)
Mutual labels: enterprise
Viennanet
Framework for quickly creating enterprise microservices on .NET Core https://habr.com/ru/company/raiffeisenbank/blog/516540/
Stars: ✭ 170 (-9.09%)
Mutual labels: enterprise
Hastic Grafana App
Hastic data management server for labeling patterns and anomalies in Grafana
Stars: ✭ 166 (-11.23%)
Mutual labels: self-hosted
Anylink
AnyLink是一个企业级远程办公 ssl vpn 软件,可以支持多人同时在线使用。基于 openconnect 协议开发,并且借鉴了 ocserv 的开发思路,可以完全兼容 AnyConnect 客户端。
Stars: ✭ 177 (-5.35%)
Mutual labels: enterprise
Rapidbay
Self-hosted torrent video streaming service compatible with Chromecast and AppleTV deployable in the cloud
Stars: ✭ 163 (-12.83%)
Mutual labels: self-hosted
Seleniumbase
A Python framework that inspires developers to become better test automation engineers. 🧠💡
Stars: ✭ 2,520 (+1247.59%)
Mutual labels: self-hosted
Leed
Leed (contraction de Light Feed) est un agrégateur RSS libre et minimaliste qui permet la consultation de flux RSS de manière rapide et non intrusive.
Stars: ✭ 160 (-14.44%)
Mutual labels: self-hosted
Selfoss
multipurpose rss reader, live stream, mashup, aggregation web application
Stars: ✭ 2,070 (+1006.95%)
Mutual labels: self-hosted
Choerodon
Open Source Multi-Cloud Integrated Platform
Stars: ✭ 2,149 (+1049.2%)
Mutual labels: enterprise
N8n
Free and open fair-code licensed node based Workflow Automation Tool. Easily automate tasks across different services.
Stars: ✭ 19,252 (+10195.19%)
Mutual labels: self-hosted
Unpub
Unpub is a self-hosted private Dart Pub server for Enterprise, with a simple web interface to search and view packages information.
Screenshots
Usage via command line
pub global activate unpub
unpub --database mongodb://localhost:27017/dart_pub # Replace this with production database uri
Unpub use mongodb as meta information store and file system as package(tarball) store by default.
Dart API is also available for further customization.
Usage via Dart API
Example
import 'package:unpub/unpub.dart' as unpub;
main(List<String> args) async {
var basedir = '/path/to/basedir'; // Base directory to save pacakges
var db = 'mongodb://localhost:27017/dart_pub'; // MongoDB uri
var metaStore = unpub.MongoStore(db);
await metaStore.db.open();
var packageStore = unpub.FileStore(basedir);
var app = unpub.App(
metaStore: metaStore,
packageStore: packageStore,
);
var server = await app.serve('0.0.0.0', 4000);
print('Serving at http://${server.address.host}:${server.port}');
}
Options
Option | Description | Default |
---|---|---|
metaStore (Required) |
Meta information store | - |
packageStore (Required) |
Package(tarball) store | - |
upstream |
Upstream url | https://pub.dev |
googleapisProxy |
Http(s) proxy to call googleapis (to get uploader email) | - |
overrideUploaderEmail |
If specified, unpub will use this email as uploader instead of requesting googleapis | - |
uploadValidator |
See Package validator | - |
Package validator
Naming conflicts is a common issue for private registry. A reasonable solution is to add prefix to reduce conflict probability.
With uploadValidator
you could check if uploaded package is valid.
var app = unpub.App(
// ...
uploadValidator: (Map<String, dynamic> pubspec, String uploaderEmail) {
// Only allow packages with some specified prefixes to be uploaded
var prefix = 'my_awesome_prefix_';
var name = pubspec['name'] as String;
if (!name.startsWith(prefix)) {
throw 'Package name should starts with $prefix';
}
// Also, you can check if uploader email is valid
if (!uploaderEmail.endsWith('@your-company.com')) {
throw 'Uploader email invalid';
}
}
);
Customize meta and package store
Unpub is designed to be extensible. It is quite easy to customize your own meta store and package store.
import 'package:unpub/unpub.dart' as unpub;
class MyAwesomeMetaStore extends unpub.MetaStore {
// Implement methods of MetaStore abstract class
// ...
}
class MyAwesomePackageStore extends unpub.PackageStore {
// Implement methods of PackageStore abstract class
// ...
}
// Then use it
var app = unpub.App(
metaStore: MyAwesomeMetaStore(),
packageStore: MyAwesomePackageStore(),
)
Badges
URL | Badge |
---|---|
/badge/v/{package_name} |
|
/badge/d/{package_name} |
Alternatives
- pub-dev: Source code of pub.dev, which should be deployed at Google Cloud Platform.
- pub_server: An alpha version of pub server provided by Dart team.
Credits
- pub-dev: Web page styles are mostly imported from https://pub.dev directly.
- shields: Badges generation.
License
MIT
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].