Zewo is a set of libraries for server side development. With Zewo you can write your web app, REST API, command line tool, database driver, etc. Our goal is to create an ecosystem around the modules and tools we provide so you can focus on developing your application or library, instead of doing everything from scratch.
Currently, we have around 50+ packages. This list grows very fast so it might be outdated. To be sure just check our organization.
Before we start we need to install some tools and dependencies.
You can skip swiftenv step and some swiftenv instructions below if you already have
DEVELOPMENT-SNAPSHOT-2016-02-08-a
in yourPATH
, but we highly recommend look at it.
Swiftenv allows you to easily install, and switch between multiple versions of Swift. You can install swiftenv following official instructions
note: if you use homebrew add
--HEAD
option as the stable version has some issues.
Xcode is apple's software development IDE.
Homebrew is a package manager for OS X.
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
This brew formula installs all Zewo dependencies.
brew install zewo/tap/zewo
sudo apt-get install clang libicu-dev
echo "deb [trusted=yes] http://apt.zewo.io/deb ./" | sudo tee --append /etc/apt/sources.list
sudo apt-get update
sudo apt-get install zewo
First we need to create a directory for our app.
mkdir hello && cd hello
Then we install Swift Development Snapshot from February 8, 2016.
swiftenv install DEVELOPMENT-SNAPSHOT-2016-02-08-a
swiftenv local DEVELOPMENT-SNAPSHOT-2016-02-08-a
Now we initialize the project with Swift Package Manager (SPM).
swift build --init
This command will create the basic structure for our app.
.
├── Package.swift
├── Sources
│ └── main.swift
└── Tests
Open Package.swift
with your favorite editor and add HTTPServer
, Router
as dependencies.
import PackageDescription
let package = Package(
name: "hello",
dependencies: [
.Package(url: "https://github.com/Zewo/HTTPServer.git", majorVersion: 0, minor: 3),
.Package(url: "https://github.com/Zewo/Router.git", majorVersion: 0, minor: 3),
]
)
Open main.swift
and make it look like this:
import HTTPServer
import Router
let router = Router { route in
route.get("/hello") { _ in
return Response(body: "hello world")
}
}
try Server(responder: router).start()
This code:
- Creates an HTTP server that listens on port
8080
by default. - Configures a router which will route
/hello
to a responder that responds with"hello world"
. - Mounts a logger middleware on the server that will log every request/response pair to the standard error stream (stderr) by default.
Now let's build the app.
swift build
After it compiles, run it.
.build/debug/hello
Now open your favorite browser and go to http://localhost:8080/hello. You should see hello world
in your browser's window. 😊
Zewo has a lot of modules, check out our organization for more. You can also take a look at our documentation which is growing every day. If you have any doubts you can reach us at our slack. We're very active and always ready to help.
See also:
To make your life easier we provide the Zewo umbrella package which resides in this repository. This package provides the most important modules so you don't have to add all of them one by one.
import PackageDescription
let package = Package(
dependencies: [
.Package(url: "https://github.com/Zewo/Zewo.git", majorVersion: 0, minor: 3)
]
)
Hey! Like Zewo? Awesome! We could actually really use your help!
Open source isn't just writing code. Zewo could use your help with any of the following:
- Finding (and reporting!) bugs.
- New feature suggestions.
- Answering questions on issues.
- Documentation improvements.
- Reviewing pull requests.
- Helping to manage issue priorities.
- Fixing bugs/new features.
If any of that sounds cool to you, send a pull request! After a few contributions, we'll add you to the organization team so you can merge pull requests and help steer the ship 🚢
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.
Because we have lots of modules we use the main repo (this one) to track all our tasks, bugs, features, etc. using Github issues.
Some of us use ZenHub to manage the issues. Unfortunately ZenHub only supports Google Chrome and Firefox, but looks like they're working on Safari support.
- Base64
- BasicAuthMiddleware
- ChannelStream
- CHTTPParser
- CLibpq
- CLibpq-OSX
- CLibvenice
- CMySQL
- CMySQL-OSX
- ContentNegotiationMiddleware
- COpenSSL
- COpenSSL-OSX
- CURIParser
- CZeroMQ
- Data
- Event
- File
- HTTP
- http_parser
- HTTPClient
- HTTPServer
- HTTPFile
- HTTPSClient
- HTTPSServer
- InterchangeData
- IP
- JSON
- JSONMediaType
- libvenice
- Log
- LogMiddleware
- MediaType
- Mustache
- MySQL
- OpenSSL
- POSIXRegex
- PostgreSQL
- RegexRouteMatcher
- Router
- Sideburns
- SQL
- Stream
- String
- System
- TCP
- TCPSSL
- TrieRouteMatcher
- UDP
- URI
- uri_parser
- URLEncodedForm
- Venice
- WebSocket
- Zewo
If you want to contribute with code you should use our development tool zewo-dev. It makes it much easier to deal with the multitude of packages we maintain.
The entire Zewo code base is licensed under MIT. By contributing to Zewo you are contributing to an open and engaged community of brilliant Swift programmers. Join us on Slack to get to know us!
Zewo is released under the MIT license. See LICENSE for details.