What does it do?

SymbolSource is an integrated solution for hosting and browsing code releases - specifically, but not only, NuGet and OpenWrap packages. It's true power, however, comes from implementing the srcsrv protocol, which allows Visual Studio and other compatible software to download on-demand symbol (PDB) and source files from SymbolSource. What this means for you, is that by doing a bit of configuration in your development environment, you'll be able to source step during debugging into the code of libraries that you use - both open source and commercial. SymbolSource has been created out of a real need and is being maintained by developers for developers.

  • NuGet
    Consumes and provides
    NuGet packages
  • OpenWrap
    Consumes and provides
    OpenWrap packages
  • SymbolSource
    Hosts symbols (PDB files)
    and sources (C#, VB.NET, C++)
  • SymbolSource
    Symbol server and source server
    compatible with Microsoft tools
  • Secure
    Flexible security for
    public and private content
  • Secure
    Integrated with MyGet
    with shared keys and password

Who is it for?

All developers

Access symbols (PDB files) and sources of third-party libraries on-demand while debugging and source stepping in Visual Studio , WinDbg or any other srcsrv compatible application, like Process Explorer from SysInternals . Symbol and source servers provide a huge productivity boost and are many times the only way to analyze behaviour of running code, especially in production environments, where only release binaries are used. Safely share private projects with others using NuGet and OpenWrap packages hosted in SymbolSource Private Repositories . Read and write permissions to whole repositories or only specific projects or versions can be assigned flexibly to any other user of SymbolSource. Private Repositories also support on-demand symbol and source downloads during debugging.

Open source contributors

Host symbols and sources for the projects you mantain. SymbolSource provides a free hosting service, so that all OSS project releases can be debugged at least as easily as the .NET Framework can using the Microsoft Reference Source Server . Permissions to publish to public symbol repositories like NuGet are determined by contacting their respective mainstream hosts - in this case nuget.org . SymbolSource accepts uploads through NuGet or OpenWrap compatible tools as standard packages, or as custom ZIP files using a wizard available on the web site. Create SymbolSource Private Repositories for pre-release versions of projects, separate from mainstream hosts like nuget.org , but still available to everyone for read access. This allows true pre-release package testing, without the need to setup any additional infrastructure or the risk of polluting official package feeds. Although anyone can download packages, symbols and sources from a correctly configure repository, only appointed maintainers are able to publish.

Enterprise users

Maintain a separate database of users and repositories for internal company use. SymbolSource Company Accounts provide all of the publicly available features: NuGet and OpenWrap package hosting, on-demand symbol and source file download and an extensive permission system - plus the possibility to manage user accounts, enforce consistent login names and create an unlimited number of arbitrarily named repositories. SymbolSource exposes all of its features through a SOAP API , which allows administrators to automatically provision user accounts and integrate with existing infrastructure, both in terms of content management and access control.

Commercial library vendors

Use SymbolSource as a secure distribution platform for developer-focused software products. Companies developing control or utility libraries can use SymbolSource as a flexible platform for release distribution. Binaries, symbols and sources can be uploaded using standardized, easy-to-automate tools like NuGet and OpenWrap , providing customers with all of the benefits of having a well-known debugging server and making available all other features of SymbolSource, like online code navigation and analysis. Automatically grant permissions on the version/release level using SymbolSource's SOAP API . SymbolSource can honour any sales policy set up by a library vendor, wether it involves specific release purchases, subscription models, or any combination thereof - and can be integrated with exisisting web sites or CRM solutions.

Where can I learn more?

Genesis - PDBs, debugging, symstore.exe and pain

When source code is compiled on Microsoft platforms, whether into native machine code (as with C or C++) or an intermediate language (as with C#), information that would normally be lost in this process, such as line-to-instruction mappings used by debuggers for source-stepping, is saved into PDB files, also known as symbol files. Symbols are normally placed alongside compiled DLL and EXE files and read from there, but Visual Studio, WinDbg and other programs implement the SRCSRV protocol, by which they can download matching symbols and sources on demand from remote servers. This lets them get those missing mappings for assemblies only provided in binary form.

SymbolSource was developed to solve two major problems with symbol files:

  1. Creating and maintaining a symbol store using tools provided by Microsoft is insanely painful when you're not using TFS.
  2. There was no symbol store for the growing number of open-source libraries, which made debugging them a lot harder.
Learn more about the problems with symbol files and how SymbolSource solves them

Architecture - instances, accounts, repositories

SymbolSource is an online repository of packages, symbols and sources, compatible with NuGet, OpenWrap and SRCSRV clients such as Visual Studio and WinDbg.

SymbolSource was designed to host:

  • publicly available repositories of symbols and sources matching official releases of open-source libraries, such as NHibernate, available on nuget.org, chocolatey.org or their respective websites;
  • private, secure repositories of NuGet and OpenWrap packages with their matching symbols and sources;
  • company instances in a software-as-a-service model, with separate databases of users and repositories, configurable by a company delegated administrator.

Because of its flexibility, SymbolSource can provide repositories that remain in sync with nuget.org, chocolatey.org, myget.org and your own package feeds. Depending on the actual use case, this can include sharing users, repositories, projects and permissions, or any combination thereof.

Learn more about the structuring of SymbolSource instances, accounts and repositories;

Using - configuring Visual Studio, WinDBG and debugging

In most cases, you will want to use SymbolSource to download PDB files and sources on-demand in your debugging sessions. This will make tracking down elusive bugs much easier, as you'll be able to step into many of the third-party libraries that you reference in binary form, without the need to replace them with locally compiled versions manually. SymbolSource also makes it easier to do post-mortem analysis of crash dumps, in which case replacing references in this way isn't even possible. Configuring you debugger to use Visual Studio consists of just a few simple steps, and it's usually a one time thing only.

We recommend SymbolSource as the next tool to learn right after NuGet or OpenWrap.

Learn more about configuring Visual Studio and using SymbolSource during debugging;

Publishing - packaging and pushing with NuGet and OpenWrap

Symbols and sources are only available on SymbolSource once published by the authors of their respective binaries. Thankfully, a lot of open-source groups and individual developers already do so as part of their regular release procedures.

Publishing symbols and sources is really easy and can be done with specially structured NuGet and OpenWrap packages. Symbol package support is even built into nuget.exe's pack command, which makes creating one as simple as adding a -symbols command-line arguments.

Publishing to SymbolSource is a win-win situation. Users of your libraries get a chance to step into your source effortlessly, which helps them better understand how the libraries work and track down bugs more easily. This lets them get their job quicker and leads to less support requests and better, more detailed bug reports for you.

Learn more about the methods, tools and best practises of publishing to SymbolSource;

Packages - support for serving NuGet and OpenWrap packages

SymbolSource not only accepts incoming packages with symbols and sources, but it can also host all sorts of NuGet and OpenWrap packages. In this respect it is similar to nuget.org, except that it lets you create many separate package feeds, either public, or private - with read or write access restricted to certain users. SymbolSource is to date also the only implementation of an OpenWrap package server widely available.

Learn more about using SymbolSource as a package store with NuGet and OpenWrap;

Pricing - real-world's foothold in SymbolSource

Running servers and maintaining software isn't free, but because of the value that SymbolSource brings for all of the developers out there, and the countless times it has helped us ourselves on our day jobs, we always have and always will provide it for free, as long as you decide to publish symbols and sources openly.

If you'd like host private files with SymbolSource and secure them from third-party access, we'll ask you to have a look at our pricing plans and pay a fair price for the service level that suites you. You can also decide to use the Community edition outlined below.

Learn more about SymbolSource editions and pricing;

Basic - sharing the idea despite the costs

Becasue our mission at SymbolSource is most of all promoting our vision of debuggable third-party dependencies and widening symbol server adoption, we maintain a simplyfied, open-source and free-for-all version of our software: SymbolSource.Server.Basic. It lacks many of the security and managment features of the full edition, but you are free install as many instances of it as you like, on premise or in the cloud, and secure them in any way possible with IIS. Most importantly though, SymbolSource.Server.Basic shares all of the core NuGet, OpenWrap and SRCSRV code with the online edition, so you can use it with the same packaging and publishing procedures.

Learn more about installing and using the community edition of SymbolSource;

Troubleshooting - we're here should anything go wrong

Should you have any questions or issues while using SymbolSource, there are a few ways to get help:

  1. Consult the SymbolSource FAQ
  2. Start a discussion in our Google Group
  3. E-mail us a support request directly
  4. Ask us on Twitter: @TripleEmcoder or @BenekDlugonogi