Programming language: Swift
License: MIT License
Tags: Network    
Latest version: v5.0.0

SolarNetwork alternatives and similar libraries

Based on the "Network" category.
Alternatively, view SolarNetwork alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of SolarNetwork or a related project?

Add another 'Network' Library



CocoaPods Compatible Carthage Compatible Platform

Elegant network abstraction layer in Swift.

  • [δΈ­ζ–‡](ChineseREADME.md)
  • Design
  • Features
  • Requirements
  • Communication
  • Installation
  • Usage
    • Base Usage - Target - Request - Download - Upload - Decode
    • [Target](Documentation/Target.md) - Configuration of a Host.
    • [Request](Documentation/Request.md) - Configuration of a DataRequest.
    • [Download](Documentation/Download.md) - Configuration of a DownloadRequest or ResumeDownloadRequest.
    • [Upload](Documentation/Upload.md) - Configuration of a UploadRequest(Data - File - InputStream - FormData).
    • [Progress](Documentation/Progress.md) - Progress
    • [Response](Documentation/Response.md) - Decode - Error
    • [Plugin](Documentation/Plugin.md) - WillSend - DidReceive
  • License
  • [UpdateLog](Documentation/UpdateLog.md)


Alamofire and Moya are elegant Swift network frames. They each have their own advantages. When I use them, I always want to combine the advantages of both, make them easy to use and retain their original features. So I wrote the SolarNetwork.

  • SLNetwork corresponds to a SessionManager.
  • SLTarget corresponds to a Host, or a set of requests for the same configuration.
  • SLRequest, SLDownloadRequest, SLUploadRequest corresponds to Request of Data, Download, Upload.
  • SLProgress return progress when download or upload.
  • SLResponse response of a request which you can decode to JsonObject or Model.
  • SLPlugin you can modify SLRequest in willSend and modify SLResponse in didReceive.
  • SLReflection reflex properties of SubSLRequest to Alamofire.Parameters.

So a complete request process is:

                   .decodeTo(Model: Decodable).dealWithError

In most cases, what you need to concerned about is:



  • [x] URL / JSON / plist Parameter Encoding
  • [x] Upload File / Data / Stream / MultipartFormData
  • [x] Download File using Request or Resume Data
  • [x] Authentication with URLCredential
  • [x] Upload and Download Progress Closures with Progress
  • [x] Dynamically Adapt and Retry Requests
  • [x] TLS Certificate and Public Key Pinning
  • [x] Network Reachability
  • [x] Pre-populate the DNS cache
  • [x] Complete Logger


  • iOS 8.0+
  • Xcode 9+
  • Swift 4+


  • If you'd like to ask a general question, use Stack Overflow.
  • If you found a bug, open an issue.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.



CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:

$ gem install cocoapods

CocoaPods 1.1+ is required.

To integrate SolarNetwork into your Xcode project using CocoaPods, specify it in your Podfile:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'

target '<Your Target Name>' do
    pod 'SolarNetwork'

Then, run the following command:

$ pod install


Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.

You can install Carthage with Homebrew using the following command:

$ brew update
$ brew install carthage

To integrate Alamofire into your Xcode project using Carthage, specify it in your Cartfile:

github "ThreeGayHub/SolarNetwork"

Run carthage update

If this is your first time using Carthage in the project, you'll need to go through some additional steps as explained over at Carthage.


Base Usage


import SolarNetwork

struct HTTPBinTarget: SLTarget {
    var baseURLString: String { return "https://httpbin.org" }

let HTTPBinNetwork = SLNetwork(HTTPBinTarget())


import SolarNetwork

//Mark: - GET
class HTTPBinGETRequest: SLRequest {

    override func loadRequest() {

        self.path = "/get"


HTTPBinNetwork.request(HTTPBinGETRequest()) { (response) in
    if let dictionary = response.dataDictionary {

    else if let error = response.error {
        //show error

//Mark: - POST
class HTTPBinPOSTRequest: SLRequest {

    override func loadRequest() {

        self.method = .post
        self.path = "/post"

     properties will encode to parameters by Reflection
     ["userName": "myUserName",
      "password": "myPassword",
      "name" : "youName"]
    let userName = "myUserName"
    let password = "myPassword"

    var name: String?

let postReq = HTTPBinPOSTRequest()
postReq.name = "yourName"
HTTPBinNetwork.request(postReq) { (response) in
    if let dictionary = response.dataDictionary {

    else if let error = response.error {
        //show error


import SolarNetwork

class HTTPBinDownLoadRequest: SLDownloadRequest {

    override func loadRequest() {

        self.path = "/image/png"
        self.isResume = true //control the download request is resume or not, default is false

HTTPBinNetwork.download(HTTPBinDownLoadRequest(), progressClosure: { (progress) in

}) { (resposne) in



import SolarNetwork

class HTTPBinUploadRequest: SLUploadRequest {

    override func loadRequest() {

        self.path = "/post"


let uploadRequest = HTTPBinUploadRequest()
uploadRequest.data = data //data to upload
HTTPBinNetwork.upload(uploadRequest, progressClosure: { (progress) in

}) { (response) in



In Swift 4, you can use Codable.

import SolarNetwork

struct User: Decodable { //Swift 4 Codable
    var id: Int
    var name: String
    var token: String

HTTPBinNetwork.request(UserRequest()) { (response) in
    if let user = response.decode(to: User.self) {

    else if let error = response.error {
        //show error


Alamofire is released under the MIT license. See LICENSE for details.

*Note that all licence references and agreements mentioned in the SolarNetwork README section above are relevant to that project's source code only.